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. بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.