हमने ओपनसीवी की मूल बातें सीखना शुरू किया और फिर इमेज सेगमेंटेशन और कई अन्य ऑपरेशंस के बाद ओपनसीवी और पायथन लैंग्वेज का इस्तेमाल करते हुए कुछ बेसिक इमेज प्रोसेसिंग और मैनिपुलेशन किए। यहां, इस खंड में, हम टेम्पलेट मिलान का उपयोग करके कुछ सरल वस्तु पहचान तकनीकों का प्रदर्शन करेंगे । हमें एक छवि में एक वस्तु मिलेगी और फिर हम इसकी विशेषताओं का वर्णन करेंगे। विशेषताएं छवि के सामान्य गुण हैं जैसे कोने, किनारे आदि। हम कुछ सामान्य और लोकप्रिय ऑब्जेक्ट डिटेक्शन एल्गोरिदम जैसे कि SIFT, SURF, FAST, BREIF & ORB पर भी नज़र डालेंगे ।
जैसा कि पिछले ट्यूटोरियल में बताया गया है, ओपनसीवी ओपन सोर्स कम्यूटर विजन लाइब्रेरी है जिसमें सी ++, पायथन और जावा इंटरफेस है और विंडोज, लिनक्स, मैक ओएस, आईओएस और एंड्रॉइड को सपोर्ट करता है। तो यह आसानी से अजगर और लिनक्स वातावरण के साथ रास्पबेरी पाई में स्थापित किया जा सकता है। और OpenCV और संलग्न कैमरे के साथ रास्पबेरी पाई का उपयोग कई वास्तविक समय छवि प्रसंस्करण अनुप्रयोगों जैसे फेस डिटेक्शन, फेस लॉक, ऑब्जेक्ट ट्रैकिंग, कार नंबर प्लेट डिटेक्शन, होम सिक्योरिटी सिस्टम आदि बनाने के लिए किया जा सकता है।
ऑब्जेक्ट का पता लगाने और मान्यता कंप्यूटर दृष्टि के लिए सबसे महत्वपूर्ण उपयोग मामला है, उनका उपयोग शक्तिशाली चीजों जैसे कि करने के लिए किया जाता है
- भद्दे दृश्य
- रोबोट नेविगेशन
- सेल्फ ड्राइविंग कार
- शरीर की पहचान (Microsoft Kinect)
- रोग और कैंसर का पता लगाना
- चेहरे की पहचान
- हस्तलिपि अभिज्ञान
- उपग्रह चित्रों में वस्तुओं की पहचान करना
ऑब्जेक्ट डिटेक्शन वीएस मान्यता
ऑब्जेक्ट रिकॉग्निशन ऑब्जेक्ट डिटेक्शन का दूसरा स्तर है जिसमें कंप्यूटर किसी ऑब्जेक्ट को एक इमेज में कई ऑब्जेक्ट्स से पहचानने में सक्षम होता है और इसे पहचानने में सक्षम हो सकता है।
अब, हम एक छवि से एक वस्तु खोजने के लिए कुछ छवि प्रसंस्करण कार्य करेंगे।
एक छवि से एक वस्तु ढूँढना
यहाँ हम एक छवि में वर्ण / वस्तु खोजने के लिए टेम्पलेट मिलान का उपयोग करेंगे, उस वस्तु को खोजने के लिए OpenCV के cv2.matchTemplate () फ़ंक्शन का उपयोग करें।
आयात cv2 आयात np के रूप में सुन्न
इनपुट छवि लोड करें और इसे ग्रे में बदलें
छवि = cv2.imread ('WaldoBeach.jpg') cv2.imshow ('लोग', छवि) cv2.waitKey (0) ग्रे = cv2.cvtColor (छवि, cv2.COLOR_BGR2GRAY)
टेम्पलेट छवि लोड करें
टेम्पलेट = cv2.imread ('waldo.jpg', 0) एक छवि परिणाम के ऊपर वस्तु के मिलान के #result का परिणाम = cv2.matchTemplate (ग्रे, टेम्पलेट, cv2.TM_CCOEFF: sin_val, max_val, min_loc, max_loc = cv2.minMaxLoc परिणाम)
बाउंडिंग बॉक्स बनाएं
top_left = max_loc # आयतन के बाउंडिंग आकार को 50 पिक्सेल बॉटम_right = (top_left + 50, top_left + 50) cv2.rectangle (छवि, top_left, निचला और सीधा) (0,255,0), 5) cv2.imshow ('ऑब्जेक्ट मिला', छवि) cv2.waitKey (0) cv2.destroyAllWindows ()
में cv2.matchTemplate (ग्रे, टेम्पलेट, cv2.TM_CCOEFF) , इनपुट ग्रे पैमाने पर छवि वस्तु और टेम्पलेट खोजने के लिए। फिर छवि से ऑब्जेक्ट खोजने के लिए टेम्पलेट मिलान विधि लागू करें, यहां cv2.TM_CCOEFF का उपयोग किया जाता है।
संपूर्ण फ़ंक्शन एक सरणी देता है जो परिणाम में इनपुट किया जाता है, जो टेम्पलेट मिलान प्रक्रिया का परिणाम है।
और फिर हम cv2.minMaxLoc (परिणाम) का उपयोग करते हैं, जो निर्देशांक या बाउंडिंग बॉक्स देता है जहां ऑब्जेक्ट एक छवि में पाया गया था, और जब हम प्राप्त करते हैं तो वे निर्देशांक इसके ऊपर एक आयताकार खींचते हैं, और बॉक्स के थोड़ा आयाम खींचते हैं ताकि ऑब्जेक्ट आसानी से आयत के अंदर फिट हो सकता है।
टेम्पलेट मिलान करने के लिए कई तरह के तरीके हैं और इस मामले में हम cv2.TM_CCOEFF का उपयोग कर रहे हैं जो सहसंबंध गुणांक के लिए खड़ा है।
यहाँ की-पॉइंट्स हैं (X, Y), सिफ्ट डिटेक्टर का उपयोग करके निकाला गया निर्देशांक और cv2 ड्रा की-पॉइंट फ़ंक्शन का उपयोग करके छवि पर खींचा गया है।
सर्फ
आयात cv2 एनपी छवि के रूप में सुन्न आयात = cv2.imread ('paris.jpg') ग्रे = cv2.cvtColor (छवि, cv2.COLOR_BGR2GRAY)
सर्फ़ फ़ीचर डिटेक्टर ऑब्जेक्ट बनाएँ, यहाँ हम 500 तक हेस्सियन थ्रेशोल्ड सेट करते हैं
सर्फ़ = cv2.xfeatures2d.SURF_create (500) कीपॉइंट्स , डिस्क्रिप्टर = सर्फ़ेक्टएंडकंप्यूट (ग्रे, कोई नहीं) प्रिंट (" कीपॉइंट्स की संख्या का पता लगाया गया:", लेन (कीपॉइंट्स))
इनपुट छवि पर समृद्ध मुख्य बिंदुओं को ड्रा करें
छवि = cv2.drawKeypoints (छवि, की-पॉइंट्स, कोई नहीं, झंडे = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('फ़ीचर विधि - SURF', छवि) cv2.waitKey () cv2.destroy.dll
कंसोल आउटपुट:
तेज
आयात cv2 एनपी छवि के रूप में सुन्न आयात = cv2.imread ('paris.jpg') ग्रे = cv2.cvtColor (छवि, cv2.COLOR_BGR2GRAY)
फास्ट डिटेक्टर ऑब्जेक्ट बनाएँ
फास्ट = cv2.FastFeatureDetector_create () # मुख्य बिंदुओं को प्राप्त करें, डिफ़ॉल्ट रूप से अधिकतम अधिकतम दमन ऑन # सेट बंद करने के लिए तेजी से होता है ।सेटबुल ('नॉनमैक्ससुप्रेशन', गलत) keypoint = fast.detect (ग्रे, कोई नहीं) प्रिंट (की संख्या) पता लगाया गया: ", लेन (की-पॉइंट्स))
इनपुट छवि पर समृद्ध कीपॉइंट बनाएं
image = cv2.drawKeypoint (छवि, की-पॉइंट, कोई नहीं, झंडे = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('फ़ीचर विधि - FAST', छवि) cv2.waitKey () cv2.destroyAllbox
कंसोल आउटपुट:
संक्षिप्त करें
आयात cv2 एनपी छवि के रूप में सुन्न आयात = cv2.imread ('paris.jpg') ग्रे = cv2.cvtColor (छवि, cv2.COLOR_BGR2GRAY)
फास्ट डिटेक्टर ऑब्जेक्ट बनाएं
संक्षिप्त = cv2.xfeatures2d.BriefDescriptorExtractor_create ()
BRIEF एक्सट्रैक्टर ऑब्जेक्ट बनाएँ
#brief = cv2.DescriptorExtractor_create ("BRIEF") # मुख्य बिंदुओं को निर्धारित करें keypoint = fast.detect (ग्रे, कोई नहीं)
विवरण और BRIEF का उपयोग करके नए अंतिम कीपॉइंट प्राप्त करें
कीपॉइंट, डिस्क्रिप्टर = ब्रीफ.कॉम (ग्रे, कीपॉइंट्स) प्रिंट (" कीपॉइंट्स की संख्या का पता लगाया गया:", लेन (कीपॉइंट्स))
इनपुट छवि पर समृद्ध कीपॉइंट बनाएं
छवि = cv2.drawKeypoints (छवि, की-पॉइंट, कोई नहीं, झंडे = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('फ़ीचर विधि - BRIEF', छवि) cv2.waitKey () cv2.estit.dll
कंसोल आउटपुट:
ओर्ब
आयात cv2 एनपी छवि के रूप में सुन्न आयात = cv2.imread ('paris.jpg') ग्रे = cv2.cvtColor (छवि, cv2.COLOR_BGR2GRAY)
ORB ऑब्जेक्ट बनाएँ, हम अपनी इच्छा के अनुसार प्रमुख बिंदुओं की संख्या निर्दिष्ट कर सकते हैं
orb = cv2.ORB_create () # मुख्य बिंदुओं को निर्धारित करें keypoint = orb.detect (ग्रे, कोई नहीं)
विवरण प्राप्त करें
कीपॉइंट, डिस्क्रिप्टर = orb.compute (ग्रे, कीपॉइंट्स) प्रिंट ("की- पॉइंट्स की संख्या का पता लगाया गया:", len (की-पॉइंट))
इनपुट छवि पर समृद्ध कीपॉइंट बनाएं
छवि = cv2.drawKeypoints (छवि, की-पॉइंट्स, कोई नहीं, झंडे = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('फ़ीचर विधि - ORB', छवि) cv2.waitKey () cv2.destroyAllbox
कंसोल आउटपुट:
हम उन की-पॉइंट की संख्या निर्दिष्ट कर सकते हैं जिनकी अधिकतम सीमा 5000 होती है, हालाँकि डिफ़ॉल्ट मान 500 है, यानी ORB स्वचालित रूप से सर्वश्रेष्ठ 500 की-पॉइंट का पता लगाएगा यदि की-पॉइंट के किसी भी मूल्य के लिए निर्दिष्ट नहीं है।
तो यह है कि OpenCV में ऑब्जेक्ट डिटेक्शन कैसे होता है, उन्हीं प्रोग्रामों को OpenCV इंस्टॉल किए गए रास्पबेरी पाई में भी चलाया जा सकता है और इन्हें एक पोर्टेबल डिवाइस की तरह इस्तेमाल किया जा सकता है, जैसे Google लेंस वाले स्मार्टफोन।
यह लेख राजीव रतन द्वारा निर्मित उदयन पर डीप लर्निंग कोर्स के साथ पाइथन में मास्टर कंप्यूटर विजन ™ ओपनसीवी 4 से संदर्भित है, इसे कंप्यूटर विजन और पायथन के बारे में अधिक जानने के लिए सदस्यता लें।