c++ - छवि प्रसंस्करण:'कोका-कोला कैन' पहचान के लिए एल्गोरिदम सुधार




algorithm image-processing opencv (21)

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.

पिछले कुछ वर्षों में मैंने जो सबसे रोचक परियोजनाओं पर काम किया है, उनमें से एक छवि प्रसंस्करण के बारे में एक परियोजना थी। लक्ष्य कोका-कोला 'डिब्बे' को पहचानने में सक्षम होने के लिए एक प्रणाली विकसित करना था (ध्यान दें कि मैं 'डिब्बे' शब्द पर जोर दे रहा हूं, आप देखेंगे कि एक मिनट में क्यों)। आप नीचे एक नमूना देख सकते हैं, जिसमें स्केल और रोटेशन के साथ हरे आयत में पहचाना जा सकता है।

परियोजना पर कुछ बाधाएं:

  • पृष्ठभूमि बहुत शोर हो सकती है।
  • किसी भी पैमाने या घूर्णन या यहां तक ​​कि अभिविन्यास (उचित सीमाओं के भीतर) हो सकता है।
  • छवि में कुछ हद तक अस्पष्टता हो सकती है (समोच्च पूरी तरह से सीधे नहीं हो सकता है)।
  • छवि में कोका-कोला की बोतलें हो सकती हैं, और एल्गोरिदम केवल कैन का पता लगाना चाहिए!
  • छवि की चमक बहुत भिन्न हो सकती है (इसलिए आप रंग पहचान पर "बहुत अधिक" भरोसा नहीं कर सकते हैं)।
  • इसे आंशिक रूप से पक्षों या मध्य में और शायद आंशिक रूप से एक बोतल के पीछे छुपाया जा सकता है।
  • छवि में कोई भी नहीं हो सकता है, इस मामले में आपको कुछ भी नहीं मिला और ऐसा कहने वाला एक संदेश लिखना पड़ा।

तो आप इस तरह की मुश्किल चीजों के साथ खत्म हो सकते हैं (जो इस मामले में मेरा एल्गोरिदम पूरी तरह असफल रहा):

मैंने कुछ समय पहले इस परियोजना को किया था, और इसमें बहुत मज़ा आया था, और मेरे पास एक सभ्य कार्यान्वयन था। मेरे कार्यान्वयन के बारे में कुछ विवरण यहां दिए गए हैं:

भाषा : ओपनसीवी लाइब्रेरी का उपयोग कर सी ++ में किया गया।

प्री-प्रोसेसिंग : छवि प्री-प्रोसेसिंग के लिए, यानी एल्गोरिदम को देने के लिए छवि को अधिक कच्चे रूप में परिवर्तित करना, मैंने 2 विधियों का उपयोग किया:

  1. आरजीबी से HSV रंग डोमेन बदलना और "लाल" रंग के आधार पर फ़िल्टरिंग, नारंगी जैसी रंगों से बचने के लिए एक निश्चित दहलीज के ऊपर संतृप्ति, और अंधेरे टोन से बचने के लिए कम मूल्य की फ़िल्टरिंग। अंतिम परिणाम एक द्विआधारी काला और सफेद छवि थी, जहां सभी सफेद पिक्सेल इस सीमा से मेल खाने वाले पिक्सल का प्रतिनिधित्व करेंगे। जाहिर है कि छवि में अभी भी बहुत सारे बकवास हैं, लेकिन इससे आपके द्वारा काम करने के लिए आयामों की संख्या कम हो जाती है।
  2. शोर को कम करने के लिए औसत फ़िल्टरिंग का उपयोग करके शोर फ़िल्टरिंग (सभी पड़ोसियों के औसत पिक्सेल मूल्य को लेना और इस मान से पिक्सेल को प्रतिस्थापित करना)।
  3. 2 उदाहरण चरणों के बाद सभी वस्तुओं के रूपरेखा प्राप्त करने के लिए कैनी एज डिटेक्शन फ़िल्टर का उपयोग करना।

एल्गोरिदम : इस कार्य के लिए मैंने जो एल्गोरिदम स्वयं चुना है उसे फीचर निष्कर्षण पर this भयानक पुस्तक से लिया गया था और सामान्यीकृत हफ़ ट्रांसफॉर्म (नियमित रूप से हफ़ ट्रांसफॉर्म से काफी अलग) कहा जाता था। यह मूल रूप से कुछ चीजें कहता है:

  • आप अपने विश्लेषणात्मक समीकरण (जो यहां मामला है) को जानने के बिना अंतरिक्ष में किसी ऑब्जेक्ट का वर्णन कर सकते हैं।
  • यह स्केलिंग और रोटेशन जैसे छवि विकृतियों के लिए प्रतिरोधी है, क्योंकि यह मूल रूप से स्केल फैक्टर और रोटेशन कारक के प्रत्येक संयोजन के लिए आपकी छवि का परीक्षण करेगा।
  • यह एक बेस मॉडल (एक टेम्पलेट) का उपयोग करता है जो एल्गोरिदम "सीख" लेगा।
  • समोच्च छवि में शेष प्रत्येक पिक्सेल एक और पिक्सेल के लिए वोट देगा जो आपके ऑब्जेक्ट के केंद्र (गुरुत्वाकर्षण के मामले में) माना जाएगा, जो मॉडल से सीखा है।

अंत में, आप वोटों के गर्मी के नक्शे के साथ समाप्त होते हैं, उदाहरण के लिए यहां कर के समोच्च के सभी पिक्सल अपने गुरुत्वाकर्षण केंद्र के लिए मतदान करेंगे, इसलिए आपके पास उसी पिक्सेल में बहुत से वोट होंगे केंद्र, और नीचे के रूप में गर्मी मानचित्र में एक चोटी देखेंगे:

