c++ - معالجة الصور: تحسين الخوارزمية للتعرف على "كوكا كولا"




algorithm image-processing (16)

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

بعض القيود على المشروع:

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

لذا يمكن أن ينتهي الأمر بأمور صعبة مثل هذه (والتي في هذه الحالة كانت خوارزمي فشلت تمامًا):

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

اللغة : حرر في C ++ باستخدام مكتبة OpenCV .

المعالجة المسبقة : من أجل المعالجة المسبقة للصورة ، أي تحويل الصورة إلى شكل أكثر خامة لإعطاء الخوارزمية ، استخدمت طريقتين:

  1. تغيير نطاق اللون من RGB إلى HSV والترشيح على أساس اللون الأحمر ، التشبع فوق عتبة معينة لتجنب الألوان الشبيهة بالبرتقالي ، وتصفية القيمة المنخفضة لتجنب الألوان الداكنة. كانت النتيجة النهائية هي صورة بالأبيض والأسود ثنائية ، حيث تمثل كل البكسلات البيضاء وحدات البكسل التي تطابق هذا الحد. من الواضح أنه لا يزال هناك الكثير من الفضلات في الصورة ، ولكن هذا يقلل من عدد الأبعاد التي يجب عليك العمل بها.
  2. تصفية للضوضاء باستخدام التصفية المتوسطة (مع أخذ قيمة البكسل المتوسطة لكل الجيران واستبدال البيكسل بهذه القيمة) لتقليل الضوضاء.
  3. استخدام مرشح اكتشاف الحافة Canny Edge للحصول على معالم جميع العناصر بعد خطوتين سابقتين.

الخوارزمية : الخوارزمية نفسها التي اخترتها لهذه المهمة مأخوذة من this الكتاب الرائع حول استخلاص الميزة ودعت تعميم هوغ المتحول (يختلف اختلافًا كبيرًا عن تحويل هوغ العادي). تقول بشكل أساسي بعض الأشياء:

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

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

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

النتائج : الآن ، بينما كان هذا النهج يعمل في الحالات الأساسية ، كان يعاني من نقص حاد في بعض المجالات:

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

هل يمكنك مساعدتي في تحسين خوارزمي المحدد ، باستخدام ميزات OpenCV حصريًا ، لحل المشكلات الأربعة المحددة المذكورة؟

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


أحب سؤالك ، بغض النظر عما إذا كان خارج الموضوع أم لا: P

مثيرة للاهتمام جانبا. لقد أكملت للتو موضوعًا في شهادتي حيث غطينا الروبوتات ورؤية الكمبيوتر. كان مشروعنا للفصل الدراسي مماثلاً بشكل لا يصدق للمشروع الذي تصفه.

كان علينا تطوير روبوت يستخدم جهاز Xbox Kinect للكشف عن زجاجات وعلب الكوك على أي اتجاه في مجموعة متنوعة من الإضاءة والظروف البيئية. ينطوي الحل الخاص بنا على استخدام مرشح تمرير النطاق على قناة Hue بالاشتراك مع تحويل الدائرة. كنا قادرين على تقييد البيئة قليلاً (يمكننا اختيار مكان وكيفية وضع الروبوت وجهاز الاستشعار Kinect) ، وإلا فإننا سنستخدم تحويلات SIFT أو SURF.

يمكنك أن تقرأ عن نهجنا على مشاركة المدونة الخاصة بي حول الموضوع :)


أنا أحب التحدي وأردت إعطاء إجابة ، مما يحل المشكلة ، على ما أعتقد.

  1. ميزات الاستخراج (نقاط المفاتيح ، واصفات مثل SIFT ، SURF) للشعار
  2. تطابق النقاط مع صورة نموذج للشعار (باستخدام Matcher مثل Brute Force)
  3. تقدير إحداثيات الجسم الجامد (PnP problem - SolvePnP)
  4. تقدير موضع الغطاء وفقًا للجسم الصلب
  5. قم بالإسقاط الخلفي وحساب موضع بيكسل الصورة (ROI) لغطاء الزجاجة (أفترض أن لديك المعلمات الجوهرية للكاميرا)
  6. تحقق مع طريقة ما إذا كان الغطاء هناك أم لا. إذا كان هناك ، فهذه هي الزجاجة

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

