विषयसूची:
- चरण 1: गहरा होना: छवि स्ट्रीम में ऑब्जेक्ट मूवमेंट का पता कैसे लगाया जा सकता है?
- चरण 2: बिनाराइजेशन
- चरण 3: फैलाना
- चरण 4: समोच्चों की खोज (और इसके केन्द्रक)
- चरण 5: सेंटोरिड की गति और वस्तु की गिनती
वीडियो: रास्पबेरी पाई ऑब्जेक्ट काउंटिंग: 5 कदम
2024 लेखक: John Day | [email protected]. अंतिम बार संशोधित: 2024-01-30 09:21
निःसंदेह कंप्यूटर विजन एक शानदार चीज है! इसका उपयोग करके, एक कंप्यूटर आसपास के वातावरण को "देखने" और बेहतर तरीके से समझने की क्षमता हासिल करता है, जो जटिल, उपयोगी और शांत अनुप्रयोगों के विकास की अनुमति देता है। चेहरे का पता लगाने और पहचानने, ऑब्जेक्ट ट्रैकिंग और ऑब्जेक्ट डिटेक्शन जैसे एप्लिकेशन हमारी दिन-प्रतिदिन की गतिविधियों में अधिक से अधिक मौजूद हैं, कंप्यूटर विज़न एडवांस के लिए धन्यवाद।
कंप्यूटर विज़न फ्रेमवर्क और टूल्स कितने उन्नत और सुलभ हैं, इस पर विचार करते हुए, इस लेख में वर्णित एप्लिकेशन अच्छी तरह से फिट बैठता है: एक साधारण रास्पबेरी पीआई और ओपनसीवी नामक एक लागत-मुक्त और ओपन-सोर्स कंप्यूटर विज़न फ्रेमवर्क का उपयोग करके वस्तुओं को गति में गिनने के लिए, अधिक सटीक रूप से कितना वस्तुएं एक निश्चित निगरानी क्षेत्र के अंदर और बाहर जाती हैं।
चरण 1: गहरा होना: छवि स्ट्रीम में ऑब्जेक्ट मूवमेंट का पता कैसे लगाया जा सकता है?
अब छवि प्रसंस्करण सामग्री में गहराई से जाने का समय है:
कुछ वेबकैम स्ट्रीम छवियों को कैसे प्राप्त करें और पता लगाएं कि कुछ वहां स्थानांतरित हो गया है।
इसमें पाँच चरण होते हैं:
चरण 1: गति में वस्तु को उजागर करने के लिए
जैसा कि शास्त्रीय भौतिकी में परिभाषित किया गया है, यह अनुमान लगाने के लिए एक संदर्भ आवश्यक है कि कुछ चल रहा है या यदि यह स्थिर है। यहां, यह निर्धारित करने के लिए कि कुछ स्थानांतरित हो गया है, यह काफी समान है: कैप्चर किए गए प्रत्येक वेबकैम स्ट्रीम की तुलना संदर्भ फ्रेम से की जाएगी। अगर कुछ अलग है, तो कुछ स्थानांतरित कर दिया गया है। यह सुनने में जितना आसान लगता है।
इस संदर्भ फ्रेम को सबसे सही परिस्थितियों में कैप्चर किया जाना चाहिए (उदाहरण के लिए कुछ भी नहीं हिल रहा है)। इमेज प्रोसेसिंग की दुनिया में, कैप्चर किए गए फ्रेम और रेफरेंस फ्रेम के बीच की तुलना में बैकग्राउंड घटाव नामक एक तकनीक होती है। बैकग्राउंड सबट्रेशन में कैप्चर किए गए फ्रेम और रेफरेंस फ्रेम से पिक्सेल-टू-पिक्सेल रंग की जानकारी को शाब्दिक रूप से घटाना शामिल है। तो, इस प्रक्रिया से परिणामी छवि केवल अधिक विवरण के साथ हाइलाइट/दिखाएगी जो इन दो फ़्रेमों (या, जो स्थानांतरित हो गई है/गति प्राप्त हुई है) के बीच अलग है और बाकी सब कुछ छवि में काला होगा (ग्रे पर शून्य मान का रंग -स्केल पिक्सेल)। महत्वपूर्ण: प्रकाश की स्थिति और कैप्चर की गई वेबकैम छवि की गुणवत्ता (कैप्चर सेंसर गुणवत्ता के कारण) फ्रेम से फ्रेम में थोड़ी भिन्न हो सकती है। इसका तात्पर्य है कि संदर्भ फ्रेम और अन्य फ्रेम से "बराबर भाग" पृष्ठभूमि घटाव के बाद कुल काला नहीं होगा। इस व्यवहार के बावजूद, इस परियोजना में छवि प्रसंस्करण के अगले चरणों में कोई गंभीर परिणाम नहीं हैं।
इमेज प्रोसेसिंग समय को कम करने के लिए, बैकग्राउंड सबट्रेशन करने से पहले, कैप्चर किए गए फ्रेम और रेफरेंस फ्रेम को ग्रे स्केल इमेज में बदल दिया जाता है। लेकिन क्यों? यह एक कंप्यूटिंग दक्षता मुद्दा है: एक छवि जो कई रंगों (रंग छवि) को प्रस्तुत करती है, में प्रति पिक्सेल तीन सूचनाएं होती हैं: लाल, नीला और हरा रंग घटक (पुराना लेकिन सोना आरजीबी मानक)। तो, भौतिक रूप से, प्रत्येक पिक्सेल को तीन-मान सरणी के रूप में परिभाषित किया जा सकता है, प्रत्येक एक रंग घटक का प्रतिनिधित्व करता है। इसलिए, इसे पूरी छवि तक विस्तारित करते हुए, अंतिम छवि वास्तव में तीन छवि घटकों का मिश्रण होगी: लाल, नीला और हरा छवि घटक।
इसे संसाधित करने के लिए, बहुत सारे काम की आवश्यकता होती है! हालांकि, ग्रे-स्केल छवियों में, प्रत्येक पिक्सेल में केवल एक रंग जानकारी होती है। तो, एक रंगीन छवि का प्रसंस्करण ग्रे-स्केल छवि मामले की तुलना में तीन गुना धीमा है (कम से कम तीन बार, इस पर निर्भर करता है कि कौन सी तकनीक शामिल है)। और भी बहुत कुछ है: कुछ उद्देश्यों के लिए (इस परियोजना की तरह), सभी रंगों को संसाधित करना आवश्यक या महत्वपूर्ण नहीं है। इसलिए, हम इस निष्कर्ष पर पहुंचे: छवि प्रसंस्करण उद्देश्य के लिए ग्रे-स्केल छवियों के उपयोग की अत्यधिक अनुशंसा की जाती है। बैकग्राउंड सबट्रेशन के बाद, गॉसियन ब्लर फ़िल्टर लागू करना आवश्यक है।
पृष्ठभूमि घटाई गई छवि पर लागू गॉसियन ब्लर फ़िल्टर चलती हुई वस्तु की सभी आकृति को सुचारू करता है। निश्चित रूप से, यह इमेज प्रोसेसिंग के अगले चरणों में मददगार होगा।
चरण 2: बिनाराइजेशन
छवि प्रसंस्करण के अधिकांश मामलों में, छवि में वस्तुओं/विशेषताओं को हाइलाइट करने के बाद बिनाराइजेशन लगभग एक अनिवार्य कदम है। कारण: एक बाइनरी छवि में, प्रत्येक पिक्सेल रंग केवल दो मान ग्रहण कर सकता है: 0x00 (काला) या 0xFF (सफेद)। यह इमेज प्रोसेसिंग तकनीकों को अगले चरणों में लागू करने के लिए और भी कम "कंप्यूटिंग पावर" की आवश्यकता के लिए इमेज प्रोसेसिंग में बहुत मदद करता है। ग्रे-स्केल छवि के प्रत्येक पिक्सेल रंग की एक निश्चित सीमा से तुलना करके बिनाराइज़ेशन किया जा सकता है। यदि पिक्सेल रंग का मान थ्रेशोल्ड से अधिक है, तो यह पिक्सेल रंग सफेद मान (0xFF) ग्रहण करेगा, और यदि पिक्सेल रंग का मान थ्रेशोल्ड से कम है, तो यह पिक्सेल रंग काला मान (0x00) मान लेगा। दुर्भाग्य से, थ्रेशोल्ड वैल्यू का चुनाव करना इतना आसान नहीं है। यह प्रकाश की स्थिति जैसे पर्यावरणीय कारकों पर निर्भर करता है। थ्रेशोल्ड मान का गलत चुनाव आगे के सभी चरणों को बर्बाद कर सकता है। इसलिए, मैं दृढ़ता से अनुशंसा करता हूं कि आप किसी भी आगे की कार्रवाई से पहले अपने मामले के लिए परियोजना में मैन्युअल रूप से एक सीमा समायोजित करें। इस थ्रेशोल्ड मान को यह सुनिश्चित करना चाहिए कि चलती वस्तु बाइनरी छवि में दिखाई दे। मेरे मामले में, थ्रेशोल्ड के पर्याप्त विकल्प के बाद, जो आप चित्र 5 में देखते हैं, उसका परिणाम है।
चित्र 5 - द्विआधारी छवि
चरण 3: फैलाना
अब तक, चलती वस्तुओं का पता लगाना, उन्हें उजागर करना और बिनाराइजेशन लागू करना संभव था, जिसके परिणामस्वरूप चलती वस्तु की एक बहुत स्पष्ट छवि होती है (= छवि प्रसंस्करण उद्देश्यों के लिए वस्तु की बहुत स्पष्ट छवि)। वस्तु गणना की तैयारी लगभग पूरी हो चुकी है। यहां "लगभग" का अर्थ है कि आगे बढ़ने से पहले कुछ ठीक समायोजन करने हैं। इस बिंदु पर, वस्तुओं में "छेद" की उपस्थिति की वास्तविक संभावनाएं होती हैं (पिक्सेल के काले द्रव्यमान सफेद हाइलाइट किए गए ऑब्जेक्ट में)। ये छेद कुछ भी हो सकते हैं, विशेष प्रकाश व्यवस्था की स्थिति से लेकर वस्तु के आकार के कुछ हिस्से तक। एक बार छेद वास्तविक वस्तुओं के अंदर झूठी वस्तुओं को "उत्पादित" कर सकते हैं (यह इस बात पर निर्भर करता है कि वे कितने बड़े और कहाँ स्थित हैं), एक छवि में छेद की उपस्थिति के परिणाम वस्तुओं की गिनती के लिए विनाशकारी हो सकते हैं। इन छेदों को खत्म करने का एक तरीका एक इमेज प्रोसेसिंग टेक्निक का उपयोग करना है जिसे Dilate कहा जाता है। इसका इस्तेमाल करें और छेद दूर हो जाएं।
चरण 4: समोच्चों की खोज (और इसके केन्द्रक)
इस बिंदु पर, हमारे पास हाइलाइट की गई वस्तुएं हैं, इसके अंदर कोई छेद नहीं है और आगे क्या है इसके लिए तैयार हैं: आकृति (और इसके केंद्रक) की खोज। ओपनसीवी में स्वचालित रूप से समोच्चों का पता लगाने के लिए संसाधन हैं, लेकिन पता लगाए गए काउंटरों को बुद्धिमानी से चुना जाना चाहिए (केवल वास्तविक वस्तु या वस्तुओं को चुनने के लिए)। तो, आकृति का पता लगाने का मानदंड वस्तु का क्षेत्र है, जिसे पिक्सल में मापा जाता है। यदि एक समोच्च में एक सीमा से अधिक क्षेत्र है (सॉफ्टवेयर में कॉन्फ़िगर किया गया है), तो इसे एक वास्तविक वस्तु के रूप में गिना जाना चाहिए। इस क्षेत्र की सीमा/मानदंड का चुनाव बहुत महत्वपूर्ण है, और यहां गलत चुनाव का मतलब गलत गणना है। आपको कुछ क्षेत्र मूल्य सीमा मूल्यों का प्रयास करना चाहिए और जांचना चाहिए कि आपके उपयोग के लिए क्या बेहतर है। चिंता न करें, इन सीमाओं को खोजना/समायोजित करना इतना कठिन नहीं है। एक बार जब छवि में सभी वस्तुओं को उठा लिया जाता है, तो अगला कदम उस पर एक रेखा खींचना होता है (इस आयत में इसके अंदर एक संपूर्ण पता लगाया गया वस्तु होना चाहिए)। और इस आयत का केंद्र है…. वस्तु केन्द्रक! आप शायद सोच रहे हैं "इस केन्द्रक के साथ क्या बड़ी बात है?", है ना? यहाँ आपका उत्तर है: वस्तु का आकार कितना भी बड़ा या कैसा भी क्यों न हो, उसकी गति केन्द्रक के समान ही होती है। दूसरे शब्दों में: सेंट्रोइड नामक यह सरल बिंदु वस्तु की सभी गति का प्रतिनिधित्व करता है। यह अब गिनती को बहुत आसान बना देता है, है ना? नीचे दी गई छवि देखें (आकृति 6), जहां वस्तु के केन्द्रक को एक काले बिंदु के रूप में दर्शाया गया है।
चरण 5: सेंटोरिड की गति और वस्तु की गिनती
ग्रैंड फिनाले: ऑब्जेक्ट के सेंट्रोइड निर्देशांक की तुलना प्रवेश और निकास लाइनों के निर्देशांक से करें और पहले वर्णित काउंटिंग एल्गोरिथम को लागू करें। और चलती वस्तुओं की गिनती होगी!
अंतिम परिणाम जैसा कि इस पोस्ट की शुरुआत में दिखाया गया है, यहां परियोजना कार्य में है:
सिफारिश की:
ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग: शेप पंचर का उपयोग करके ऑब्जेक्ट लर्निंग / टीचिंग मेथड / तकनीक बनाना: 5 कदम
ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग: शेप पंचर का उपयोग करके ऑब्जेक्ट लर्निंग / टीचिंग मेथड / तकनीक बनाना: ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग के लिए नए छात्रों के लिए लर्निंग / टीचिंग मेथड। यह उन्हें कक्षाओं से वस्तुओं को बनाने की प्रक्रिया को देखने और देखने की अनुमति देने का एक तरीका है। भाग: १। एकटूल 2 इंच बड़ा पंच; ठोस आकार सबसे अच्छे हैं।२। कागज का टुकड़ा या सी
रास्पबेरी पाई ऑब्जेक्ट डिटेक्शन: 7 कदम
रास्पबेरी पाई ऑब्जेक्ट डिटेक्शन: यह गाइड रास्पबेरी पाई पर टेंसरफ्लो के ऑब्जेक्ट डिटेक्शन एपीआई को कैसे सेट करें, इसके लिए चरण-दर-चरण निर्देश प्रदान करता है। इस गाइड में दिए गए चरणों का पालन करके, आप अपने रास्पबेरी पाई का उपयोग पी से लाइव वीडियो पर ऑब्जेक्ट डिटेक्शन करने के लिए कर सकेंगे
रास्पबेरी पाई - ओपनसीवी ऑब्जेक्ट ट्रैकिंग के साथ स्वायत्त मार्स रोवर: 7 कदम (चित्रों के साथ)
रास्पबेरी पाई - ओपनसीवी ऑब्जेक्ट ट्रैकिंग के साथ ऑटोनॉमस मार्स रोवर: रास्पबेरी पाई 3 द्वारा संचालित, ओपन सीवी ऑब्जेक्ट रिकग्निशन, अल्ट्रासोनिक सेंसर और गियर डीसी मोटर्स। यह रोवर किसी भी ऐसी वस्तु को ट्रैक कर सकता है जिसके लिए उसे प्रशिक्षित किया गया है और किसी भी इलाके में आगे बढ़ सकता है
ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग: कैंची का उपयोग करके ऑब्जेक्ट लर्निंग/टीचिंग मेथड/तकनीक बनाना: 5 कदम
ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग: कैंची का उपयोग करके ऑब्जेक्ट लर्निंग / टीचिंग मेथड / तकनीक बनाना: ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग के लिए नए छात्रों के लिए लर्निंग / टीचिंग मेथड। यह उन्हें कक्षाओं से वस्तुओं को बनाने की प्रक्रिया को देखने और देखने की अनुमति देने का एक तरीका है। भाग: 1. कैंची (कोई भी प्रकार करेगा)। 2. कागज या कार्डस्टॉक का टुकड़ा। 3. मार्कर।
रास्पबेरी पाई 3 बी में एचडीएमआई के बिना रास्पियन स्थापित करना - रास्पबेरी पाई 3बी के साथ शुरुआत करना - अपना रास्पबेरी पाई सेट करना 3: 6 कदम
रास्पबेरी पाई 3 बी में एचडीएमआई के बिना रास्पियन स्थापित करना | रास्पबेरी पाई 3बी के साथ शुरुआत करना | अपना रास्पबेरी पाई 3 सेट करना: जैसा कि आप में से कुछ लोग जानते हैं कि रास्पबेरी पाई कंप्यूटर काफी शानदार हैं और आप पूरे कंप्यूटर को सिर्फ एक छोटे बोर्ड पर प्राप्त कर सकते हैं। रास्पबेरी पाई 3 मॉडल बी में क्वाड-कोर 64-बिट एआरएम कोर्टेक्स ए 53 है। 1.2 गीगाहर्ट्ज़ पर क्लॉक किया गया। यह पाई 3 को लगभग 50