एक बार आपके पास यह हो जाने के बाद, एक साधारण थ्रेसहोल्ड-आधारित ह्युरिस्टिक आपको केंद्र पिक्सेल का स्थान दे सकता है, जिससे आप स्केल और रोटेशन प्राप्त कर सकते हैं और उसके बाद अपने छोटे आयत को साजिश कर सकते हैं (अंतिम पैमाने और रोटेशन कारक स्पष्ट रूप से आपके सापेक्ष होंगे मूल टेम्पलेट)। कम से कम सिद्धांत में ...

परिणाम : अब, जब इस दृष्टिकोण ने बुनियादी मामलों में काम किया, तो कुछ क्षेत्रों में इसकी कमी आई थी:

  • यह बेहद धीमा है ! मैं इस पर जोर नहीं दे रहा हूँ। 30 परीक्षण छवियों को संसाधित करने के लिए लगभग एक पूर्ण दिन की आवश्यकता थी, जाहिर है क्योंकि मेरे पास घूर्णन और अनुवाद के लिए बहुत अधिक स्केलिंग कारक था, क्योंकि कुछ डिब्बे बहुत छोटे थे।
  • जब बोतलें छवि में थीं तो यह पूरी तरह से खो गई थी, और किसी कारण से लगभग हमेशा की बजाय बोतल पाई गई थी (शायद क्योंकि बोतलें बड़ी थीं, इस प्रकार अधिक पिक्सल थे, इस प्रकार अधिक वोट)
  • अस्पष्ट छवियां भी अच्छी नहीं थीं, क्योंकि वोट केंद्र के चारों ओर यादृच्छिक स्थानों पर पिक्सेल में समाप्त हुए, इस प्रकार एक बहुत शोर गर्मी के नक्शे के साथ समाप्त हो गया।
  • अनुवाद और रोटेशन में इन-वेरिएंस हासिल किया गया था, लेकिन अभिविन्यास में नहीं, जिसका अर्थ है कि एक ऐसा कैमरा जो सीधे कैमरे के उद्देश्य का सामना नहीं कर रहा था, उसे पहचाना नहीं गया था।

क्या आप उल्लेख किए गए चार विशिष्ट मुद्दों को हल करने के लिए विशेष रूप से OpenCV सुविधाओं का उपयोग करके, मेरे विशिष्ट एल्गोरिदम को बेहतर बनाने में मेरी सहायता कर सकते हैं?

मुझे उम्मीद है कि कुछ लोग इसके बारे में कुछ भी सीखेंगे, आखिरकार मुझे लगता है कि न केवल उन लोगों को जो प्रश्न पूछते हैं उन्हें सीखना चाहिए। :)


मैं लाल imclose पता imclose : आरजीबी -> एचएसवी, फिल्टर लाल -> बाइनरी छवि, close (फिर imclose , जिसे matlab में imclose रूप में जाना जाता है)

फिर आयताकारों को सबसे बड़े से छोटे से देखें। आयताकार जिनके पास एक ज्ञात स्थिति / पैमाने में छोटे आयतों को हटाया जा सकता है, दोनों को हटाया जा सकता है (माना जाता है कि बोतल के अनुपात स्थिर हैं, छोटे आयत एक बोतल टोपी होगी)।

यह आपको लाल आयताकारों के साथ छोड़ देगा, फिर आपको किसी भी तरह से यह पता लगाने के लिए लोगो का पता लगाने की आवश्यकता होगी कि वे लाल आयत या कोक कर सकते हैं या नहीं। ओसीआर की तरह, लेकिन एक ज्ञात लोगो के साथ?


यह एक बहुत ही बेवकूफ विचार हो सकता है (या बिल्कुल काम नहीं कर सकता), लेकिन सभी कोक के डिब्बे के आयाम तय किए गए हैं। तो हो सकता है कि एक ही छवि में एक कैन और बोतल दोनों हो, तो आप उन्हें आकार के विचारों से अलग बता सकते हैं (बोतलें बड़ी होने वाली हैं)। अब लापता गहराई (यानी 2 डी मैपिंग के लिए 3 डी मैपिंग) की वजह से यह संभव है कि एक बोतल कम हो सकती है और इसमें कोई अंतर नहीं है। आप stereo-imaging का उपयोग करके कुछ गहराई से जानकारी पुनर्प्राप्त कर सकते हैं और फिर मूल आकार को पुनर्प्राप्त कर सकते हैं।


इन सभी अच्छे समाधानों के विकल्प के रूप में, आप अपने स्वयं के वर्गीकृत को प्रशिक्षित कर सकते हैं और अपने आवेदन को त्रुटियों पर मजबूत बना सकते हैं। उदाहरण के तौर पर, आप हायर ट्रेनिंग का उपयोग कर सकते हैं, जो आपके लक्ष्य की सकारात्मक और नकारात्मक छवियों की एक अच्छी संख्या प्रदान करता है।

यह केवल डिब्बे निकालने के लिए उपयोगी हो सकता है और पारदर्शी वस्तुओं के पता लगाने के साथ जोड़ा जा सकता है।


एक वैकल्पिक दृष्टिकोण स्केल-इनवेरिएंट फीचर ट्रांसफॉर्म (एसआईएफटी) या स्पीड अप रोबस्ट फीचर्स ( एसयूआरएफ ) का उपयोग करके फीचर्स (कीपॉइंट्स) निकालने के लिए होगा।

इसे OpenCV 2.3.1 में लागू किया गया है।

ज्ञात ऑब्जेक्ट खोजने के लिए आप फीचर्स 2 डी + होमोग्राफी में सुविधाओं का उपयोग करके एक अच्छा कोड उदाहरण पा सकते हैं

दोनों एल्गोरिदम स्केलिंग और रोटेशन के लिए परिवर्तनीय हैं। चूंकि वे सुविधाओं के साथ काम करते हैं, इसलिए आप occlusion को भी संभाल सकते हैं (जब तक पर्याप्त कीपॉइंट्स दिखाई दे)।

छवि स्रोत: ट्यूटोरियल उदाहरण