من فضلك ، إعطاء ردود الفعل إذا كنت مخطئا. شكر.


أنا متأخرة بضع سنوات في الإجابة على هذا السؤال. مع أحدث ما وصلت إليه شبكات CNN في السنوات الخمس الأخيرة ، لم أكن لأستخدم OpenCV للقيام بهذه المهمة الآن! ( أعلم أنك تريد على وجه التحديد ميزات OpenCv في السؤال ) أشعر بأن خوارزميات الكشف عن الكائنات مثل Fast-RCNNs و YOLO و SSD إلخ سوف تعالج هذه المشكلة بهامش كبير مقارنة بميزات OpenCV. إذا كنت سأتصدى لهذه المشكلة الآن (بعد 6 سنوات !!) سأستخدم بالتأكيد أسرع RCNN .


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

سوف أقترح التعلم العميق ، مع التعلم العميق يصبح هذا مشكلة تافهة.

يمكنك إعادة إنشاء نموذج v3 الاستهلالي على Tensorflow:

كيفية إعادة تدريب طبقة التأسيس النهائية لفئات جديدة .

في هذه الحالة ، سوف تقوم بتدريب شبكة عصبية تلافيفية لتصنيف الجسم كما يمكن للكوكا كولا أو لا.


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

أيضا يمكن أن أقترح ، وليس بالضرورة من أجل الدقة أو السرعة ولكن من أجل المتعة يمكنك استخدام شبكة عصبية مدربة على صورتك المقسمة إلى hue لتحديد شكل العلبة. هذه سريعة للغاية ويمكن أن تصل إلى 80٪ إلى 90٪ في أغلب الأحيان. سيكون التدريب قليلاً من عملية طويلة على الرغم من أنك ستحتاج إلى تحديد العلبة يدويًا في كل صورة.


الإجابات على هذه الصفحة تصل حقاً إلى:

  • "استخدم SIFT"

  • "استخدم Kinect"

إذا لم تكن مهتمًا بعلوم الكمبيوتر الفعلية للتعرف على الصور ، وكنت ترغب فقط في "استخدام" شيء ما (مثل SIFT أو Kinect) ،

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

اعتبارًا من 2017 ولسنوات حتى الآن ، أصبح التعرف على الصور متاحًا على نطاق واسع ومتسعًا .

لن تجلس بعد الآن و (تحاول) تحقيق التعرف على الصور من الصفر ، من أن تجلس وتبدأ في جمع وعرض الخرائط ، أو أنك ستبدأ في تحويل HTML من الصفر ، أو كتابة قاعدة بيانات SQL من البداية.

أنت فقط تستخدم tensorflow جوجل (وصلوا إلى نقطة بناء رقائق ، من أجل الخير ، لمعالجة tensorflow أسرع) ، Clarifai ، Bluemix أو أيا كان.

أصدرت AWS للتو فكرة جيدة للتعرف على الصور (2018).

على سبيل المثال لاستخدام أي من هذه الخدمات ، هناك بضعة أسطر من الكود ....

func isItACokeCan() {

    jds.headers = ["Accept-Language":"en"]
    let h = JustOf<HTTP> ...use your favorite http library

    let u: String =
        "https://gateway-a.watsonplatform.net/visual-recognition/api/v3/classify"
        + "?api_key= ... your API key ..."
        + "&version=2016-05-20"
        + "&classifier_ids= ... your Classifier name ..."

    h.post( u,
        files: ["x.jpeg": .data("x.jpeg", liveImageData!, "image/jpeg")]

    ) { r in
        if r.ok { DispatchQueue.main.async { self.processResult(r.json) } }
        else { DispatchQueue.main.async { self.doResults("network woe?") } }
    }
}

