كيف قابلت OpenCV أو بحثًا عن ColorChecker

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

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

جوهر المشروع


يوجد تطبيق SeedCounter مصمم لحساب وقياس حجم حبوب القمح من صورة من أجل تحرير المهندسين الزراعيين من العمل الممل والروتيني لحساب وتحليل الحبوب. كنت بحاجة لدراسة إمكانية تحديد لون الحبوب من صورة وتنفيذ ذلك في التطبيق بحيث يمكن تقسيم الحبوب إلى فئات ذات مغزى. يمكن أن تتوافق الفصول التي تم الحصول عليها ، على سبيل المثال ، مع محتوى المواد المفيدة للبشر.

مثال على الصورة قبل وبعد المعايرة:



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

لضبط الألوان ، استخدمنا لوحة مرجعية تسمى ColorChecker. يقع ColorChecker على نفس الإطار مثل الحبوب ، وتعرف ألوانه مقدمًا. يجب أن يختار التطبيق تحويل صورة بحيث تكون الألوان الموجودة في ColorChecker قريبة قدر الإمكان من الألوان المرجعية المعروفة.

بمعنى ، تم تقسيم المهمة إلى ثلاث مهام فرعية:

  • إيجاد ColorChecker في الصورة ،
  • حساب تحويل اللون وتطبيقه على الصورة ،
  • فصل الحبوب وفقا للألوان التي تم الحصول عليها.

تقدم العمل


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

لتسليط الضوء على النقاط المميزة في OpenCV ، استخدمنا العديد من الخوارزميات: كلاهما حاصل على براءة اختراع (SIFT / SURF) ومجاني (ORB / FAST). في البداية ، عملت الطريقة بشكل جيد مع الخيارات الحاصلة على براءة اختراع ، لكنها كانت بطيئة للغاية ، وهي أمر بالغ الأهمية عند استخدامها على جهاز محمول. كانوا غائبين أيضًا في الإصدار القياسي للمكتبة ، مما قد يسبب صعوبات عند النقل إلى Android. عند استخدام خيارات أسرع ، انخفضت جودة الاعتراف.

لزيادة جودة الاعتراف ، نظرت إلى أمثلة حيث كانت الخوارزمية خاطئة. في معظم الحالات ، وجدت الخوارزمية الموقع التقريبي لـ ColorChecker ، لكنها لم تحدد مساحتها بدقة. بسبب التحديد غير الدقيق لمنطقة النقطة التي تم أخذ الألوان منها للمعايرة ، لم تقع في المربعات الصحيحة للوحة ، على التوالي ، تمت استعادة الألوان بشكل غير صحيح. لإصلاح ذلك ، حاولت إعادة تشغيل الخوارزمية ، والحصول على تقريب أولي غير دقيق ، وأيضًا تحويل النقاط المستخدمة للمعايرة بشكل تجريبي ، في اتجاه المربعات المطلوبة. بعد ذلك ، زادت جودة الطريقة وأصبحت مقبولة ، حتى في الخوارزميات الضعيفة في البداية ، ولكن سريعة:
خوارزميةدقةوقت العمل
تصفح75٪2.8 ثانية
83 ٪ (+ 8 ٪)14 ثانية
فرزت88٪3.4s
96 ٪ (+ 8 ٪)15S
انتعش65٪0.5s
93٪ (+ 28٪)1.5s
ORB56٪0.4s
79 ٪ (+ 23 ٪)1 ثانية

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

شريحة درنات البطاطا ، من اليسار إلى اليمين: قبل المعايرة ، بعد المعايرة عن طريق الانحدار في الطلبات الأولى والثانية والثالثة.



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

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

ملخص


والنتيجة الرئيسية لهذا العمل هي خوارزمية بحث ColorChecker ، والتي تعمل بسرعة وبجودة جيدة ، ومعايرة الألوان بها. يمكن أن يكون مفيدا ليس فقط بالنسبة للحبوب. على سبيل المثال ، كان من الممكن تطبيقه في مهمة تحليل آذان القمح.

راجعت أيضًا إمكانية تصنيف الحبوب حسب اللون - لم أستطع الحصول على دقة عالية هنا ، حتى بمساعدة المعايرة.

لكن النتيجة الأكثر أهمية هي أنني اكتسبت خبرة في حل مشكلة لا توجد فيها خوارزمية جاهزة وضعت على الرفوف ، واكتشفت بنفسي مجالًا مثيرًا من رؤية الكمبيوتر ، وهو ما آمل أن أواجهه في المستقبل.

Source: https://habr.com/ru/post/ar437450/


All Articles