प्रसंस्करण एसआईएफटी के लिए कुछ सौ एमएस लेता है, एसयूआरएफ थोड़ा तेज है, लेकिन यह वास्तविक समय के अनुप्रयोगों के लिए उपयुक्त नहीं है। ओआरबी तेजी से उपयोग करता है जो रोटेशन इनवेरिएंस के बारे में कमजोर है।

मूल पत्र


इस सवाल का जवाब देने में कुछ साल देर हो चुकी है। पिछले 5 सालों में कला की स्थिति सीएनएन द्वारा अपनी सीमा तक पहुंच गई है, इसलिए मैं इस कार्य को करने के लिए ओपनसीवी का उपयोग नहीं करूंगा! ( मुझे पता है कि आप विशेष रूप से प्रश्न में ओपनसीवी फीचर्स चाहते थे ) मुझे लगता है कि ऑब्जेक्ट डिटेक्शन एल्गोरिदम जैसे फास्टर-आरसीएनएन, योलो, एसएसडी इत्यादि ओपनसीवी फीचर्स की तुलना में एक महत्वपूर्ण मार्जिन के साथ इस समस्या को हल करेंगे। अगर मैं अब इस समस्या से निपटना चाहता हूं (6 साल बाद !!) मैं निश्चित रूप से फास्टर-आरसीएनएन का उपयोग करता हूं


हम्म, मुझे सच में लगता है कि मैं कुछ पर हूं (यह अब तक का सबसे दिलचस्प सवाल है - इसलिए यह एक शर्म की बात होगी कि "सही" जवाब खोजने की कोशिश जारी रखना जारी रखें, भले ही एक स्वीकार्य व्यक्ति पाया गया हो) .. ।

एक बार लोगो खोजने के बाद, आपकी परेशानियां आधा हो जाती हैं। फिर आपको केवल लोगो के आसपास के अंतर के बारे में पता लगाना होगा। इसके अतिरिक्त, हम जितना संभव हो उतना अतिरिक्त करना चाहते हैं। मुझे लगता है कि यह वास्तव में यह आसान हिस्सा है ...

लोगो के आसपास क्या है ? एक के लिए, हम धातु देख सकते हैं, जो प्रकाश के प्रभाव के बावजूद, अपने मूल रंग में जो कुछ भी नहीं बदलता है। जब तक हम लेबल के कोण को जानते हैं, हम बता सकते हैं कि इसके ऊपर क्या है, इसलिए हम इनके बीच अंतर देख रहे हैं:

यहां, लोगो के ऊपर और नीचे क्या है रंग में लगातार, पूरी तरह से अंधेरा है। उस सम्मान में अपेक्षाकृत आसान है।

यहां, ऊपर और नीचे क्या प्रकाश है, लेकिन अभी भी रंग में सुसंगत है। यह सब चांदी है, और सभी चांदी के धातु वास्तव में बहुत दुर्लभ लगता है, साथ ही चांदी के रंग सामान्य रूप से लगता है। इसके अतिरिक्त, यह एक पतली नींद में है और लाल रंग के करीब पर्याप्त है जिसे पहले से ही पहचाना जा चुका है ताकि आप इसकी पूरी लंबाई के लिए अपने आकार का पता लगा सकें, जिसे कैन की धातु की अंगूठी माना जा सकता है। असल में, आपको केवल उसमें से एक छोटा सा अंश चाहिए, यह बताने के लिए कि यह इसका हिस्सा है, लेकिन आपको अभी भी एक संतुलन खोजने की ज़रूरत है जो सुनिश्चित करता है कि यह सिर्फ इसके पीछे धातु के साथ एक खाली बोतल न हो।

और अंत में, मुश्किल एक। लेकिन इतना मुश्किल नहीं है, एक बार जब हम केवल लाल रैपर से ऊपर (और नीचे) देख सकते हैं। इसका पारदर्शी, जिसका अर्थ है कि यह इसके पीछे जो कुछ भी दिखाएगा। यह अच्छा है, क्योंकि इसके पीछे की चीजें रंग के अनुरूप परिपत्र धातु के रूप में रंग में सुसंगत होने की संभावना नहीं है। इसके पीछे कई अलग-अलग चीजें हो सकती हैं, जो हमें बताएंगी कि यह एक खाली (या स्पष्ट तरल से भरा हुआ) बोतल है, या एक सतत रंग है, जिसका अर्थ यह हो सकता है कि यह तरल से भरा हुआ है या बोतल बस के सामने है गहरे रंग। हम शीर्ष और नीचे के सबसे नज़दीक के साथ काम कर रहे हैं, और सही जगहों पर सही रंगों की संभावना अपेक्षाकृत पतली है। हम जानते हैं कि यह एक बोतल है, क्योंकि इसे उस महत्वपूर्ण दृश्य तत्व को नहीं मिला है, जो कि बोतल के पीछे क्या हो सकता है तुलनात्मक रूप से अपेक्षाकृत सरल है।

(वह आखिरी वाला सबसे अच्छा था जो मुझे एक खाली बड़ी कोका कोला की बोतल मिल सकता था - रोचक रूप से टोपी और अंगूठी पीले रंग की होती है, यह दर्शाती है कि टोपी की लाली पर शायद भरोसा नहीं किया जाना चाहिए)

दुर्लभ परिस्थिति में कि चांदी की एक समान छाया बोतल के पीछे है, प्लास्टिक के अमूर्त होने के बावजूद, या बोतल चांदी के तरल की एक ही छाया से भरी हुई है, हम उस पर वापस आ सकते हैं जिसे हम मोटे तौर पर अनुमान लगा सकते हैं चांदी का आकार - जैसा कि मैंने उल्लेख किया है, परिपत्र है और कैन के आकार का पालन करता है। लेकिन हालांकि मुझे छवि प्रसंस्करण में कोई निश्चित ज्ञान नहीं है, यह धीमा लगता है। बेहतर अभी तक, यह सुनिश्चित करने के लिए लोगो के किनारों की जांच करने के लिए इसे क्यों न करें, यह सुनिश्चित करने के लिए कि वहां एक ही चांदी के रंग का कुछ भी नहीं है? आह, लेकिन क्या होगा अगर चांदी के पीछे एक ही छाया हो? फिर, हमें वास्तव में आकार के ऊपर और नीचे देखकर आकारों पर अधिक ध्यान देना होगा।

