जेस्चर की पहचान करने के लिए टास्क गाइड

थंब्स अप का इशारा करते हुए हाथ की इमेज. मॉडल ने इसे थंब्स अप का इशारा माना है. इसकी कॉन्फ़िडेंस रेटिंग 63% है

MediaPipe Gesture Recognizer टास्क की मदद से, हाथ के जेस्चर को रीयल टाइम में पहचाना जा सकता है. साथ ही, पहचाने गए हाथ के जेस्चर के नतीजे और पहचाने गए हाथों के लैंडमार्क मिलते हैं. इस टास्क का इस्तेमाल करके, किसी व्यक्ति के हाथ के खास जेस्चर (हाव-भाव) की पहचान की जा सकती है. साथ ही, उन जेस्चर से जुड़ी ऐप्लिकेशन की सुविधाओं को चालू किया जा सकता है.

यह टास्क, मशीन लर्निंग (एमएल) मॉडल के साथ इमेज डेटा पर काम करता है. साथ ही, यह स्टैटिक डेटा या लगातार स्ट्रीम होने वाले डेटा को स्वीकार करता है. इस टास्क से, इमेज के कोऑर्डिनेट में हाथ के लैंडमार्क, दुनिया के कोऑर्डिनेट में हाथ के लैंडमार्क, हाथ के इस्तेमाल की प्राथमिकता (बाएं/दाएं हाथ) के साथ-साथ एक से ज़्यादा हाथों के जेस्चर की कैटगरी का पता चलता है.

इसे आज़माएं!

शुरू करें

अपने टारगेट प्लैटफ़ॉर्म के लिए, लागू करने से जुड़ी इन गाइड में से किसी एक का पालन करके, इस टास्क का इस्तेमाल शुरू करें. इन प्लैटफ़ॉर्म के हिसाब से बनी गाइड में, इस टास्क को लागू करने का बुनियादी तरीका बताया गया है. इसमें सुझाए गए मॉडल का इस्तेमाल किया गया है. साथ ही, सुझाए गए कॉन्फ़िगरेशन विकल्पों के साथ कोड के उदाहरण दिए गए हैं:

टास्क की जानकारी

इस सेक्शन में, इस टास्क की क्षमताओं, इनपुट, आउटपुट, और कॉन्फ़िगरेशन के विकल्पों के बारे में बताया गया है.

सुविधाएं

  • इनपुट इमेज प्रोसेसिंग - प्रोसेसिंग में इमेज को घुमाना, उसका साइज़ बदलना, सामान्य करना, और कलर स्पेस बदलना शामिल है.
  • स्कोर थ्रेशोल्ड - अनुमानित स्कोर के आधार पर नतीजों को फ़िल्टर करें.
  • लेबल की अनुमति वाली सूची और ब्लॉकलिस्ट - मॉडल से पहचाने जाने वाले जेस्चर की कैटगरी तय करें.
टास्क के इनपुट टास्क के आउटपुट
जेस्चर रिकॉग्नाइज़र, इनमें से किसी एक डेटा टाइप का इनपुट स्वीकार करता है:
  • स्टिल इमेज
  • डिकोड किए गए वीडियो फ़्रेम
  • लाइव वीडियो फ़ीड
Gesture Recognizer, ये नतीजे दिखाता है:
  • हाथ के जेस्चर की कैटगरी
  • हाथों की पहचान की गई
  • इमेज के निर्देशांकों में, पहचाने गए हाथों के लैंडमार्क
  • दुनिया के निर्देशांकों में, हाथ के लैंडमार्क का पता चला

कॉन्फ़िगरेशन के विकल्प

इस टास्क के लिए, कॉन्फ़िगरेशन के ये विकल्प उपलब्ध हैं:

विकल्प का नाम ब्यौरा वैल्यू की सीमा डिफ़ॉल्ट मान
running_mode यह कुकी, टास्क के रनिंग मोड को सेट करती है. इसके तीन मोड होते हैं:

IMAGE: यह मोड, एक इमेज वाले इनपुट के लिए होता है.

VIDEO: यह वीडियो के डिकोड किए गए फ़्रेम का मोड है.

