يستخدم هذا الجزء من التعليمات البرمجية OpenCV لاكتشاف موضع العلامة في كل إطار تم التقاطه بواسطة جهاز الفيديو. استنادًا إلى الأبعاد المادية للعلامة، فإنها تشكل تقديرًا أيضًا. لكل علامة محددة، تتوفر البيانات من خلال UDP، في شكل نص عادي. تقوم بإرجاع ترجمة دوران الكائن بالنسبة إلى الكاميرا، وإحداثيات XY للنقطه الوسطى ثنائية الأبعاد للكائن التي تظهر على صورة الكاميرا. إذا لم تكن العلامة مرئية، فستكون الأرقام التي تم إرجاعها هي NaN.
يرجى ملاحظة أن هذا الرمز لا يستخدم معلومات مؤقتة للتتبع.
وبدلاً من ذلك، فإنه يحاول اكتشاف العلامة وتقدير وضعها في كل إطار تم التقاطه.
.ini
القياسي. أنت بحاجة إلى بيئة Python قياسية مع cv2
ووحدات numpy
المتاحة. بينما تم تطوير الكود باستخدام Python 2.7 وOpenCV 3.4.1 على جهاز Mac، إلا أنه يجب أن يعمل أيضًا مع Python 3 أيضًا والأنظمة الأساسية الأخرى أيضًا. فيما يلي بعض الخطوات لإنشاء علامة: 1. التقط صورة للكائن الخاص بك وقم بقصها. من الناحية المثالية، يجب أن تكون الدقة متوافقة مع الكاميرا الخاصة بك. 2. قم بتحرير ملف التكوين، وتأكد من أنه يحتوي على الأسطر التالية:
[General]
يمكنك ترك كل شيء تقريبًا كما هو في القسم العام، لكنك ستحتاج إلى معايرة الكاميرا الخاصة بك! اقرأ عن كيفية المعايرة هنا. عند إضافة علامة جديدة، ستحتاج إلى ضبط الإعدادات، لذا تأكد من أن صورة الكاميرا ستكون مرئية.
camera_show_picture = 1
وبخلاف ذلك، تتم إضافة علامة جديدة كقسم جديد في ملف التكوين.
الرأس هو الاسم سهل الاستخدام للعلامة
[My custom marker]
حدد اسم الملف والأبعاد الفعلية للعلامة:
marker_file_name = <File name in the same directory or full path>
marker_width = <Units are in mm.>
marker_height = <Units are in mm.>
عند إعداد علامة جديدة، ستحتاج إلى تغيير الإعدادات التالية:
marker_minimum_matching_distance = <Decrease it from 50>
marker_minimum_number_of_matches = <Set this to at least 4>
pose_estimation_running_average = <more than 1>
تتناسب marker_minimum_matching_distance
عكسيًا مع جودة تطابق الميزة بين صورة العلامة والكاميرا. إذا تم تعيينها على مستوى مرتفع جدًا، فستتم مطابقة الميزات الموجودة خارج العلامة، وإذا تم تعيينها على مستوى منخفض جدًا، فلن يتم إجراء أي تطابقات على الإطلاق.
مطلوب marker_minimum_number_of_matches
لتقدير الوضع. مطلوب ما لا يقل عن 4 نقاط متطابقة لحساب إحداثيات translation
وزوايا rotation
. ومع ذلك، كلما زاد عدد التطابقات المطلوبة للتحويل، أصبح التقدير أكثر دقة. إذا تم ضبطه على مستوى عالٍ جدًا، فلن يعمل تقدير الوضعية إلا في عدد قليل من الإطارات.
وأخيرًا، يحدد pose_estimation_running_average
عدد بيانات موضع الإطارات التي يجب حساب متوسطها. قم بزيادة هذا الرقم إذا كانت المواضع التي تم إرجاعها "متشنجة" للغاية. ومع ذلك، كلما زاد عدد الإطارات التي يتم حساب متوسطها معًا، زاد التأخر.
علاوة على ذلك، يمكن أن تكون كل قناة colour
أي رقم طبيعي يتراوح بين 0
و 255
. عناصر marker_feature_colour_*
مخصصة لإظهار موقع التطابقات ذات الجودة الجيدة بين صورة العلامة وصورة الكاميرا. تحدد إعدادات marker_indicator_colour_*
لون مؤشر واحد، والذي يعرض الإحداثيات المحسوبة بواسطة القيم المتوسطة للمطابقات المعروضة. من الناحية المثالية، يجب أن يكون هذا المؤشر دائمًا داخل العلامة، ويتم إرجاعه في حزمة UDP باعتباره centroid
.
marker_feature_colour_R = <0...255>
marker_feature_colour_G = <0...255>
marker_feature_colour_B = <0...255>
marker_indicator_colour_R = <0...255>
marker_indicator_colour_G = <0...255>
marker_indicator_colour_B = <0...255>
python tracker_main.py
حظ سعيد!