यह सब कितना दोषपूर्ण है, इस पर निर्भर करता है कि यह बहुत धीमा हो सकता है, लेकिन मुझे लगता है कि मेरी मूल अवधारणा सबसे आसान और निकटतम चीजों को पहले देखना है। अन्य तत्वों के आकार को काम करने के प्रयास में जाने से पहले पहले से मिलान किए गए आकार (जो कि वैसे भी इसका सबसे छोटा हिस्सा लगता है) के आस-पास रंग भिन्नता से जाएं। इसे सूचीबद्ध करने के लिए, यह जाता है:

  • मुख्य आकर्षण (लाल लोगो पृष्ठभूमि, और संभावित रूप से लोगो को उन्मुखीकरण के लिए खोजें, हालांकि यदि बंद हो गया है, तो आपको अकेले लाल पर ध्यान केंद्रित करने की आवश्यकता है)
  • आकार और अभिविन्यास को सत्यापित करें, फिर भी बहुत विशिष्ट लाली के माध्यम से
  • आकार के चारों ओर रंगों की जांच करें (क्योंकि यह तेज़ और दर्द रहित है)
  • अंत में, यदि आवश्यक हो, तो सही गोल के लिए मुख्य आकर्षण के आस-पास उन रंगों के आकार को सत्यापित करें।

यदि आप ऐसा नहीं कर सकते हैं, तो संभवतया इसका मतलब है कि कैन के ऊपर और नीचे कवर किया जा सकता है, और एकमात्र संभावित चीजें जो मनुष्य संभवतः कर और बोतल के बीच भेद करने के लिए उपयोग कर सकती हैं, वह प्रलोभन और प्रतिबिंब है कर सकते हैं, जो प्रक्रिया के लिए एक कठिन लड़ाई होगी। हालांकि, आगे भी जाने के लिए, आप अन्य उत्तरों में वर्णित अर्द्ध पारदर्शी स्कैनिंग तकनीकों का उपयोग करके, अधिक बोतल जैसी विशेषताओं की जांच के लिए कर / बोतल के कोण का अनुसरण कर सकते हैं।

दिलचस्प अतिरिक्त दुःस्वप्नों में आसानी से बोतल के पीछे इतनी दूरी पर बैठना शामिल हो सकता है कि इसकी धातु लेबल के ऊपर और नीचे दिखाने के लिए होती है, जो तब तक असफल हो जाती है जब तक आप लाल की पूरी लंबाई के साथ स्कैनिंग कर रहे हों लेबल - जो वास्तव में एक समस्या का अधिक कारण है क्योंकि आप एक ऐसा स्थान नहीं ढूंढ रहे हैं जहां आप हो सकते हैं, इस पर विचार करने के विपरीत कि आप वास्तव में एक बोतल का पता लगा रहे हैं, जिसमें दुर्घटना हो सकती है। ग्लास आधा खाली है, उस मामले में!

एक अस्वीकरण के रूप में, मुझे इस सवाल के बाहर छवि प्रसंस्करण के बारे में कभी भी कोई अनुभव नहीं हुआ है, लेकिन यह इतना दिलचस्प है कि मुझे इसके बारे में बहुत गहराई से सोचने लगे, और अन्य सभी उत्तरों को पढ़ने के बाद, मैं इसे संभवतः मानता हूं इसे करने का सबसे आसान और सबसे प्रभावी तरीका। निजी तौर पर, मुझे खुशी है कि मुझे वास्तव में प्रोग्रामिंग के बारे में सोचना नहीं है!

संपादित करें

इसके अतिरिक्त, एमएस पेंट में मैंने इस चित्र को देखा ... यह बिल्कुल भयानक और काफी अपूर्ण है, लेकिन अकेले आकार और रंगों के आधार पर, आप अनुमान लगा सकते हैं कि यह संभवतः क्या हो रहा है। संक्षेप में, ये केवल एकमात्र चीजें हैं जिनके लिए स्कैनिंग को परेशान करने की आवश्यकता है। जब आप उस बहुत ही विशिष्ट आकार और रंगों के संयोजन को इतने करीब देखते हैं, तो यह संभवतः और क्या हो सकता है? जिस बिट को मैंने पेंट नहीं किया था, सफेद पृष्ठभूमि को "कुछ भी असंगत" माना जाना चाहिए। यदि इसकी पारदर्शी पृष्ठभूमि थी, तो यह लगभग किसी भी अन्य छवि पर जा सकती है और आप इसे अभी भी देख सकते हैं।


मनुष्यों के लिए दूसरी बोतल में एक बोतल और एक कैन के बीच अंतर करने के लिए भी मुश्किल नहीं है (बशर्ते बोतल का पारदर्शी क्षेत्र छिपा हुआ हो)?

वे लगभग एक ही छोटे क्षेत्र को छोड़कर लगभग समान हैं (यानी, छत के शीर्ष पर चौड़ाई थोड़ी छोटी है जबकि बोतल का आवरण पूरे चौड़ाई में है, लेकिन मामूली परिवर्तन सही है?)।

पहली बात जो मेरे दिमाग में आई थी वह बोतल के लाल शीर्ष की जांच करना था। लेकिन यह अभी भी एक समस्या है, यदि बोतल के लिए कोई शीर्ष नहीं है, या यदि यह आंशिक रूप से छिपा हुआ है (ऊपर वर्णित है)।