LIVE_STREAM: यह इनपुट डेटा की लाइव स्ट्रीम का मोड है. जैसे, कैमरे से मिलने वाला डेटा. इस मोड में, एसिंक्रोनस तरीके से नतीजे पाने के लिए, resultListener को कॉल करना ज़रूरी है, ताकि नतीजे पाने के लिए लिसनर सेट अप किया जा सके.
{IMAGE, VIDEO, LIVE_STREAM} IMAGE
num_hands GestureRecognizer की मदद से, ज़्यादा से ज़्यादा हाथों का पता लगाया जा सकता है. Any integer > 0 1
min_hand_detection_confidence हथेली का पता लगाने वाले मॉडल में, हाथ का पता लगाने की सुविधा के लिए कम से कम कॉन्फ़िडेंस स्कोर. 0.0 - 1.0 0.5
min_hand_presence_confidence हाथ के लैंडमार्क का पता लगाने वाले मॉडल में, हाथ के मौजूद होने के स्कोर का कम से कम कॉन्फ़िडेंस स्कोर. हाथ के जेस्चर पहचानने वाले मॉडल के वीडियो मोड और लाइव स्ट्रीम मोड में, अगर हाथ के लैंडमार्क मॉडल से मिला हाथ की मौजूदगी का कॉन्फ़िडेंस स्कोर, इस थ्रेशोल्ड से कम है, तो यह पाम डिटेक्शन मॉडल को ट्रिगर करता है. ऐसा न होने पर, हाथ की ट्रैकिंग करने वाले हल्के एल्गोरिदम का इस्तेमाल किया जाता है. इससे, हाथ की जगह का पता लगाया जाता है, ताकि बाद में लैंडमार्क का पता लगाया जा सके. 0.0 - 1.0 0.5
min_tracking_confidence हाथ के मूवमेंट को ट्रैक करने की सुविधा के लिए, कम से कम कॉन्फ़िडेंस स्कोर. यह मौजूदा फ़्रेम और पिछले फ़्रेम में मौजूद हाथों के बीच बाउंडिंग बॉक्स IoU थ्रेशोल्ड है. अगर जेस्चर पहचान करने वाले टूल के वीडियो मोड और स्ट्रीम मोड में ट्रैकिंग नहीं हो पाती है, तो जेस्चर पहचान करने वाला टूल, हाथ का पता लगाने की सुविधा को ट्रिगर करता है. ऐसा न होने पर, हाथ के जेस्चर (हाव-भाव) की पहचान करने की सुविधा काम नहीं करती. 0.0 - 1.0 0.5
canned_gestures_classifier_options कैन किए गए जेस्चर क्लासिफ़ायर के व्यवहार को कॉन्फ़िगर करने के विकल्प. पहले से तैयार जेस्चर ["None", "Closed_Fist", "Open_Palm", "Pointing_Up", "Thumb_Down", "Thumb_Up", "Victory", "ILoveYou"]
हैं
  • डिसप्ले नेम की स्थान-भाषा: अगर TFLite मॉडल मेटाडेटा के ज़रिए डिसप्ले नेम तय किए गए हैं, तो उनके लिए इस्तेमाल की जाने वाली स्थान-भाषा.
  • ज़्यादा से ज़्यादा नतीजे: क्लासिफ़िकेशन के सबसे ज़्यादा स्कोर वाले नतीजों की ज़्यादा से ज़्यादा संख्या. अगर वैल्यू < 0 है, तो सभी उपलब्ध नतीजे दिखाए जाएंगे.
  • स्कोर थ्रेशोल्ड: यह वह स्कोर होता है जिससे कम स्कोर वाले नतीजों को अस्वीकार कर दिया जाता है. इसे 0 पर सेट करने पर, सभी उपलब्ध नतीजे दिखाए जाएंगे.
  • कैटगरी की अनुमति वाली सूची: कैटगरी के नामों की अनुमति वाली सूची. अगर यह सेट खाली नहीं है, तो कैटगरी में शामिल नहीं किए गए क्लासिफ़िकेशन के नतीजों को फ़िल्टर कर दिया जाएगा. यह डेनायल लिस्ट के साथ म्यूचुअली एक्सक्लूसिव है.
  • कैटगरी की ब्लॉकलिस्ट: इसमें कैटगरी के नामों की ब्लॉकलिस्ट होती है. अगर यह सेट खाली नहीं है, तो इस सेट में मौजूद कैटगरी वाले क्लासिफ़िकेशन के नतीजों को फ़िल्टर कर दिया जाएगा. यह सुविधा, अनुमति वाली सूची के साथ काम नहीं करती.
    • डिसप्ले नेम की स्थान-भाषा: any string
    • ज़्यादा से ज़्यादा नतीजे: any integer
    • स्कोर थ्रेशोल्ड: 0.0-1.0
    • कैटगरी की अनुमति वाली सूची: vector of strings
    • कैटगरी की ब्लॉकलिस्ट: vector of strings
    • डिसप्ले नेम की स्थान-भाषा: "en"
    • ज़्यादा से ज़्यादा नतीजे: -1
    • स्कोर थ्रेशोल्ड: 0
    • कैटगरी की अनुमति वाली सूची: खाली है
    • कैटगरी की ब्लॉकलिस्ट: खाली है
    custom_gestures_classifier_options कस्टम जेस्चर क्लासिफ़ायर के व्यवहार को कॉन्फ़िगर करने के विकल्प.
  • डिसप्ले नेम की स्थान-भाषा: अगर TFLite मॉडल मेटाडेटा के ज़रिए डिसप्ले नेम तय किए गए हैं, तो उनके लिए इस्तेमाल की जाने वाली स्थान-भाषा.
  • ज़्यादा से ज़्यादा नतीजे: क्लासिफ़िकेशन के सबसे ज़्यादा स्कोर वाले नतीजों की ज़्यादा से ज़्यादा संख्या. अगर वैल्यू < 0 है, तो सभी उपलब्ध नतीजे दिखाए जाएंगे.
  • स्कोर थ्रेशोल्ड: यह वह स्कोर होता है जिससे कम स्कोर वाले नतीजों को अस्वीकार कर दिया जाता है. इसे 0 पर सेट करने पर, सभी उपलब्ध नतीजे दिखाए जाएंगे.
  • कैटगरी की अनुमति वाली सूची: कैटगरी के नामों की अनुमति वाली सूची. अगर यह सेट खाली नहीं है, तो कैटगरी में शामिल नहीं किए गए क्लासिफ़िकेशन के नतीजों को फ़िल्टर कर दिया जाएगा. यह डेनायल लिस्ट के साथ म्यूचुअली एक्सक्लूसिव है.
  • कैटगरी की ब्लॉकलिस्ट: इसमें कैटगरी के नामों की ब्लॉकलिस्ट होती है. अगर यह सेट खाली नहीं है, तो इस सेट में मौजूद कैटगरी वाले क्लासिफ़िकेशन के नतीजों को फ़िल्टर कर दिया जाएगा. यह सुविधा, अनुमति वाली सूची के साथ काम नहीं करती.
    • डिसप्ले नेम की स्थान-भाषा: any string
    • ज़्यादा से ज़्यादा नतीजे: any integer
    • स्कोर थ्रेशोल्ड: 0.0-1.0
    • कैटगरी की अनुमति वाली सूची: vector of strings
    • कैटगरी की ब्लॉकलिस्ट: vector of strings
    • डिसप्ले नेम की स्थान-भाषा: "en"
    • ज़्यादा से ज़्यादा नतीजे: -1
    • स्कोर थ्रेशोल्ड: 0
    • कैटगरी की अनुमति वाली सूची: खाली है
    • कैटगरी की ब्लॉकलिस्ट: खाली है
    result_callback यह फ़ंक्शन, नतीजे सुनने वाले को सेट करता है, ताकि वह जेस्चर पहचानने वाले टूल के लाइव स्ट्रीम मोड में होने पर, क्लासिफ़िकेशन के नतीजे एसिंक्रोनस तरीके से पा सके. इस सेटिंग का इस्तेमाल सिर्फ़ तब किया जा सकता है, जब रनिंग मोड को LIVE_STREAM पर सेट किया गया हो ResultListener लागू नहीं लागू नहीं

    मॉडल

    हाथ के जेस्चर पहचानने वाला टूल, मॉडल बंडल का इस्तेमाल करता है. इसमें पहले से पैक किए गए दो मॉडल बंडल होते हैं: हाथ के लैंडमार्क मॉडल बंडल और जेस्चर क्लासिफ़िकेशन मॉडल बंडल. लैंडमार्क मॉडल, हाथों की मौजूदगी और उनकी ज्यामिति का पता लगाता है. वहीं, जेस्चर पहचानने वाला मॉडल, हाथों की ज्यामिति के आधार पर जेस्चर की पहचान करता है.

    मॉडल का नाम इनपुट शेप क्वांटाइज़ेशन टाइप मॉडल कार्ड वर्शन
    HandGestureClassifier 192 x 192, 224 x 224 फ़्लोट 16 info सबसे नया

    इस टास्क में, Model Maker का इस्तेमाल करके मॉडल बंडल में बदलाव करने की सुविधा भी मिलती है. इस टास्क के लिए मॉडल को पसंद के मुताबिक बनाने के लिए, Model Maker का इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, Gesture Recognizer के लिए मॉडल को पसंद के मुताबिक बनाएं पेज देखें.

    हाथ के लैंडमार्क मॉडल बंडल

    हाथ के लैंडमार्क मॉडल बंडल की मदद से, हाथ के 21 पोर के कोऑर्डिनेट का पता लगाया जाता है. इस मॉडल को करीब 30 हज़ार असल दुनिया की इमेज पर ट्रेन किया गया था. साथ ही, इसे कई रेंडर किए गए सिंथेटिक हैंड मॉडल पर भी ट्रेन किया गया था. इन मॉडल को अलग-अलग बैकग्राउंड पर लगाया गया था. यहां 21 लैंडमार्क की परिभाषा दी गई है:

    हाथ के खास लैंडमार्क पॉइंट के लिए कोड

    हाथ के लैंडमार्क की पहचान करने वाले मॉडल बंडल में, हथेली की पहचान करने वाला मॉडल और हाथ के लैंडमार्क की पहचान करने वाला मॉडल शामिल होता है. हथेली का पता लगाने वाला मॉडल, पूरी इनपुट इमेज में हाथों की जगह का पता लगाता है. वहीं, हाथ के लैंडमार्क का पता लगाने वाला मॉडल, हथेली का पता लगाने वाले मॉडल से तय की गई, हाथ की काटी गई इमेज पर लैंडमार्क ढूंढता है.

    हथेली का पता लगाने वाले मॉडल को काम करने में ज़्यादा समय लगता है. इसलिए, वीडियो मोड या लाइव स्ट्रीम मोड में, Gesture Recognizer, मौजूदा फ़्रेम में हाथ के पहचाने गए लैंडमार्क से तय किए गए बाउंडिंग बॉक्स का इस्तेमाल करता है. इससे अगले फ़्रेम में हाथों की जगह का पता लगाया जा सकता है. इससे, Gesture Recognizer के पाम डिटेक्शन मॉडल को ट्रिगर करने की संख्या कम हो जाती है. जब हाथ के लैंडमार्क मॉडल को ज़रूरी संख्या में हाथों की मौजूदगी का पता नहीं चलता या हाथ को ट्रैक करने में समस्या आती है, तब हथेली का पता लगाने वाले मॉडल को हाथों का फिर से पता लगाने के लिए शुरू किया जाता है.

    हाथ के जेस्चर को क्लासिफ़ाई करने वाले मॉडल का बंडल

    हाथ के जेस्चर को पहचानने वाला मॉडल बंडल, हाथ के इन सामान्य जेस्चर को पहचान सकता है:

    0 - Unrecognized gesture, label: Unknown
    1 - Closed fist, label: Closed_Fist
    2 - Open palm, label: Open_Palm
    3 - Pointing up, label: Pointing_Up
    4 - Thumbs down, label: Thumb_Down
    5 - Thumbs up, label: Thumb_Up
    6 - Victory, label: Victory
    7 - Love, label: ILoveYou
    

    अगर मॉडल को हाथ दिखते हैं, लेकिन वह किसी जेस्चर की पहचान नहीं कर पाता है, तो जेस्चर पहचान करने वाला टूल "कोई नहीं" नतीजा दिखाता है. अगर मॉडल को हाथ नहीं मिलते हैं, तो जेस्चर पहचानने वाला टूल, खाली वैल्यू दिखाता है.

    हाथ के जेस्चर को क्लासिफ़ाई करने वाले मॉडल बंडल में, दो चरणों वाला न्यूरल नेटवर्क पाइपलाइन होता है. इसमें, जेस्चर एम्बेडिंग मॉडल के बाद जेस्चर क्लासिफ़िकेशन मॉडल होता है. ज़्यादा जानकारी के लिए, हाथ के जेस्चर को क्लासिफ़ाई करने वाले मॉडल का कार्ड देखें.

    हाथ के जेस्चर को एंबेड करने वाला मॉडल, इमेज की सुविधाओं को फ़ीचर वेक्टर में बदलता है. साथ ही, क्लासिफ़िकेशन मॉडल एक लाइटवेट जेस्चर क्लासिफ़ायर है, जो फ़ीचर वेक्टर को इनपुट के तौर पर लेता है. हाथ के जेस्चर को पहचानने वाले मॉडल बंडल में, पहले से तय किए गए जेस्चर को पहचानने वाला क्लासिफ़ायर शामिल होता है. यह ऊपर बताए गए, हाथ के सात सामान्य जेस्चर का पता लगाता है. कस्टम जेस्चर क्लासिफ़ायर को ट्रेन करके, मॉडल बंडल को ज़्यादा जेस्चर पहचानने के लिए बढ़ाया जा सकता है. ज़्यादा जानकारी के लिए, कस्टम मॉडल सेक्शन देखें.

    कैन किए गए जेस्चर क्लासिफ़ायर और कस्टम जेस्चर क्लासिफ़ायर, दोनों के साथ जेस्चर पहचान करने वाला टूल, कस्टम जेस्चर को प्राथमिकता देता है. ऐसा तब होता है, जब दोनों क्लासिफ़ायर अपनी-अपनी कैटगरी में एक ही जेस्चर को पहचानते हैं. अगर सिर्फ़ एक जेस्चर क्लासिफ़ायर, जेस्चर की पहचान करता है, तो जेस्चर पहचान करने वाला टूल, पहचाने गए जेस्चर को सीधे तौर पर आउटपुट करता है.

    टास्क के बेंचमार्क

    यहां ऊपर दिए गए प्री-ट्रेन किए गए मॉडल के आधार पर, पूरी पाइपलाइन के लिए टास्क के बेंचमार्क दिए गए हैं. लेटेंसी का नतीजा, सीपीयू / जीपीयू का इस्तेमाल करके Pixel 6 पर औसत लेटेंसी है.

    मॉडल का नाम सीपीयू का इंतज़ार का समय जीपीयू का इंतज़ार का समय
    GestureRecognizer 16.76 मि॰से॰ 20.87 मि॰से॰

    कस्टम मॉडल

    अगर आपको इस टास्क में दिए गए मॉडल की क्षमताओं को बेहतर बनाना है या उनमें बदलाव करना है, तो मौजूदा मॉडल में बदलाव करने के लिए Model Maker का इस्तेमाल करें. MediaPipe के साथ इस्तेमाल किए जाने वाले कस्टम मॉडल, .task फ़ॉर्मैट में होने चाहिए. यह एक मॉडल बंडल फ़ाइल होती है. आपको इस टास्क के लिए, दिए गए मॉडल में बदलाव करने के लिए Model Maker का इस्तेमाल करना चाहिए. इसके बाद, आपको अपना मॉडल बनाना चाहिए.

    इस टास्क के लिए मॉडल को पसंद के मुताबिक बनाने के बारे में ज़्यादा जानने के लिए, हाथ के जेस्चर पहचानने वाले मॉडल को पसंद के मुताबिक बनाना लेख पढ़ें.