8.3 KiB
التقاط صورة - جهاز إنترنت الأشياء الافتراضي
في هذا الجزء من الدرس، ستضيف مستشعر كاميرا إلى جهاز إنترنت الأشياء الافتراضي الخاص بك، وتقوم بقراءة الصور منه.
الأجهزة
سيستخدم جهاز إنترنت الأشياء الافتراضي كاميرا محاكاة ترسل إما صورًا من ملفات أو من كاميرا الويب الخاصة بك.
إضافة الكاميرا إلى CounterFit
لاستخدام كاميرا افتراضية، تحتاج إلى إضافتها إلى تطبيق CounterFit.
المهمة - إضافة الكاميرا إلى CounterFit
أضف الكاميرا إلى تطبيق CounterFit.
-
قم بإنشاء تطبيق Python جديد على جهاز الكمبيوتر الخاص بك في مجلد يسمى
fruit-quality-detectorيحتوي على ملف واحد يسمىapp.pyوبيئة افتراضية لـ Python، وأضف حزم CounterFit باستخدام pip.⚠️ يمكنك الرجوع إلى التعليمات لإنشاء وإعداد مشروع CounterFit Python في الدرس الأول إذا لزم الأمر.
-
قم بتثبيت حزمة إضافية باستخدام pip لتثبيت CounterFit shim الذي يمكنه التفاعل مع مستشعرات الكاميرا عن طريق محاكاة بعض وظائف حزمة Picamera. تأكد من تثبيتها من خلال نافذة طرفية مع تفعيل البيئة الافتراضية.
pip install counterfit-shims-picamera -
تأكد من تشغيل تطبيق الويب CounterFit.
-
قم بإنشاء كاميرا:
-
في مربع إنشاء مستشعر في لوحة المستشعرات، انقر على القائمة المنسدلة نوع المستشعر واختر كاميرا.
-
قم بتعيين الاسم إلى
Picamera. -
اختر زر إضافة لإنشاء الكاميرا.
سيتم إنشاء الكاميرا وستظهر في قائمة المستشعرات.
-
برمجة الكاميرا
يمكن الآن برمجة جهاز إنترنت الأشياء الافتراضي لاستخدام الكاميرا الافتراضية.
المهمة - برمجة الكاميرا
برمج الجهاز.
-
تأكد من فتح تطبيق
fruit-quality-detectorفي VS Code. -
افتح ملف
app.py. -
أضف الكود التالي إلى أعلى ملف
app.pyلتوصيل التطبيق بـ CounterFit:from counterfit_connection import CounterFitConnection CounterFitConnection.init('127.0.0.1', 5000) -
أضف الكود التالي إلى ملف
app.pyالخاص بك:import io from counterfit_shims_picamera import PiCameraيقوم هذا الكود باستيراد بعض المكتبات اللازمة، بما في ذلك الفئة
PiCameraمن مكتبة counterfit_shims_picamera. -
أضف الكود التالي أسفل ذلك لتهيئة الكاميرا:
camera = PiCamera() camera.resolution = (640, 480) camera.rotation = 0يقوم هذا الكود بإنشاء كائن PiCamera، ويضبط الدقة على 640x480. على الرغم من أن الدقة الأعلى مدعومة، إلا أن مصنف الصور يعمل على صور أصغر بكثير (227x227)، لذلك لا حاجة لالتقاط وإرسال صور أكبر.
يقوم السطر
camera.rotation = 0بتعيين دوران الصورة بالدرجات. إذا كنت بحاجة إلى تدوير الصورة من كاميرا الويب أو الملف، قم بتعيين هذا حسب الحاجة. على سبيل المثال، إذا كنت تريد تغيير صورة موزة على كاميرا ويب في وضع أفقي إلى وضع عمودي، قم بتعيينcamera.rotation = 90. -
أضف الكود التالي أسفل ذلك لالتقاط الصورة كبيانات ثنائية:
image = io.BytesIO() camera.capture(image, 'jpeg') image.seek(0)يقوم هذا الكود بإنشاء كائن
BytesIOلتخزين البيانات الثنائية. يتم قراءة الصورة من الكاميرا كملف JPEG وتخزينها في هذا الكائن. يحتوي هذا الكائن على مؤشر موقع لمعرفة مكانه في البيانات بحيث يمكن كتابة المزيد من البيانات في النهاية إذا لزم الأمر، لذلك يقوم السطرimage.seek(0)بإعادة هذا المؤشر إلى البداية حتى يمكن قراءة جميع البيانات لاحقًا. -
أسفل ذلك، أضف الكود التالي لحفظ الصورة في ملف:
with open('image.jpg', 'wb') as image_file: image_file.write(image.read())يقوم هذا الكود بفتح ملف يسمى
image.jpgللكتابة، ثم يقرأ جميع البيانات من كائنBytesIOويكتبها إلى الملف.💁 يمكنك التقاط الصورة مباشرة إلى ملف بدلاً من كائن
BytesIOعن طريق تمرير اسم الملف إلى استدعاءcamera.capture. السبب في استخدام كائنBytesIOهو أنه لاحقًا في هذا الدرس يمكنك إرسال الصورة إلى مصنف الصور الخاص بك. -
قم بتكوين الصورة التي ستلتقطها الكاميرا في CounterFit. يمكنك إما تعيين المصدر إلى ملف، ثم تحميل ملف صورة، أو تعيين المصدر إلى كاميرا ويب، وسيتم التقاط الصور من كاميرا الويب الخاصة بك. تأكد من اختيار زر تعيين بعد اختيار صورة أو تحديد كاميرا الويب.
-
سيتم التقاط صورة وحفظها كـ
image.jpgفي المجلد الحالي. سترى هذا الملف في مستكشف VS Code. اختر الملف لعرض الصورة. إذا كانت بحاجة إلى تدوير، قم بتحديث السطرcamera.rotation = 0حسب الضرورة والتقط صورة أخرى.
💁 يمكنك العثور على هذا الكود في المجلد code-camera/virtual-iot-device.
😀 لقد نجحت في برمجة الكاميرا!
إخلاء المسؤولية:
تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي Co-op Translator. بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.