दूसरी बात मैंने सोचा कि बोतल की पारदर्शिता के बारे में था। ओपनसीवी में एक छवि में पारदर्शी वस्तुओं को खोजने पर कुछ काम हैं। नीचे दिए गए लिंक देखें।

यह देखने के लिए विशेष रूप से देखें कि वे ग्लास का कितना सटीक पता लगाते हैं:

उनके प्रत्यारोपण परिणाम देखें:

वे कहते हैं कि यह के "A Geodesic Active Contour Framework for Finding Glass" by K. McHenry and J. Ponce, CVPR 2006. पेपर का कार्यान्वयन है। (कागज डाउनलोड करें)

यह आपके मामले में थोड़ा सा सहायक हो सकता है, लेकिन बोतल भरने पर समस्या फिर से उत्पन्न होती है।

तो मैं यहां सोचता हूं, आप पहले बोतलों के पारदर्शी निकाय की खोज कर सकते हैं या लाल क्षेत्र के लिए बाद में दो पारदर्शी वस्तुओं से जुड़े हुए हैं जो स्पष्ट रूप से बोतल है। (आदर्श रूप से काम करते समय, एक छवि निम्नानुसार है।)

अब आप पीले क्षेत्र को हटा सकते हैं, यानी, बोतल का लेबल और कैन ढूंढने के लिए अपना एल्गोरिदम चला सकते हैं।

वैसे भी, इस समाधान में अन्य समाधानों की तरह विभिन्न समस्याएं भी हैं।

  1. यह केवल तभी काम करता है जब आपकी बोतल खाली हो। उस स्थिति में, आपको दो काले रंगों (यदि कोका कोला तरल काला है) के बीच लाल क्षेत्र की खोज करनी होगी।
  2. एक और समस्या अगर पारदर्शी हिस्सा कवर किया गया है।

लेकिन वैसे भी, यदि चित्रों में उपर्युक्त समस्याओं में से कोई भी नहीं है, तो यह एक बेहतर तरीका प्रतीत होता है।


ध्यान लगा के पढ़ना या सीखना

कोला डिब्बे वाली कम से कम कुछ सौ छवियों को इकट्ठा करें, सकारात्मक वर्गों के रूप में उनके चारों ओर बाध्यकारी बॉक्स को एनोटेट करें, कोला की बोतलें और अन्य कोला उत्पादों को नकारात्मक वर्गों के साथ-साथ यादृच्छिक वस्तुओं को लेबल करें।

जब तक आप एक बहुत बड़ा डेटासेट एकत्र नहीं करते हैं, तो छोटे डेटासेट के लिए गहरी सीखने की सुविधाओं का उपयोग करने की चाल करें। आदर्श रूप से गहरे तंत्रिका जाल के साथ समर्थन वेक्टर मशीनों (एसवीएम) के संयोजन का उपयोग कर।

एक बार जब आप पहले से प्रशिक्षित गहरी सीखने के मॉडल (उदाहरण के लिए GoogleNet) पर छवियों को खिलाते हैं, तो वर्गीकरण करने के लिए तंत्रिका नेटवर्क के निर्णय (अंतिम) परत का उपयोग करने के बजाय, अपने क्लासिफायर को प्रशिक्षित करने के लिए सुविधाओं के रूप में पिछले परत (डेटा) डेटा का उपयोग करें।

ओपनसीवी और Google नेट: http://docs.opencv.org/trunk/d5/de7/tutorial_dnn_googlenet.html

ओपनसीवी और एसवीएम: http://docs.opencv.org/2.4/doc/tutorials/ml/introduction_to_svm/introduction_to_svm.html


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 पर तरंग के उस बिंदु पर कौन से अक्षरों का अस्तित्व होना चाहिए।


मजेदार समस्या: जब मैंने आपकी बोतल छवि पर देखा तो मैंने सोचा कि यह भी एक कर सकता है। लेकिन, एक इंसान के रूप में, मैंने अंतर को बताने के लिए क्या किया है कि मैंने देखा कि यह भी एक बोतल थी ...

तो, डिब्बे और बोतलों को अलग करने के लिए, बोतलों के लिए बस स्कैनिंग के बारे में कैसे? यदि आपको कोई मिलता है, तो डिब्बे की तलाश करने से पहले लेबल को मुखौटा करें।

यदि आप पहले से ही डिब्बे कर रहे हैं तो इसे लागू करने में बहुत मुश्किल नहीं है। असली नकारात्मकता यह आपके प्रसंस्करण समय को दोगुना कर देती है। (लेकिन असली दुनिया के अनुप्रयोगों के लिए आगे सोचते हुए, आप वैसे भी बोतलों को करना चाहते हैं ;-)


वस्तुओं को पहचानने के लिए उपयोग किए जाने वाले रंग वर्णक का एक गुच्छा है, नीचे दिया गया पेपर उनमें से बहुत से तुलना करता है। एसआईएफटी या एसयूआरएफ के साथ संयुक्त होने पर वे विशेष रूप से शक्तिशाली होते हैं। अकेले एसयूआरएफ या एसआईएफटी कोका कोला में बहुत उपयोगी नहीं हैं क्योंकि वे बहुत रुचि वाले बिंदुओं को नहीं पहचानते हैं, आपको मदद करने के लिए रंग की जानकारी चाहिए। मैं एक परियोजना में एसयूआरएफ के साथ बीआईसी (सीमा / आंतरिक पिक्सेल क्लासीफाइशन) का उपयोग करता हूं और यह वस्तुओं को पहचानने के लिए बहुत अच्छा काम करता है।

वेब छवि पुनर्प्राप्ति के लिए रंग वर्णनकर्ता: एक तुलनात्मक अध्ययन


आपको एक कार्यक्रम की आवश्यकता है जो अनुभव से व्यवस्थित रूप से वर्गीकरण सटीकता को सीखता और सुधारता है।

मैं गहरी शिक्षा के साथ गहरी शिक्षा का सुझाव दूंगा, यह एक छोटी सी समस्या बन जाती है।

