हैंड ट्रैकिंग वास्तविक समय में किसी व्यक्ति के हाथ की गतिविधियों का पता लगाने और उसका पालन करने के लिए कंप्यूटर दृष्टि का उपयोग करने की प्रक्रिया है। हस्त ट्रैकिंग का सबसे प्रमुख अनुप्रयोग आभासी वास्तविकता हेडसेट में है। हेडसेट आपको स्पर्श नियंत्रकों के स्थान पर इनपुट के रूप में अपने हाथों का उपयोग करने की अनुमति देते हैं। यह बदले में अनुभव को और अधिक प्रभावशाली बनाता है।
कंप्यूटर दृष्टि के लिए Python, OpenCV और MediaPipe का उपयोग करके किसी व्यक्ति के हाथों को ट्रैक करने का तरीका जानें।
Google ने मीडियापाइप फ्रेमवर्क विकसित किया है, जिसमें कई मशीन-लर्निंग समाधान शामिल हैं। समाधानों में से एक हाथ और उंगली ट्रैकिंग समाधान है जिसे कहा जाता है मीडियापाइप हैंड्स. हाथों को ट्रैक करने के लिए, मीडियापाइप हैंड्स दो प्रक्रियाएं करता है: पाम डिटेक्शन और लैंडमार्क डिटेक्शन।
हाथ की हथेली का पता लगाना
मीडियापाइप इनपुट छवि में हथेलियों की पहचान करके शुरू होता है। चूँकि कड़ी वस्तुओं के लिए बाउंडिंग बॉक्स का अनुमान लगाना, संयुक्त उंगलियों से हाथों की पहचान करने की तुलना में सरल है।
हाथ स्थलों का पता लगाने
हथेली का पता लगाने के बाद, मीडियापाइप हाथ के लैंडमार्क का पता लगाता है। हैंड लैंडमार्क मॉडल प्रत्येक हैंड लैंडमार्क के स्थान के 21 सटीक निर्देशांक की भविष्यवाणी कर सकता है।
संख्याएँ प्रत्येक लैंडमार्क के लिए एक विशिष्ट पहचानकर्ता का प्रतिनिधित्व करती हैं।
अपने पर्यावरण की स्थापना
इस परियोजना का अनुसरण करने के लिए, आपको इससे परिचित होना चाहिए पायथन की मूल बातें. अपने परिवेश में निम्न लाइब्रेरी स्थापित करें:
- OpenCV: आप इस लाइब्रेरी का उपयोग कंप्यूटर विज़न के लिए और इनपुट इमेज पर इमेज प्रोसेसिंग तकनीकों को करने के लिए करेंगे।
- MediaPipe: आप इस लाइब्रेरी का उपयोग इनपुट छवि पर हाथ की पहचान और ट्रैकिंग करने के लिए करेंगे।
- imutils: आप इस लाइब्रेरी को इनपुट के वीडियो फ्रेम का आकार बदलने के लिए करेंगे।
OpenCV, MediaPipe और imutils लाइब्रेरी को स्थापित करने के लिए अपने टर्मिनल पर निम्न कमांड चलाएँ। पाइप स्थापित करें - पायथन पैकेज मैनेजर-अगर आप की जरूरत है। सुनिश्चित करें कि आप पुस्तकालयों को स्थान-सीमांकित सूची के रूप में पास करते हैं।
पाइप OpenCV-Python MediaPipe imutils स्थापित करें
जब अद्यतन पूरा हो जाता है तो पर्यावरण आपके लिए कोडिंग शुरू करने के लिए तैयार हो जाता है।
इस परियोजना के लिए पूर्ण स्रोत कोड इसके में उपलब्ध है गिटहब रिपॉजिटरी.
आवश्यक पुस्तकालयों का आयात करना
आपको अपने द्वारा स्थापित पुस्तकालयों को आयात करने की आवश्यकता होगी ताकि आप उनका उपयोग कर सकें। कोई भी खोलो पायथन आईडीई, एक Python फ़ाइल बनाएँ, और निम्नलिखित आयात जोड़ें:
आयात cv2
आयात mediapipe जैसा एमपी
आयात imutils
सुनिश्चित करें कि आप OpenCV को cv2 और MediaPipe के रूप में लोअरकेस में आयात करते हैं। ऐसा करने में विफल होने पर त्रुटि होगी।
आप मीडियापाइप हैंड्स सॉल्यूशन को कॉल करने के लिए mpHands का उपयोग करेंगे, और हैंड इनपुट का पता लगाने और ट्रैक करने के लिए हैंड्स ऑब्जेक्ट। आप पहचाने गए हाथों के स्थलों के बीच संबंध बनाने के लिए mpDraw ऑब्जेक्ट का उपयोग करेंगे।
mpHands = mp.solutions.hands
हाथ = mpHands. हाथ ()
mpDraw = mp.solutions.drawing_utils
Hands() कंस्ट्रक्टर को विभिन्न पैरामीटर पास करके आप मीडियापाइप हैंड मॉडल को फ़ाइन-ट्यून कर सकते हैं। इस परियोजना के लिए डिफ़ॉल्ट मान काफी अच्छे हैं, लेकिन आप उनके साथ प्रयोग करके देख सकते हैं कि वे मॉडल को कैसे प्रभावित करते हैं:
आपको छोड़ देना चाहिए स्टेटिक_इमेज_मोड असत्य के रूप में यह सुनिश्चित करने के लिए कि मॉडल उन्हें ट्रैक करना शुरू करने से पहले एक बार हाथों का पता लगा ले। यह केवल ट्रैकिंग प्रक्रिया को दोहराता है यदि पता लगाने का विश्वास घोषित पैरामीटर से कम हो जाता है, जिससे समग्र इनपुट प्रसंस्करण तेज हो जाता है।
हैंड ट्रैकिंग करना
हैंड ट्रैकिंग करने के लिए आपको तीन कार्यों की आवश्यकता होती है: एक इनपुट को प्रोसेस करने के लिए, एक हैंड लैंडमार्क कनेक्शन बनाने के लिए, और एक मुख्य फंक्शन प्रोग्राम फ्लो को नियंत्रित करने के लिए।
इनपुट प्रोसेसिंग फंक्शन
यह फ़ंक्शन इनपुट लेता है, इसे ग्रेस्केल में परिवर्तित करता है, और इनपुट में हाथों का पता लगाने और ट्रैक करने के लिए इसे मीडियापाइप हैंड्स मॉडल में भेजता है।
# इनपुट इमेज को प्रोसेस करना
डीईएफ़process_image(आईएमजी):
# इनपुट को ग्रेस्केल में बदलें
ग्रे_इमेज = सीवी2.सीवीटीकलर (आईएमजी, सीवी2.COLOR_BGR2RGB)
परिणाम = हाथ। प्रक्रिया (ग्रे_इमेज)
# पहचाने गए हाथों को कॉलिंग फंक्शन में लौटाना
वापस करना परिणाम
फ़ंक्शन परिणाम देता है कि इनपुट पर कोई पता चला हाथ थे या नहीं।
हाथ मील का पत्थर कनेक्शन आरेखण समारोह
यह फ़ंक्शन जांचता है कि इनपुट प्रोसेसिंग फ़ंक्शन ने किसी हाथ का पता लगाया है या नहीं। यदि किसी हाथ का पता चलता है, तो यह प्रत्येक लैंडमार्क पर लूप करता है और इसके चारों ओर एक घेरा बनाता है, लैंडमार्क का उपयोग करके ट्रैक करता है पायथन का गणना समारोह. इसके बाद यह मूल वीडियो इनपुट पर लैंडमार्क के बीच संबंध बनाता है।
# लैंडमार्क कनेक्शन बनाना
डीईएफ़draw_hand_connections(आईएमजी, परिणाम):
अगर results.multi_hand_landmarks:
के लिए हाथ एलएमएस में results.multi_hand_landmarks:
के लिए आईडी, एलएम में गणना (handLms.landmark):
एच, डब्ल्यू, सी = आईएमजी.शेप# प्रत्येक लैंडमार्क के निर्देशांक ढूँढना
सीएक्स, साइ = इंट (एलएम.एक्स * डब्ल्यू), इंट (एलएम.वाई * एच)# प्रत्येक लैंडमार्क आईडी और निर्देशांक प्रिंट करना
# टर्मिनल पर
प्रिंट (आईडी, सीएक्स, साइ)# प्रत्येक लैंडमार्क के चारों ओर एक घेरा बनाना
cv2.circle (आईएमजी, (सीएक्स, साइ), 10, (0, 255, 0),
cv2.FILLED)
# लैंडमार्क कनेक्शन खींचना
mpDraw.draw_landmarks (आईएमजी, handLms,
mpHands. हाथ_कनेक्शन)
वापस करना आईएमजी
समारोह प्रत्येक लैंडमार्क की परिक्रमा करके शुरू होता है:
यह फिर हाथ कनेक्शन खींचता है:
यह अंत में कॉलिंग फ़ंक्शन को अपना आउटपुट देता है।
मुख्य समारोह
एक मुख्य कार्य बनाएँ जो आपके कार्यक्रम के प्रवाह को नियंत्रित करेगा। यह इनपुट लेगा और आउटपुट की स्थिरता सुनिश्चित करने के लिए वीडियो फ्रेम का आकार बदल देगा। प्रोसेसिंग फ़ंक्शन के लिए इनपुट पास करें जो तब हाथों का पता लगाएगा और उन्हें ट्रैक करेगा। लौटाए गए परिणामों को हैंड लैंडमार्क कनेक्शन ड्राइंग फ़ंक्शन पर ले जाएं जो मूल वीडियो इनपुट पर कनेक्शन खींचेगा। यह अंत में उपयोगकर्ता को आउटपुट प्रदर्शित करेगा।
डीईएफ़मुख्य():
# a का उपयोग करने के लिए 0 को वीडियो पथ से बदलें
# प्री-रिकॉर्डेड वीडियो
टोपी = cv2.वीडियो कैप्चर (0)जबकिसत्य:
# इनपुट लेना
सफलता, छवि = कैप.रीड ()
छवि = imutils.resize (छवि, चौड़ाई =500, ऊंचाई =500)
परिणाम = प्रक्रिया_छवि (छवि)
draw_hand_connections (छवि, परिणाम)# आउटपुट प्रदर्शित करना
cv2.imshow ("हैंड ट्रैकर", छवि)
# q कुंजी दबाने पर प्रोग्राम समाप्त हो जाता है
अगर cv2.waitKey (1) == ऑर्ड ('क्यू'):
कैप.रिलीज़ ()
cv2.destroyAllWindows ()
अंतिम चरण आपका प्रोग्राम चला रहा है। नीचे दिया गया कोड सुनिश्चित करता है कि जब आप प्रोग्राम चलाते हैं, तो मुख्य कार्य पहले चलता है।
अगर __नाम__ == "__मुख्य__":
मुख्य()
जब प्रोग्राम चलता है, तो यह इस तरह से आउटपुट उत्पन्न करता है:
कार्यक्रम वास्तविक समय में हाथों को ट्रैक करता है।
इमर्सिव वर्चुअल रियलिटी के लिए हैंड ट्रैकिंग
वर्चुअल रियलिटी में हैंड ट्रैकिंग तकनीक को और अधिक आकर्षक बनाती है। वर्चुअल रियलिटी हेडसेट्स ने हैंड ट्रैकिंग की शुरुआत की है, जिससे आभासी दुनिया में बढ़ी हुई वास्तविकता की भावना आ रही है। हेडसेट उपयोगकर्ता को वर्चुअल हाथ का उपयोग करके कमांड इनपुट करने की अनुमति देता है।
वर्चुअल हैडसेट में हैंड ट्रैकिंग इस तकनीक का केवल एक अनुप्रयोग है। आप अपनी पसंद के किसी भी लागू क्षेत्र में हैंड ट्रैकिंग शामिल कर सकते हैं।