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

थंब्स अप का इशारा करते हुए हाथ की इमेज, जिसे मॉडल ने 63% भरोसे के साथ थंब्स अप के तौर पर पहचाना है

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

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

इसे आज़माएं!

शुरू करें

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

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

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

सुविधाएं

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

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

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

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

IMAGE: एक इमेज इनपुट के लिए मोड.

वीडियो: किसी वीडियो के डिकोड किए गए फ़्रेम के लिए मोड.

LIVE_STREAM: कैमरे से मिले इनपुट डेटा की लाइव स्ट्रीम के लिए मोड. इस मोड में, नतीजे असींक्रोनस तरीके से पाने के लिए, एक listener सेट अप करने के लिए, 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 का इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, जेस्चर रिकॉग्निज़र के लिए मॉडल को पसंद के मुताबिक बनाना पेज देखें.

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

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

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

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

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

    जेस्चर की पहचान करने वाले मॉडल का बंडल

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

    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 मिलीसेकंड

    कस्टम मॉडल

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

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