आप टेन्सफोर्लो पर प्रारंभ v3 मॉडल को पुनः प्रशिक्षित कर सकते हैं:

नई श्रेणियों के लिए प्रारंभ की अंतिम परत को कैसे रोकें

इस मामले में, आप एक ऑब्जेक्ट को वर्गीकृत करने के लिए एक संक्रामक तंत्रिका नेटवर्क को प्रशिक्षण देंगे क्योंकि या तो कोका-कोला कर सकता है या नहीं।


चीजों को गति देने के लिए, मैं इस तथ्य का लाभ उठाउंगा कि आपको मनमाने ढंग से छवि / वस्तु खोजने के लिए नहीं कहा जाता है, लेकिन विशेष रूप से कोका-कोला लोगो के साथ। यह महत्वपूर्ण है क्योंकि यह लोगो बहुत विशिष्ट है, और इसमें आवृत्ति डोमेन में विशेष रूप से आरजीबी के लाल चैनल में एक विशेषता, स्केल-इनवेरिएंट हस्ताक्षर होना चाहिए। ऐसा कहने के लिए, एक क्षैतिज स्कैन लाइन (क्षैतिज रूप से गठबंधन लोगो पर प्रशिक्षित) द्वारा सामना किए जाने वाले लाल-से-सफेद-से-लाल रंग का वैकल्पिक पैटर्न एक विशिष्ट "ताल" होगा क्योंकि यह लोगो के केंद्रीय धुरी से गुज़रता है। यह लय विभिन्न पैमाने और उन्मुखताओं पर "गति तेज" या "धीमा" होगा, लेकिन आनुपातिक रूप से समकक्ष रहेगा। आप स्टारबर्स्ट पैटर्न में लोगो के माध्यम से क्षैतिज और लंबवत दोनों दर्जनों और स्कैनलाइनों को पहचान और परिभाषित कर सकते हैं। इन्हें "हस्ताक्षर स्कैन लाइन" पर कॉल करें।

लक्ष्य छवि में इस हस्ताक्षर की खोज क्षैतिज पट्टियों में छवि स्कैन करने का एक साधारण मामला है। लाल-चैनल में एक उच्च-आवृत्ति की तलाश करें (एक लाल क्षेत्र से सफेद रंग में जाने का संकेत), और एक बार पाया गया, देखें कि प्रशिक्षण सत्र में पहचाने जाने वाले आवृत्ति तालों में से एक के बाद इसका पालन किया जाता है या नहीं। एक बार मैच मिलने के बाद, आप लोगो में स्कैन-लाइन के अभिविन्यास और स्थान को तत्काल जान लेंगे (यदि आप प्रशिक्षण के दौरान उन चीजों का ट्रैक रखते हैं), इसलिए वहां से लोगो की सीमाओं की पहचान करना तुच्छ है।

मुझे आश्चर्य होगा अगर यह रैखिक रूप से कुशल एल्गोरिदम नहीं था, या लगभग इतना। यह स्पष्ट रूप से आपके कैन-बोतल भेदभाव को संबोधित नहीं करता है, लेकिन कम से कम आपके पास लोगो होंगे।

(अद्यतन: बोतल मान्यता के लिए मैं लोगो के समीप कोक (ब्राउन तरल) की तलाश करता हूं - यानी, बोतल के अंदर । या, खाली बोतल के मामले में, मैं एक टोपी की तलाश करता हूं जो हमेशा के पास होगा लोगो से एक ही मूल आकार, आकार और दूरी और आम तौर पर सभी सफेद या लाल हो जाएंगे। लोगो के सापेक्ष एक टोपी होना चाहिए, जहां एक टोपी होना चाहिए । लोगो के सापेक्ष एक टोपी होना चाहिए । निश्चित रूप से मूर्ख नहीं है, लेकिन आपका लक्ष्य यहां होना चाहिए आसान लोगों को तेजी से ढूंढें।)

(यह मेरे छवि प्रसंस्करण के दिनों से कुछ साल हो गया है, इसलिए मैंने इस सुझाव को उच्च स्तर और वैचारिक रखा। मुझे लगता है कि यह अनुमान लगा सकता है कि मानव आंख कैसे काम कर सकती है - या कम से कम मेरा दिमाग कैसे करता है!)


मुझे आपका प्रश्न पसंद है, भले ही यह विषय बंद है या नहीं: पी

एक दिलचस्प एक तरफ; मैंने अभी अपनी डिग्री में एक विषय पूरा कर लिया है जहां हमने रोबोटिक्स और कंप्यूटर दृष्टि को कवर किया था। सेमेस्टर के लिए हमारी परियोजना अविश्वसनीय रूप से आपके जैसा वर्णन करती है।

हमें एक रोबोट विकसित करना पड़ा जो कि कोक बोतलों और डिब्बे को विभिन्न प्रकाश व्यवस्था और पर्यावरण स्थितियों में किसी भी अभिविन्यास पर पहचानने के लिए एक्सबॉक्स किनेक्ट का उपयोग करता था। हमारे समाधान में ह्यू सर्कल ट्रांसफॉर्म के साथ संयोजन में ह्यू चैनल पर बैंड पास फ़िल्टर का उपयोग करना शामिल था। हम पर्यावरण को थोड़ा सा बाधित करने में सक्षम थे (हम रोबोट और किनेक्ट सेंसर को कहां और कैसे स्थापित कर सकते थे), अन्यथा हम एसआईएफटी या एसयूआरएफ ट्रांसफॉर्म का उपयोग करने जा रहे थे।

आप विषय पर मेरे ब्लॉग पोस्ट पर हमारे दृष्टिकोण के बारे में पढ़ सकते हैं :)