func processResult(_ rr: Any?){
    let json = JSON(rr!)
    print("\(json)")
}

سيعطيك ذلك حرفيًا ، أفضل ، التعرف على كوكاكولا على الأرض ، يتم تحقيقه حاليًا.

اعتبارًا من عام 2018 ، لم يعد بإمكانك الجلوس و "كتابة التعرف على الكوك بشكل أفضل من Bluemix" ، مما يمكنك "الجلوس وكتابة برنامج Go أفضل من AlphaGo".

إن أنظمة مثل Siri ، و Google Maps ، و BAAS ، ومساعي معالجة الصور الرئيسية - وبالطبع بحث نص google نفسه - هي لعبة تتغير.

لاحظ الاختلاف المذهل فقط منذ طرح هذا السؤال قبل ست سنوات.

بكل الوسائل إذا كنت في علم الكمبيوتر الفعلي للتعرف على الصور ، فابحث عنها.

لكن يبدو أن ضمان الجودة هذا أكثر من مراجعة للتكنولوجيا.

بقدر ما تقول الإجابات هنا "استخدم مكتبة SIFT" - لن تفعل ذلك حقًا. (مرة أخرى - لا يزيد عنك لسبب ما بجهد برنامج خادم الويب أو قاعدة بيانات SQL من الصفر!)

أنت فقط تصل إلى أنظمة التعرف على "BAAS" المعروفة ، في كل مكان ، وهو خط من التعليمات البرمجية.


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

قد يكون من المفيد استخراج العلب فقط ويمكن دمجها مع الكشف عن الكائنات الشفافة.


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

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

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

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

(لقد مر بضعة أعوام على أيام معالجة الصور الخاصة بي ، لذا احتفظت بهذا الاقتراح على مستوى عالٍ ومفهوم. أعتقد أنه قد يقترب قليلاً من كيفية عمل العين البشرية - أو على الأقل كيف يفعل عقلي!)


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

لذا ، لمعرفة العبوات والزجاجات ، ماذا عن مسح الزجاجات أولاً؟ إذا وجدت واحدًا ، اخرج الملصق قبل البحث عن العلب.

ليس من الصعب التنفيذ إذا كنت تقوم بالفعل بعلب. الجانب السلبي الحقيقي هو مضاعفة وقت المعالجة الخاص بك. (ولكن بالتفكير في تطبيقات العالم الواقعي ، ستنتهي الرغبة في عمل الزجاجات على أي حال ؛-)


هممم ، أعتقد أنني في الواقع على شيء (هذا هو مثل السؤال الأكثر إثارة للاهتمام على الإطلاق - لذلك سيكون من العار عدم الاستمرار في محاولة العثور على الإجابة "المثالية" ، على الرغم من أنه تم العثور على واحد مقبول) .. .

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

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

هنا ، ما هو موجود أعلاه وأسفل الشعار مظلمة تمامًا ومتسقة في اللون. سهل نسبيا في هذا الصدد.

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

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

(كان آخرها أفضل ما يمكن أن أجده من زجاجة كوكاكولا كبيرة فارغة - ومن المثير أن القبعة والحلقة صفراء ، مما يدل على أنه لا ينبغي الاعتماد على احمرار الغطاء)

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

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

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

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

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

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

تصحيح

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


هناك طريقة بديلة تتمثل في استخلاص الخصائص (النقاط الأساسية) باستخدام تحويل الميزان غير الثابت (SIFT) أو Speeded Up Strong Features (SURF).

يتم تنفيذه في OpenCV 2.3.1.

يمكنك العثور على مثال رمز جيد باستخدام ميزات في Features2D + Homography للعثور على كائن معروف

كلتا الخوارزميات غير ثابتة على التدوير والدوران. نظرًا لأنها تعمل مع الميزات ، يمكنك أيضًا التعامل مع occlusion (طالما أن نقاط المفاتيح كافية للعيان).

