tutorial - the c++ programming language




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

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

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

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

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

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

https://code.i-harness.com

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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


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


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

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

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

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

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

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

मूल पत्र


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

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

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

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

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


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

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

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


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

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

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

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


मुझे ओपनसीवी के बारे में पता नहीं है लेकिन समस्या को तर्कसंगत रूप से देखते हुए मुझे लगता है कि आप बोतल के बीच अंतर कर सकते हैं और आप जिस छवि को देख रहे हैं उसे बदलकर कर सकते हैं यानी कोका कोला। कोका कोला के शीर्ष पर चांदी के अस्तर के मामले में और बोतल के मामले में ऐसी कोई रजत अस्तर नहीं होने के मामले में आपको शीर्ष हिस्से तक शामिल करना चाहिए।

लेकिन जाहिर है कि यह एल्गोरिदम उन मामलों में असफल हो जाएगा जहां शीर्ष का छिपा हुआ है, लेकिन ऐसे मामले में भी मनुष्य दोनों के बीच अंतर करने में सक्षम नहीं होगा (यदि बोतल / कैन का केवल कोका कोला भाग दिखाई दे)


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

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

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

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

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

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

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

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

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

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

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


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

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

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


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


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

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


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

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


आकार को देख रहे हैं

कैन / बोतल के लाल हिस्से के आकार पर एक गंजा लें। ध्यान दें कि कैसे शीर्ष पर थोड़ा सा टेपर्स बंद कर सकते हैं जबकि बोतल लेबल सीधे है। आप लाल भाग की चौड़ाई की लंबाई की तुलना में इन दोनों के बीच अंतर कर सकते हैं।

हाइलाइट्स को देख रहे हैं

बोतलों और डिब्बे के बीच अंतर करने का एक तरीका सामग्री है। एक बोतल प्लास्टिक से बना है जबकि एक एल्यूमीनियम धातु से बना है। पर्याप्त अच्छी तरह से प्रकाशित स्थितियों में, specularity को देखकर एक लेबल लेबल से एक बोतल लेबल बताने का एक तरीका होगा।

जहां तक ​​मैं कह सकता हूं, इस तरह एक इंसान दो प्रकार के लेबलों के बीच अंतर बताएगा। यदि प्रकाश की स्थिति खराब है, तो दोनों को किसी भी तरह से अलग करने में कुछ अनिश्चितता होनी चाहिए। उस स्थिति में, आपको पारदर्शी / पारदर्शी बोतल की उपस्थिति का पता लगाने में सक्षम होना होगा।


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?


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.





opencv