एमवीटेक से हल्कॉन नामक एक कंप्यूटर दृष्टि पैकेज है जिसका जनसांख्यिकी आपको अच्छा एल्गोरिदम विचार दे सकता है। आपकी समस्या के समान कई उदाहरण हैं जो आप डेमो मोड में चला सकते हैं और फिर कोड में ऑपरेटरों को देख सकते हैं और देख सकते हैं कि उन्हें मौजूदा ओपनसीवी ऑपरेटरों से कैसे कार्यान्वित किया जाए।

मैंने इस पैकेज का उपयोग इस तरह की समस्याओं के लिए जटिल एल्गोरिदम को तुरंत प्रोटोटाइप करने के लिए किया है और फिर मौजूदा ओपनसीवी सुविधाओं का उपयोग करके उन्हें कार्यान्वित करने का तरीका जानें। विशेष रूप से आपके मामले के लिए आप ऑपरेटर find_scaled_shape_model में एम्बेडेड कार्यक्षमता OpenCV में कार्यान्वित करने का प्रयास कर सकते हैं। कुछ ऑपरेटर एल्गोरिदम कार्यान्वयन के संबंध में वैज्ञानिक पेपर को इंगित करते हैं जो ओपनसीवी में कुछ ऐसा करने के तरीके को जानने में मदद कर सकता है। उम्मीद है की यह मदद करेगा...


मुझे चुनौती पसंद है और मैं जवाब देना चाहता हूं, जो मुझे लगता है कि समस्या हल करती है।

  1. लोगो के फीचर्स (कीपॉइंट्स, एसआईएफटी, एसयूआरएफ जैसे डिस्क्रिप्टर) निकालें
  2. लोगो की मॉडल छवि के साथ अंक मिलान करें (ब्रूट फोर्स जैसे मैचर का उपयोग करके)
  3. कठोर शरीर के निर्देशांक का अनुमान लगाएं (पीएनपी समस्या - SolvePnP)
  4. कठोर शरीर के अनुसार टोपी स्थिति का अनुमान लगाएं
  5. बैक-प्रोजेक्शन करें और बोतल की टोपी की छवि पिक्सेल स्थिति (आरओआई) की गणना करें (मुझे लगता है कि आपके पास कैमरे के आंतरिक पैरामीटर हैं)
  6. एक विधि के साथ जांचें कि टोपी है या नहीं। यदि वहां है, तो यह बोतल है

टोपी का पता लगाना एक और मुद्दा है। यह या तो जटिल या सरल हो सकता है। अगर मैं आप थे, तो मैं एक साधारण निर्णय के लिए आरओआई में रंग हिस्टोग्राम की जांच करता हूं।

कृपया, अगर मैं गलत हूं तो प्रतिक्रिया दें। धन्यवाद।


यदि आप केवल एक कैमरे तक सीमित नहीं हैं जो आपकी बाधाओं में से एक में नहीं था तो शायद आप एक्सबॉक्स Kinect जैसे रेंज सेंसर का उपयोग करने के लिए आगे बढ़ सकते हैं। इसके साथ आप छवि के गहराई और रंग आधारित मिलान खंडन कर सकते हैं। यह छवि में वस्तुओं की तेज़ी से अलग होने की अनुमति देता है। इसके बाद आप आईसीपी मिलान या इसी तरह की तकनीकों का उपयोग कर सकते हैं ताकि वे इसके रूपरेखा या रंग के आकार को भी मिलान कर सकें और यह देखते हुए कि यह बेलनाकार है, यदि आपके पास लक्ष्य का पिछला 3 डी स्कैन है तो यह किसी भी अभिविन्यास के लिए मान्य विकल्प हो सकता है। ये तकनीकें अक्सर बहुत तेज़ी से होती हैं, खासकर जब इस तरह के एक विशिष्ट उद्देश्य के लिए उपयोग की जाती है जो आपकी गति की समस्या को हल कर लेती है।

इसके अलावा मैं सुझाव दे सकता हूं कि सटीकता या गति के लिए जरूरी नहीं है लेकिन मज़े के लिए आप अपने रंग के चित्रित छवि पर प्रशिक्षित तंत्रिका नेटवर्क का उपयोग कर सकते हैं ताकि आकार के आकार की पहचान हो सके। ये बहुत तेज़ हैं और अक्सर 80/9 0% सटीक हो सकते हैं। प्रशिक्षण एक लंबी प्रक्रिया का थोड़ा सा होगा हालांकि आपको प्रत्येक छवि में मैन्युअल रूप से पहचानने की आवश्यकता होगी।


मुझे वास्तव में डैरेन कुक और स्टेकर के इस समस्या का जवाब पसंद है। मैं उन लोगों पर एक टिप्पणी में अपने विचार फेंकने के बीच में था, लेकिन मेरा मानना ​​है कि मेरा दृष्टिकोण यहां छोड़ने के लिए बहुत ही जवाब देने वाला नहीं है।

संक्षेप में, आपने यह निर्धारित करने के लिए एक एल्गोरिदम की पहचान की है कि अंतरिक्ष में किसी विशेष स्थान पर कोका-कोला लोगो मौजूद है। अब आप मनमाने ढंग से उन्मुखता और मनमाने ढंग से स्केलिंग कारकों के लिए निर्धारित करने की कोशिश कर रहे हैं, जो कि अन्य वस्तुओं से कोका-कोला के डिब्बे को अलग करने के लिए उपयुक्त एक ह्युरिस्टिक है, जिसमें शामिल हैं: बोतलें , बिलबोर्ड , विज्ञापन , और कोका कोला सामग्री सभी इस प्रतिष्ठित लोगो से जुड़े हैं। आपने अपने समस्या कथन में इन अतिरिक्त मामलों में से कई को नहीं बुलाया, लेकिन मुझे लगता है कि वे आपके एल्गोरिदम की सफलता के लिए महत्वपूर्ण हैं।