مصدر الصورة: مثال تعليمي

تستغرق المعالجة بضع مئات من المليارات من أجل SIFT ، SURF أسرع قليلاً ، ولكنها غير مناسبة للتطبيقات في الوقت الحقيقي. يستخدم ORB FAST وهو أضعف فيما يتعلق بثبات الدوران.

الأوراق الأصلية


هناك مجموعة من واصفات الألوان المستخدمة للتعرف على الكائنات ، وتقارن الورقة أدناه بالكثير منها. فهي قوية بشكل خاص عند دمجها مع SIFT أو SURF. SURF أو SIFT وحدها ليست مفيدة جدا في صورة كوكاكولا يمكن لأنهم لا يعرفون الكثير من نقاط الاهتمام ، تحتاج إلى معلومات اللون للمساعدة. أنا استخدم BIC (الحدود الداخلية / Pixel Classics الداخلي) مع SURF في مشروع وعمل عظيم للتعرف على الأشياء.

واصفات اللون لاسترجاع صورة الويب: دراسة مقارنة


تبحث في الشكل

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

النظر في الضوء

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

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


تعلم عميق

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

إذا لم تقم بتجميع مجموعة بيانات كبيرة جدًا ، فعليك تنفيذ خدعة استخدام ميزات التعلم العميق لمجموعات البيانات الصغيرة. من الناحية المثالية باستخدام مزيج من آلات Vector الدعم (SVM) مع الشبكات العصبية العميقة.

بمجرد تغذية الصور إلى نموذج تعلم عميق مدرّب سابقًا (على سبيل المثال GoogleNet) ، بدلاً من استخدام طبقة القرار (النهائية) للشبكة العصبية للقيام بالتصنيفات ، استخدم بيانات (طبقات) الطبقة السابقة كميزات لتدريب مصنفك.

OpenCV و Google Net: http://docs.opencv.org/trunk/d5/de7/tutorial_dnn_googlenet.html

OpenCV و SVM: http://docs.opencv.org/2.4/doc/tutorials/ml/introduction_to_svm/introduction_to_svm.html


Maybe too many years late, but nevertheless a theory to try.

The ratio of bounding rectangle of red logo region to the overall dimension of the bottle/can is different. In the case of Can, should be 1:1, whereas will be different in that of bottle (with or without cap). This should make it easy to distinguish between the two.

Update: The horizontal curvature of the logo region will be different between the Can and Bottle due their respective size difference. This could be specifically useful if your robot needs to pick up can/bottle, and you decide the grip accordingly.


The first things I would look for are color - like RED , when doing Red eye detection in an image - there is a certain color range to detect , some characteristics about it considering the surrounding area and such as distance apart from the other eye if it is indeed visible in the image.

1: First characteristic is color and Red is very dominant. After detecting the Coca Cola Red there are several items of interest 1A: How big is this red area (is it of sufficient quantity to make a determination of a true can or not - 10 pixels is probably not enough), 1B: Does it contain the color of the Label - "Coca-Cola" or wave. 1B1: Is there enough to consider a high probability that it is a label.

Item 1 is kind of a short cut - pre-process if that doe snot exist in the image - move on.

So if that is the case I can then utilize that segment of my image and start looking more zoom out of the area in question a little bit - basically look at the surrounding region / edges...

2: Given the above image area ID'd in 1 - verify the surrounding points [edges] of the item in question. A: Is there what appears to be a can top or bottom - silver? B: A bottle might appear transparent , but so might a glass table - so is there a glass table/shelf or a transparent area - if so there are multiple possible out comes. A Bottle MIGHT have a red cap, it might not, but it should have either the shape of the bottle top / thread screws, or a cap. C: Even if this fails A and B it still can be a can - partial.. This is more complex when it is partial because a partial bottle / partial can might look the same , so some more processing of measurement of the Red region edge to edge.. small bottle might be similar in size ..

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







opencv