جدول المحتويات:

عد كائن Raspberry Pi: 5 خطوات
عد كائن Raspberry Pi: 5 خطوات

فيديو: عد كائن Raspberry Pi: 5 خطوات

فيديو: عد كائن Raspberry Pi: 5 خطوات
فيديو: Course Lesson 5 of 10: Controlling RGB LED WS2812B Using Raspberry Pi Pico 2024, يوليو
Anonim
عد كائن Raspberry Pi
عد كائن Raspberry Pi

رؤية الكمبيوتر ، بلا شك ، شيء رائع! باستخدام هذا ، يكتسب الكمبيوتر القدرة على "رؤية" واستشعار البيئة المحيطة بشكل أفضل ، مما يسمح بتطوير تطبيقات معقدة ومفيدة ورائعة. تتواجد تطبيقات مثل اكتشاف الوجه والتعرف عليه وتتبع الأشياء واكتشاف الأشياء بشكل متزايد في أنشطتنا اليومية ، وذلك بفضل تطورات رؤية الكمبيوتر.

بالنظر إلى مدى تقدم وإمكانية الوصول إلى أطر وأدوات رؤية الكمبيوتر ، فإن التطبيق الموضح في هذه المقالة يناسب تمامًا: استخدام Raspberry PI البسيط وإطار رؤية كمبيوتر مفتوح المصدر وخالي من التكلفة يسمى OpenCV لحساب الكائنات أثناء الحركة ، وبشكل أكثر دقة إلى أي مدى تدخل الأشياء وتخرج من منطقة مراقبة معينة.

الخطوة 1: التعمق: كيف يمكن اكتشاف حركة الكائن في تدفق الصور؟

التعمق: كيف يمكن اكتشاف حركة الكائن في تدفق الصور؟
التعمق: كيف يمكن اكتشاف حركة الكائن في تدفق الصور؟

حان الوقت الآن للتعمق في معالجة الصور:

كيفية الحصول على بعض صور دفق كاميرا الويب واكتشاف أن شيئًا ما قد انتقل إلى هناك

يتكون من خمس خطوات:

الخطوة 1: لتسليط الضوء على الكائن في الحركة

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

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

لتقليل وقت معالجة الصورة ، قبل إجراء ترجمة فرعية للخلفية ، يتم تحويل الإطار الملتقط والإطار المرجعي إلى صورة ذات مقياس رمادي. لكن لماذا؟ إنها مشكلة تتعلق بكفاءة الحوسبة: الصورة التي تقدم ألوانًا متعددة (صورة ملونة) بها ثلاث معلومات لكل بكسل: مكونات اللون الأحمر والأزرق والأخضر (معيار RGB القديم ولكن الذهبي). لذلك ، من الناحية الحسابية ، يمكن تعريف كل بكسل على أنه مصفوفة من ثلاث قيم ، كل منها يمثل مكونًا لونيًا. لذلك ، بتوسيعها إلى الصورة بأكملها ، ستكون الصورة النهائية في الواقع مزيجًا من ثلاثة مكونات للصورة: مكونات الصورة باللون الأحمر والأزرق والأخضر.

لمعالجتها ، مطلوب الكثير من العمل! ومع ذلك ، في الصور ذات المقياس الرمادي ، يحتوي كل بكسل على معلومات لون واحدة فقط. لذا ، فإن معالجة الصورة الملونة تكون أبطأ بثلاث مرات مما هي عليه في حالة الصورة ذات المقياس الرمادي (ثلاث مرات على الأقل ، اعتمادًا على التقنية المستخدمة). وهناك المزيد: بالنسبة لبعض الأغراض (مثل هذا المشروع) ، فإن معالجة كل الألوان ليست ضرورية أو مهمة على الإطلاق. لذلك ، توصلنا إلى الاستنتاج: يوصى بشدة باستخدام الصور ذات المقياس الرمادي لغرض معالجة الصور. بعد ترجمة الخلفية ، من الضروري تطبيق مرشح Gaussian Blur.

يعمل مرشح Gaussian Blur المطبق على صورة الخلفية التي تم طرحها على تنعيم كل معالم الكائن المتحرك المكتشف. بالتأكيد ، سيكون مفيدًا في الخطوات التالية لمعالجة الصور.

الخطوة الثانية: التحويل الثنائي

ثنائي
ثنائي