यहां रहस्य यह निर्धारित कर रहा है कि कौन सी दृश्य सुविधाओं में शामिल हो सकता है या नकारात्मक स्थान के माध्यम से, अन्य कोक उत्पादों के लिए कौन सी विशेषताएं मौजूद हैं जो डिब्बे के लिए मौजूद नहीं हैं। इसके अंत में, वर्तमान शीर्ष उत्तर "कर सकते हैं" चुनने के लिए एक बुनियादी दृष्टिकोण को स्केच करता है अगर केवल "बोतल" की पहचान नहीं की जाती है, या तो बोतल कैप, तरल, या अन्य समान दृश्य हेरिस्टिक की उपस्थिति से।

समस्या यह टूट जाती है। उदाहरण के लिए, एक बोतल खाली हो सकती है और एक टोपी की उपस्थिति की कमी होती है, जिससे झूठी सकारात्मक होती है। या, यह अतिरिक्त आंशिक सुविधाओं के साथ आंशिक बोतल हो सकती है , जो फिर से झूठी पहचान के लिए अग्रणी होती है। कहने की जरूरत नहीं है, यह सुरुचिपूर्ण नहीं है, न ही यह हमारे उद्देश्यों के लिए प्रभावी है।

इस अंत तक, डिब्बे के लिए सबसे सही चयन मानदंड निम्नलिखित प्रतीत होते हैं:

  • ऑब्जेक्ट सिल्हूट का आकार, जैसा कि आपने अपने प्रश्न में स्केच किया है , सही? यदि हां, तो +1।
  • अगर हम प्राकृतिक या कृत्रिम प्रकाश की उपस्थिति मानते हैं, तो क्या हम बोतल को क्रोम रूपरेखा का पता लगाते हैं जो यह दर्शाता है कि यह एल्यूमीनियम से बना है या नहीं? यदि हां, तो +1।
  • क्या हम यह निर्धारित करते हैं कि ऑब्जेक्ट के specular गुण सही हैं, हमारे प्रकाश स्रोतों के सापेक्ष ( प्रकाश स्रोत पहचान पर चित्रकारी वीडियो लिंक )? यदि हां, तो +1।
  • क्या हम ऑब्जेक्ट के बारे में किसी अन्य गुण को निर्धारित कर सकते हैं जो इसे पहचान के रूप में पहचान सकता है, जिसमें लोगो की स्थलीय छवि स्की, ऑब्जेक्ट का अभिविन्यास, ऑब्जेक्ट का जुड़ाव (उदाहरण के लिए, प्लानर सतह पर एक टेबल की तरह या अन्य डिब्बे के संदर्भ में), और एक पुल टैब की उपस्थिति? यदि हां, तो प्रत्येक के लिए, +1।

तब आपका वर्गीकरण निम्न जैसा दिख सकता है:

  • प्रत्येक उम्मीदवार मैच के लिए, यदि कोका कोला लोगो की उपस्थिति का पता चला, तो भूरे रंग की सीमा बनाएं।
  • +2 से अधिक प्रत्येक मैच के लिए, एक लाल सीमा खींचें।

यह उस उपयोगकर्ता को स्पष्ट रूप से हाइलाइट करता है जो पता चला था, कमजोर सकारात्मक पर जोर देता है, जो सही ढंग से, उलझन में डिब्बे के रूप में पहचाना जा सकता है।

प्रत्येक संपत्ति का पता लगाने में बहुत अलग समय और अंतरिक्ष जटिलता होती है, और प्रत्येक दृष्टिकोण के लिए, http://dsp.stackexchange.com के माध्यम से एक त्वरित पास आपके उद्देश्यों के लिए सबसे सही और सबसे कुशल एल्गोरिदम निर्धारित करने के लिए उचित से अधिक है। यहां मेरा इरादा पूरी तरह से और सरल है, यह पता लगाने के लिए कि क्या उम्मीदवार पहचान स्थान के एक छोटे से हिस्से को अमान्य करके कुछ कर सकता है , इस समस्या का सबसे मजबूत या प्रभावी समाधान नहीं है, और आदर्श रूप में, आपको उचित कार्यवाही करनी चाहिए तदनुसार।

और हे, हैकर समाचार पोस्टिंग पर बधाई ! पूरी तरह से, यह एक बहुत ही भयानक सवाल है जो इसे प्राप्त प्रचार के योग्य है। :)


If you are interested in it being realtime, then what you need is to add in a pre-processing filter to determine what gets scanned with the heavy-duty stuff. A good fast, very real time, pre-processing filter that will allow you to scan things that are more likely to be a coca-cola can than not before moving onto more iffy things is something like this: search the image for the biggest patches of color that are a certain tolerance away from the sqrt(pow(red,2) + pow(blue,2) + pow(green,2)) of your coca-cola can. Start with a very strict color tolerance, and work your way down to more lenient color tolerances. Then, when your robot runs out of an allotted time to process the current frame, it uses the currently found bottles for your purposes. Please note that you will have to tweak the RGB colors in the sqrt(pow(red,2) + pow(blue,2) + pow(green,2)) to get them just right.

Also, this is gona seem really dumb, but did you make sure to turn on -oFast compiler optimizations when you compiled your C code?


किनारे का पता लगाने के बाद, हफ़ ट्रांसफॉर्म का उपयोग करें। फिर, उन बिंदुओं को उनके लेबल के साथ एक एसवीएम (सहायक वेक्टर मशीन) में रखें, यदि उदाहरणों पर उनके पास चिकनी रेखाएं हैं, तो एसवीएम को उदाहरण और अन्य भागों के आवश्यक हिस्सों को विभाजित करने में कोई कठिनाई नहीं होगी। एसवीएम पर मेरी सलाह, कनेक्टिविटी और लंबाई जैसे पैरामीटर डालें। यही है, यदि अंक जुड़े हुए हैं और लंबे हैं, तो वे रसीद की एक पंक्ति होने की संभावना है। फिर, आप अन्य सभी बिंदुओं को खत्म कर सकते हैं।





c++ algorithm image-processing opencv