विषयसूची:
- चरण 1: आवश्यक चीजें:
- चरण 2: कार्य सिद्धांत:
- चरण 3: इनपुट कैप्चर और प्रोसेसिंग:
- चरण 4:
- चरण 5:
- चरण 6: प्रसंस्करण भाग:
- चरण 7:
- चरण 8:
- चरण 9:
- चरण 10:
- चरण 11:
- चरण 12: गति नियंत्रण:
- चरण 13:
वीडियो: जेस्चर हॉक: इमेज प्रोसेसिंग आधारित इंटरफेस का उपयोग करते हुए हैंड जेस्चर नियंत्रित रोबोट: 13 चरण (चित्रों के साथ)
2024 लेखक: John Day | [email protected]. अंतिम बार संशोधित: 2024-01-30 09:21
जेस्चर हॉक को TechEvince 4.0 में एक साधारण इमेज प्रोसेसिंग आधारित मानव-मशीन इंटरफ़ेस के रूप में प्रदर्शित किया गया था। इसकी उपयोगिता इस तथ्य में निहित है कि अंतर ड्राइव सिद्धांत पर चलने वाली रोबोट कार को नियंत्रित करने के लिए दस्ताने को छोड़कर किसी अतिरिक्त सेंसर या पहनने योग्य की आवश्यकता नहीं होती है। इस निर्देश में, हम आपको सिस्टम में प्रयुक्त ऑब्जेक्ट ट्रैकिंग और जेस्चर डिटेक्शन के पीछे के कार्य सिद्धांत के बारे में बताएंगे। इस परियोजना का स्रोत कोड जीथब से लिंक के माध्यम से डाउनलोड किया जा सकता है:
चरण 1: आवश्यक चीजें:
- L298N मोटर चालक
- डीसी मोटर्स
- रोबोट कार चेसिस
- Arduino Uno
- लीपो बैटरी
- Arduino USB केबल (लंबी)
- पायथन के साथ ओपनसीवी लाइब्रेरी
चरण 2: कार्य सिद्धांत:
जेस्चर हॉक एक तीन चरण प्रसंस्करण प्रणाली है जैसा कि आप ऊपर दिए गए चित्र में देख सकते हैं।
चरण 3: इनपुट कैप्चर और प्रोसेसिंग:
उपरोक्त आरेख में दी गई व्यापक श्रेणियों में इनपुट कैप्चर को समझा जा सकता है।
पर्यावरण से हाथ के आकार को निकालने के लिए, हमें एक निश्चित रंग (इस मामले में - बैंगनी नीला ') के मास्किंग या फ़िल्टरिंग का उपयोग करने की आवश्यकता है। ऐसा करने के लिए आपको छवि को बीजीआर से एचएसवी प्रारूप में परिवर्तित करने की आवश्यकता है जो निम्नलिखित कोड स्निपेट का उपयोग करके किया जा सकता है।
एचएसवी = cv2.cvtColor (फ्रेम, cv2. COLOR_BGR2HSV)
अब, अगला कदम मास्क या फिल्टर के माध्यम से हाथ निकालने के लिए एचएसवी मापदंडों की वांछित सीमा का पता लगाना है। इसके लिए उपयुक्त रेंज खोजने के लिए ट्रैक बार का उपयोग करना सबसे अच्छा तरीका है। इस परियोजना के लिए उपयोग किए गए ट्रैक बार का स्क्रीनशॉट यहां दिया गया है।
चरण 4:
चरण 5:
यहाँ, मास्क निर्माण के लिए ऐसा ट्रैकबार बनाने के लिए नीचे एक कोड स्निपेट दिया गया है:
आयात cv2
npdef कुछ नहीं (x) के रूप में numpy आयात करें: cv2.namedWindow('image') img = cv2. VideoCapture(0) cv2.createTrackbar('l_H', 'image', 110, 255, कुछ भी नहीं) cv2.createTrackbar('l_S) पास करें ', 'इमेज', 50, 255, कुछ नहीं) cv2.createTrackbar('l_V', 'image', 50, 255, कुछ नहीं) cv2.createTrackbar('h_H', 'image', 130, 255, कुछ नहीं) cv2. createTrackbar('h_S', 'image', 255, 255, कुछ नहीं) cv2.createTrackbar('h_V', 'image', 255, 255, कुछ नहीं) जबकि(1): _, फ्रेम = img.read()
hsv = cv2.cvtColor (फ़्रेम, cv2. COLOR_BGR2HSV) lH = cv2.getTrackbarPos('l_H', 'image') lS = cv2.getTrackbarPos('l_S', 'image') lV = cv2.getTrackbarPos',('l_V' 'इमेज') hH = cv2.getTrackbarPos('h_H', 'image') hS = cv2.getTrackbarPos('h_S', 'image') hV = cv2.getTrackbarPos('h_V', 'image') lower_R = np. array([lH, lS, lV]) high_R = np.array([hH, hS, hV]) मास्क = cv2.inRange(hsv, lower_R, high_R) res = cv2.bitwise_and(फ्रेम, फ्रेम, मास्क = मास्क) cv2.imshow('image', res) k = cv2.waitKey(1) & 0xFF अगर k == 27: ब्रेक cv2.destroyAllWindows()
चरण 6: प्रसंस्करण भाग:
ठीक है, हमें हाथ की ज्यामितीय आकृति मिल गई है, अब इसका दोहन करने और हाथ के हावभाव को समझने के लिए इसका उपयोग करने का समय आ गया है।
उन्नतोत्तर पेटा:
उत्तल पतवार के माध्यम से, हम आकृति में मौजूद चरम बिंदुओं के माध्यम से एक अनुमानित बहुभुज को फिट करने का प्रयास करते हैं। बाईं ओर मौजूद छवि उस अनुमानित बहुभुज को दिखाती है जिसे लाल रंग से चिह्नित उत्तल बिंदुओं के साथ आकृति को सौंपा गया था।
उत्तल बिंदु आकार में वे बिंदु हैं जो इस अनुमानित बहुभुज के एक तरफ से सबसे दूर हैं। लेकिन, उत्तल पतवार के साथ समस्या यह है कि इसकी गणना के दौरान, हमें सभी उत्तल बिंदुओं की एक सरणी मिलेगी, लेकिन हमें जो चाहिए वह नीले बिंदु उत्तल बिंदु है। हम आपको बताएंगे कि इसकी आवश्यकता क्यों है।
इस उत्तल बिंदु को खोजने के लिए, हमें निकटतम भुजा वाले उत्तल बिंदु की दूरी ज्ञात करने के लिए लंबवत दूरी सूत्र लागू करना होगा। हमने देखा कि नीले बिंदु की ओर से अधिकतम दूरी है और इसलिए हमें यह बिंदु मिलता है।
चरण 7:
चरण 8:
आगे हमें अंगूठे की नोक (या चरम बिंदु) को क्षैतिज के साथ इस उत्तल बिंदु से जोड़ने वाली रेखा के झुकाव को खोजने की जरूरत है।
चरण 9:
उपरोक्त मामले में, कोण α 0 से 90 डिग्री के बीच होना चाहिए यदि इशारा बाएं मोड़ के लिए है। वह है tan(α) सकारात्मक होना चाहिए।
चरण 10:
उपरोक्त मामले में, कोण α 180 से 90 डिग्री के बीच होना चाहिए यदि इशारा दाएं मोड़ के लिए है। यानी tan(α) ऋणात्मक होना चाहिए।
इसलिए, यदि टैन α धनात्मक है, तो बाएँ मुड़ें। यदि टैन α ऋणात्मक है, तो दाएँ मुड़ें। अब, यह देखने का समय है कि सबसे महत्वपूर्ण स्टॉप कमांड का पता कैसे लगाया जाए।
यहां, एक निर्दिष्ट अनुपात (हिट और परीक्षण द्वारा पाया गया) की जांच की जाती है और अधिकतम मामलों में दूरी का यह अनुपात इस विशेष सीमा में रहता है।
चरण 11:
अंत में, ओपनसीवी में मैचशैप () फ़ंक्शन द्वारा फॉरवर्ड मोशन जेस्चर का विश्लेषण किया जाता है। यह फ़ंक्शन दो काउंटरों के आकार की तुलना करता है, इस मामले में, उपरोक्त चित्र में दाईं ओर प्रशिक्षण उदाहरण के बीच उपरोक्त छवि के बाईं ओर समोच्च के बीच। यह दो आकृति के आकार में मौजूद भिन्नता के अनुसार 0 से 2 या 3 के बीच का मान देता है। समान रूप से समान समोच्च के लिए, यह 0 देता है।
रिट = cv2.matchShapes(cnt1, cnt2, 1, 0.0)
यहाँ, cn1 और cnt2 दो आकृतियाँ हैं जिनकी तुलना की जानी है।
चरण 12: गति नियंत्रण:
पायसीरियल:
हमने Arduino USB केबल के माध्यम से Arduino Uno को संप्रेषित करने के लिए संसाधित डेटा को सीरियल डेटा में बदलने के लिए Python की PySerial लाइब्रेरी का उपयोग किया। एक बार ओपनसीवी द्वारा एक विशेष इशारा का पता चलने के बाद हमने एक अस्थायी चर 'x' बनाया और इसे कुछ अद्वितीय मान दिया और इसे निम्न कमांड लाइन का उपयोग करके सीरियल इनपुट में परिवर्तित कर दिया: -
सीरियल आयात करें #Pyserial पुस्तकालय आयात करने के लिए
serial. Serial('', baudrate = '9600', timeout = '0') # सीरियल आउटपुट सेट करना.. PORT NAME पोर्ट का नाम है जिसके द्वारा डेटा ट्रांसमिशन होगा।
serial.write(b'x') # x पोर्ट को भेजा जाने वाला अक्षर है…b इस स्ट्रिंग को बाइट्स में बदलना है।
Arduino प्रसंस्करण:
अब arduino को इस तरह से कोडित किया गया है कि प्रत्येक अलग सीरियल x को रोबोट की एक सुचारू गति के लिए जिम्मेदार कुछ क्रियाओं के लिए रैखिक रूप से मैप किया जाता है (कहते हैं कि बाएं इशारे का पता लगाने से बाएं मुड़ने के लिए मोटरों को ट्रिगर किया जाएगा)। हम कोड को ठीक से बदलकर प्रत्येक पहिये की गति को अनुवाद के साथ-साथ घूर्णी रूप से नियंत्रित कर सकते हैं।
L298N मोटर चालक:-
मोटर चालक का उपयोग मोटर और शक्ति स्रोत के बीच मध्यस्थ के रूप में किया जाता है क्योंकि कम वोल्टेज रेटिंग के कारण मोटर्स को सीधे संचालित नहीं किया जा सकता है। Li-Po बैटरी इसके 12V इनपुट टर्मिनल से जुड़ी है और हम arduino के 5V सॉकेट को मोटर ड्राइवर के 5V इनपुट सॉकेट से जोड़ते हैं, जो अंततः Li-Po के ग्राउंड को और साथ ही arduino को मोटर ड्राइवर के कॉमन ग्राउंड सॉकेट में जोड़ता है।
अब मोटर्स के टर्मिनल दिए गए सॉकेट से जुड़े हुए हैं। अंत में हम मोटर के लिए इनपुट टर्मिनलों को arduino के PWM आउटपुट सॉकेट से जोड़ते हैं, जिससे हमें गति के घूर्णी और अनुवाद पहलुओं को सटीक रूप से तय करने की अनुमति मिलती है।
सिफारिश की:
Arduino का उपयोग करते हुए जेस्चर नियंत्रित रोबोट: 7 चरण
Arduino का उपयोग करते हुए जेस्चर नियंत्रित रोबोट: निर्माण, सैन्य, निर्माण, संयोजन, आदि जैसे कई क्षेत्रों में रोबोट का उपयोग किया जाता है। रोबोट स्वायत्त या अर्ध-स्वायत्त हो सकते हैं। स्वायत्त रोबोटों को किसी मानवीय हस्तक्षेप की आवश्यकता नहीं होती है और वे स्थिति के अनुसार अपने आप कार्य कर सकते हैं। से
रास्पबेरी पाई के साथ इमेज प्रोसेसिंग: ओपनसीवी और इमेज कलर सेपरेशन स्थापित करना: 4 कदम
रास्पबेरी पाई के साथ इमेज प्रोसेसिंग: ओपनसीवी और इमेज कलर सेपरेशन स्थापित करना: यह पोस्ट कई इमेज प्रोसेसिंग ट्यूटोरियल्स में से पहला है जिसका पालन करना है। हम एक छवि बनाने वाले पिक्सेल पर करीब से नज़र डालते हैं, सीखते हैं कि रास्पबेरी पाई पर ओपनसीवी कैसे स्थापित करें और हम एक छवि को कैप्चर करने के लिए परीक्षण स्क्रिप्ट भी लिखते हैं और सी
स्कारा रोबोट: फॉरवर्ड और इनवर्स किनेमेटिक्स के बारे में सीखना !!! (प्लॉट ट्विस्ट प्रोसेसिंग का उपयोग करके ARDUINO में रीयल टाइम इंटरफ़ेस बनाना सीखें !!!!): 5 चरण (चित्रों के साथ)
स्कारा रोबोट: फॉरवर्ड और इनवर्स किनेमेटिक्स के बारे में सीखना !!! (प्लॉट ट्विस्ट लर्न हाउ हाउ टू मेक ए रियल टाइम इंटरफेस इन अर्डिनो इन प्रॉसेसिंग !!!!): एक स्कारा रोबोट उद्योग जगत में एक बहुत लोकप्रिय मशीन है। यह नाम सेलेक्टिव कंप्लेंट असेंबली रोबोट आर्म या सेलेक्टिव कंप्लेंट आर्टिकुलेटेड रोबोट आर्म दोनों के लिए है। यह मूल रूप से तीन डिग्री का स्वतंत्रता रोबोट है, पहले दो डिस्प्ले होने के नाते
Arduino आधारित गैर संपर्क इन्फ्रारेड थर्मामीटर - Arduino का उपयोग करते हुए IR आधारित थर्मामीटर: 4 चरण
Arduino आधारित गैर संपर्क इन्फ्रारेड थर्मामीटर | Arduino का उपयोग करते हुए IR आधारित थर्मामीटर: हाय दोस्तों इस निर्देश में हम arduino का उपयोग करके एक गैर संपर्क थर्मामीटर बनाएंगे। चूंकि कभी-कभी तरल / ठोस का तापमान बहुत अधिक होता है या कम होता है और फिर इसके साथ संपर्क बनाना और इसे पढ़ना कठिन होता है। तापमान तो उस दृश्य में
सर्वो मोटर्स का उपयोग करते हुए Arduino आधारित ह्यूमनॉइड रोबोट: 7 कदम (चित्रों के साथ)
सर्वो मोटर्स का उपयोग करते हुए Arduino आधारित ह्यूमनॉइड रोबोट: सभी को नमस्कार, यह मेरा पहला ह्यूमनॉइड रोबोट है, जिसे पीवीसी फोम शीट द्वारा बनाया गया है। यह विभिन्न मोटाई में उपलब्ध है। यहां, मैंने 0.5 मिमी का उपयोग किया। अभी यह रोबोट मेरे स्विच ऑन करने पर ही चल सकता है। अब मैं ब्लूटूथ के माध्यम से Arduino और Mobile को जोड़ने पर काम कर रहा हूं