10 KiB
التقاط صورة - Raspberry Pi
في هذا الجزء من الدرس، ستقوم بإضافة مستشعر كاميرا إلى Raspberry Pi وقراءة الصور منه.
الأجهزة
يحتاج Raspberry Pi إلى كاميرا.
الكاميرا التي ستستخدمها هي وحدة كاميرا Raspberry Pi. تم تصميم هذه الكاميرا للعمل مع Raspberry Pi وتُوصَل عبر موصل مخصص على الجهاز.
💁 تستخدم هذه الكاميرا واجهة الكاميرا التسلسلية، وهو بروتوكول من تحالف معالجات صناعة الهواتف المحمولة، المعروف باسم MIPI-CSI. هذا بروتوكول مخصص لإرسال الصور.
توصيل الكاميرا
يمكن توصيل الكاميرا بـ Raspberry Pi باستخدام كابل شريطي.
المهمة - توصيل الكاميرا
-
قم بإيقاف تشغيل Raspberry Pi.
-
قم بتوصيل الكابل الشريطي الذي يأتي مع الكاميرا بالكاميرا. للقيام بذلك، اسحب برفق على المشبك البلاستيكي الأسود في الحامل بحيث يخرج قليلاً، ثم أدخل الكابل في المقبس، مع توجيه الجانب الأزرق بعيدًا عن العدسة، والشرائط المعدنية نحو العدسة. بمجرد إدخال الكابل بالكامل، ادفع المشبك البلاستيكي الأسود إلى مكانه.
يمكنك العثور على رسم متحرك يوضح كيفية فتح المشبك وإدخال الكابل في وثائق Raspberry Pi للبدء باستخدام وحدة الكاميرا.
-
قم بإزالة قبعة Grove Base Hat من Raspberry Pi.
-
مرر الكابل الشريطي عبر فتحة الكاميرا في قبعة Grove Base Hat. تأكد من أن الجانب الأزرق من الكابل يواجه المنافذ التناظرية المسمّاة A0، A1 وما إلى ذلك.
-
أدخل الكابل الشريطي في منفذ الكاميرا على Raspberry Pi. مرة أخرى، اسحب المشبك البلاستيكي الأسود لأعلى، أدخل الكابل، ثم ادفع المشبك إلى مكانه. يجب أن يكون الجانب الأزرق من الكابل مواجهًا لمنافذ USB والإيثرنت.
-
أعد تركيب قبعة Grove Base Hat.
برمجة الكاميرا
يمكن الآن برمجة Raspberry Pi لاستخدام الكاميرا باستخدام مكتبة Python PiCamera.
المهمة - تمكين وضع الكاميرا القديم
لسوء الحظ، مع إصدار نظام التشغيل Raspberry Pi OS Bullseye، تغيرت برامج الكاميرا التي تأتي مع النظام، مما يعني أن PiCamera لم تعد تعمل بشكل افتراضي. هناك بديل قيد التطوير يسمى PiCamera2، لكنه غير جاهز للاستخدام بعد.
في الوقت الحالي، يمكنك ضبط Raspberry Pi على وضع الكاميرا القديم للسماح لـ PiCamera بالعمل. كما أن منفذ الكاميرا معطل افتراضيًا، ولكن تشغيل برامج الكاميرا القديمة يُمكّن المنفذ تلقائيًا.
-
قم بتشغيل Raspberry Pi وانتظر حتى يتم الإقلاع.
-
افتح VS Code، إما مباشرة على Raspberry Pi، أو قم بالاتصال عبر امتداد Remote SSH.
-
قم بتشغيل الأوامر التالية من الطرفية:
sudo raspi-config nonint do_legacy 0 sudo reboot
سيقوم هذا بتبديل إعداد لتمكين برامج الكاميرا القديمة، ثم إعادة تشغيل Raspberry Pi لتفعيل هذا الإعداد.
-
انتظر حتى يتم إعادة تشغيل Raspberry Pi، ثم أعد فتح VS Code.
المهمة - برمجة الكاميرا
قم ببرمجة الجهاز.
-
من الطرفية، قم بإنشاء مجلد جديد في دليل المستخدم
pi
يسمىfruit-quality-detector
. قم بإنشاء ملف في هذا المجلد يسمىapp.py
. -
افتح هذا المجلد في VS Code.
-
للتفاعل مع الكاميرا، يمكنك استخدام مكتبة Python PiCamera. قم بتثبيت حزمة Pip لهذه المكتبة باستخدام الأمر التالي:
pip3 install picamera
-
أضف الكود التالي إلى ملف
app.py
الخاص بك:import io import time from picamera import PiCamera
يقوم هذا الكود باستيراد بعض المكتبات اللازمة، بما في ذلك مكتبة
PiCamera
. -
أضف الكود التالي أسفل هذا لتهيئة الكاميرا:
camera = PiCamera() camera.resolution = (640, 480) camera.rotation = 0 time.sleep(2)
يقوم هذا الكود بإنشاء كائن PiCamera، ويضبط الدقة على 640x480. على الرغم من أن الدقة الأعلى مدعومة (حتى 3280x2464)، إلا أن مصنف الصور يعمل على صور أصغر بكثير (227x227)، لذلك لا حاجة لالتقاط وإرسال صور أكبر.
السطر
camera.rotation = 0
يضبط دوران الصورة. يدخل الكابل الشريطي في الجزء السفلي من الكاميرا، ولكن إذا تم تدوير الكاميرا لتسهيل توجيهها نحو العنصر الذي تريد تصنيفه، يمكنك تغيير هذا السطر إلى عدد درجات الدوران.على سبيل المثال، إذا علقت الكابل الشريطي فوق شيء بحيث يكون في الجزء العلوي من الكاميرا، قم بضبط الدوران ليكون 180:
camera.rotation = 180
تستغرق الكاميرا بضع ثوانٍ لتبدأ، لذا السطر
time.sleep(2)
ضروري. -
أضف الكود التالي أسفل هذا لالتقاط الصورة كبيانات ثنائية:
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
هو أنه لاحقًا في هذا الدرس يمكنك إرسال الصورة إلى مصنف الصور الخاص بك. -
وجه الكاميرا نحو شيء ما وقم بتشغيل هذا الكود.
-
سيتم التقاط صورة وحفظها كـ
image.jpg
في المجلد الحالي. سترى هذا الملف في مستكشف VS Code. اختر الملف لعرض الصورة. إذا كانت بحاجة إلى دوران، قم بتحديث السطرcamera.rotation = 0
حسب الحاجة والتقط صورة أخرى.
💁 يمكنك العثور على هذا الكود في مجلد code-camera/pi.
😀 لقد نجحت في برمجة الكاميرا!
إخلاء المسؤولية:
تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي Co-op Translator. بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.