في معظم حالات معالجة الصور ، يعد الترميز الثنائي خطوة إلزامية تقريبًا بعد تمييز الكائنات / الخصائص في الصورة. السبب: في الصورة الثنائية ، يمكن أن يفترض كل لون بكسل قيمتين فقط: 0x00 (أسود) أو 0xFF (أبيض). يساعد هذا كثيرًا في معالجة الصور من أجل طلب "قوة حوسبة" أقل لتطبيق تقنيات معالجة الصور في الخطوات التالية. يمكن إجراء عملية ثنائية لمقارنة لون كل بكسل للصورة ذات المقياس الرمادي بعتبة معينة. إذا كانت قيمة لون البكسل أكبر من العتبة ، فسيفترض لون البكسل هذا قيمة بيضاء (0xFF) ، وإذا كانت قيمة لون البكسل أقل من العتبة ، فسيفترض لون البكسل هذا القيمة السوداء (0x00). للأسف ، اختيار قيمة العتبة ليس من السهل القيام به. يعتمد على عوامل البيئة ، مثل ظروف الإضاءة. يمكن أن يؤدي الاختيار الخاطئ لقيمة العتبة إلى تدمير كل الخطوات إلى أبعد من ذلك. لذلك ، أوصيك بشدة بتعديل حد يدويًا في المشروع لحالتك قبل اتخاذ أي إجراءات أخرى. يجب أن تضمن هذه القيمة الحدية أن الكائن المتحرك يظهر في صورة ثنائية. في حالتي ، بعد الاختيار المناسب للحد الأدنى ، ينتج عنه ما تراه في الشكل 5.

الشكل 5 - صورة ثنائية

الخطوة الثالثة: التوسيع

حتى الآن ، كان من الممكن اكتشاف الأجسام المتحركة ، وتمييزها ، وتطبيق الترميز الثنائي ، مما ينتج عنه صورة واضحة جدًا للكائن المتحرك (= صورة واضحة جدًا للكائن لأغراض معالجة الصور). يتم تقريبًا التحضير لعد الكائن. تعني كلمة "ALMOST" هنا أن هناك بعض التعديلات الدقيقة التي يجب إجراؤها قبل الانتقال. في هذه المرحلة ، توجد فرص حقيقية لوجود "ثقوب" في الكائنات (كتل بكسل سوداء في الكائن المظلل باللون الأبيض). يمكن أن تكون هذه الثقوب أي شيء ، من ظروف إضاءة معينة إلى جزء من شكل الكائن. بمجرد أن تتمكن الثقوب من "إنتاج" أشياء زائفة داخل أشياء حقيقية (اعتمادًا على حجمها ومكانها) ، فإن عواقب وجود الثقوب في الصورة يمكن أن تكون كارثية على عدد الكائنات. هناك طريقة للتخلص من هذه الثقوب باستخدام تقنية معالجة الصور تسمى التمدد. استخدم هذا وستزول الثقوب.

الخطوة 4: البحث عن الملامح (و Centroids)

البحث عن المخططات (و Centroids)
البحث عن المخططات (و Centroids)

في هذه المرحلة ، لدينا الأشياء المميزة ، ولا توجد ثقوب بداخلها وجاهزون لما هو التالي: البحث عن الخطوط العريضة (والنقاط الوسطى). توجد موارد في OpenCV لاكتشاف المعالم تلقائيًا ، ولكن يجب اختيار التعدادات المكتشفة بحكمة (لاختيار الكائن الحقيقي أو الكائنات فقط). لذا ، فإن معايير اكتشاف الخطوط العريضة هي مساحة الكائن ، مقاسة بالبكسل². إذا كان الكفاف يحتوي على مساحة أعلى من الحد (تم تكوينه في البرنامج) ، لذلك يجب اعتباره كائنًا حقيقيًا ليتم حسابه. يعد اختيار حدود / معايير هذه المنطقة أمرًا مهمًا للغاية ، والاختيار السيئ هنا يعني عمليات عد خاطئة. يجب عليك تجربة بعض قيم حدود قيمة المنطقة والتحقق مما يناسب استخدامك بشكل أفضل. لا تقلق ، فهذه الحدود ليست صعبة العثور عليها / ضبطها. بمجرد اختيار جميع الكائنات الموجودة في الصورة ، فإن الخطوة التالية هي رسم retangle عليها (يجب أن يحتوي هذا المستطيل على كائن كامل مكتشف بداخله). ومركز هذا المستطيل…. النقطه الوسطى الكائن! ربما تفكر في "ما هي المشكلة الكبيرة في هذه النقطه الوسطى؟" ، أليس كذلك؟ ها هي إجابتك: بغض النظر عن حجم أو شكل الكائن ، فإن حركته هي نفسها النقطه الوسطى. بمعنى آخر: تمثل هذه النقطة البسيطة المسماة النقطه الوسطى كل حركة الكائن. إنه يجعل العد بسيطًا جدًا الآن ، أليس كذلك؟ انظر الصورة أدناه (الشكل 6) ، حيث يتم تمثيل النقطه الوسطى للكائن كنقطة سوداء.

الخطوة 5: حركة Centorid وعد الأشياء

النهاية الكبرى: قارن إحداثيات النقطه الوسطى للكائن بإحداثيات خطوط الدخول والخروج وتطبيق خوارزمية العد الموصوفة من قبل. وسيكون هناك عد للأجسام المتحركة!

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

موصى به: