مساء الخير عزيزي هبر! هذا هو الجزء الثاني من القصة حول استخدام كاميرا عين السمكة على Raspberry Pi 3. يمكن العثور على الجزء الأول
هنا . في هذه المقالة ، سأتحدث عن معايرة كاميرا عين السمكة واستخدام الكاميرا للكشف عن الأشياء باستخدام حزمة find_object_2d. من يهتم ، من فضلك ، تحت القطة.
معايرة كاميرا عين السمكة باستخدام camera_calibration
هنا أصف إجراء المعايرة بناءً على
الدليل الرسمي على بوابة ros.org.
لإجراء المعايرة ، نحتاج إلى حزمة معايرة الكاميرا. يمكننا تثبيته مع apt:
sudo apt-get install ros-kinetic-camera-calibration
سنحتاج إلى قالب رقعة الداما. قم بتنزيل النموذج من
الدليل الرسمي على ros.org واطبعه. للراحة ، قمت بلصقه على لوح من الخشب الرقائقي:

لنقم بتشغيل برنامج المعايرة:
rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.108 image:=/usb_cam/image_raw camera:=/usb_cam
سنحصل على صورة:

انقل القالب قليلاً وانتظر حتى يتم تحديد القالب في الإطار (لن تظهر خطوط ملونة بنقاط على القالب).


انقل النموذج أكثر قليلاً إلى الجانب. لإجراء المعايرة بنجاح ، نحتاج إلى إجراء سلسلة من حركات القالب أمام الكاميرا من جانب إلى آخر بحيث يقع القالب في جميع المواضع الزاويّة في مجال رؤية الكاميرا (يسار ، يمين ، أعلى وأسفل). على يمين نافذة صورة الكاميرا في نافذة البرنامج توجد لوحة التسجيل مع ثلاثة أشرطة تقدم:
- يلتقط X حركة النمط في الاتجاه الأيسر / الأيمن (أفقيًا) في مجال رؤية الكاميرا
- يلتقط Y حركة النمط في الاتجاه العلوي / السفلي (الأفقي) في مجال رؤية الكاميرا
- يلتقط الحجم نهج / إزالة النموذج من الكاميرا ويميل فيما يتعلق بالكاميرا.
- يقوم Skew بإصلاح منحدر القالب إلى اليسار واليمين ولأعلى ولأسفل (مائل).
وبالتالي ، من أجل المعايرة الناجحة ، من المهم أن يظهر القالب في زوايا مختلفة من الإطار ، ويحتل الإطار بأكمله ويميل أيضًا إلى اليسار واليمين وأعلى وأسفل.
يمكن أن تستغرق معايرة كاميرا عين السمكة على Raspberry Pi بعض الوقت ، لذا كن صبورًا. استغرق إجراء المعايرة الخاص بي 20 دقيقة.
عند اكتمال المعايرة ، يجب تنشيط زر المعايرة (مظلل باللون):

يمكننا أيضًا رؤية نتائج المعايرة في المحطة:

إذا كنت راضيًا عن النتيجة ، فاضغط على الزر COMMIT. سيتم إغلاق نافذة البرنامج وسترى رسالة "كتابة بيانات المعايرة إلى ..." في الوحدة الطرفية.
تحقق من إنشاء الملف المحدد:
ll ~/.ros/camera_info/head_camera.yaml -rw-rw-r-- 1 vladimir vladimir 592 Apr 14 14:02 /home/vladimir/.ros/camera_info/head_camera.yaml
اكتملت المعايرة. الآن يمكن استخدام بيانات المعايرة التي تم الحصول عليها في التعريب البصري وخوارزميات SLAM في ROS.
الكشف عن الكائنات باستخدام find_object_2d
تثبيت
الحزمة بسيط للغاية. قم بتثبيته من مستودع apt في Ubuntu 16.04 لـ ROS Kinetic:
sudo apt-get install ros-kinetic-find-object-2d source /opt/ros/kinetic/setup.bash
قم بتشغيل ROS master و rqt_image_view:
roscore roslaunch usb_cam usb_cam-test.launch
باستخدام الأمر التالي ، ابدأ عقدة الكاشف:
rosrun find_object_2d find_object_2d image:=/usb_cam/image_raw
تفتح نافذة برنامج الكشف:

هنا سنرى الدفق من الكاميرا ونتيجة الكشف عن الميزات المميزة على الأشياء.
بادئ ذي بدء ، سنقوم بإجراء تدريب على الكشف في منشآتنا. ضع الكائن الأول أمام الكاميرا:

انقر بزر الماوس الأيمن على اللوحة اليسرى للكائنات في النافذة وسيتم فتح الخيار إضافة كائنات من المشهد. حدد هذا الخيار وستفتح نافذة إضافة كائن:

بعد اختيار أفضل موضع للكائن ، انقر فوق الزر التقاط صورة لالتقاط صورة للكائن:

نحتاج إلى تحديد الكائن في الصورة. استخدم مؤشر الماوس لتحديد الكائن:

انقر فوق الزر "التالي" لقص الكائن الموجود في الصورة والانتقال إلى الخطوة التالية. بعد اقتصاص الصورة ، نحصل على العدد الإجمالي للسمات المميزة المكتشفة في الكائن. يبقى فقط للضغط على زر النهاية لإضافة الكائن إلى قاعدة بيانات كائنات الكاشف المدربة. هنا نرى الخطوة الأخيرة من الإجراء لإضافة كائن:

ونتيجة لذلك ، قمنا بتدريب الكاشف على شيء واحد. الآن يمكنك تجربة الكشف عن الكائن في المشهد:

لنرسم موضع الكائن المكتشف إلى النهاية الطرفية:
rosrun find_object_2d print_objects_detected
سيكون الإخراج على النحو التالي:
Object 1 detected, Qt corners at (259.387238,103.530960) (448.684052,79.495495) (282.419050,240.049667) (458.438938,199.656717) --- Object 1 detected, Qt corners at (255.340408,104.615120) (451.348079,75.302353) (284.672425,230.382223) (452.696585,197.625600) --- Object 1 detected, Qt corners at (253.440521,102.973320) (447.226440,76.793541) (278.530854,238.918013) (454.377219,197.526599) ---
دعونا نذكر الموضوعات:
rostopic list
ظهر موضوعان جديدان في القائمة: / كائنات و / كائنات Stamped.
نعرض معلومات حول الكائنات المكتشفة:
rostopic echo /objects
layout: dim: [] data_offset: 0 data: [1.0, 266.0, 177.0, 0.7527905702590942, 0.060980819165706635, 0.00022385441116057336, 0.3012462854385376, 0.8929792046546936, 0.0008534671505913138, 334.9065856933594, 182.55294799804688, 1.0] ---
هنا ، تمثل القيمتان الثانية والثالثة (266.0 ، 177.0) عرض الجسم وارتفاعه. تمثل جميع القيم الأخرى في مجال البيانات مصفوفة تجانس 3x3 (تستخدم لحساب موضع الكائن واتجاهه ، وكذلك قيم المقياس والتحويل).
كما تظهر الملاحظات ، فإن find_object_2d يقوم بعمل ضعيف في الكشف عن الكائنات ذات نسيج ضعيف أو بدون نسيج (بدون نسيج). بالإضافة إلى ذلك ، يكون الكاشف غير فعال عند الكشف عن كائن بزاوية كبيرة إلى الكائن (إذا لاحظنا الكائن من الجانب) ، أو على مسافة كبيرة من الكائن.

بعد الانتهاء من العمل مع الكاشف ، سيعرض علينا find_object_2d حفظ الكائنات المضافة إلى القرص.
هذا كل شيء الآن. حظاً طيباً للجميع وأراكم قريباً!