MediaPipe के जेस्चर आइडेंटिफ़ायर टास्क से आपको रीयल टाइम में, हाथ के जेस्चर की पहचान करने में मदद मिलती है. हाथ के जेस्चर से जुड़े नतीजे और हाथ के लैंडमार्क की मदद से, हाथों की पहचान हुई है. ये निर्देश आपको जेस्चर आइडेंटिफ़ायर को इस्तेमाल करने का तरीका बताते हैं वेब और JavaScript ऐप्लिकेशन के लिए.
आप डेमो के लिए उपलब्ध है. क्षमताओं, मॉडल, और कॉन्फ़िगरेशन के विकल्पों के बारे में ज़्यादा जानकारी पाने के लिए इस टास्क की खास जानकारी देखें.
कोड का उदाहरण
जेस्चर आइडेंटिफ़ायर के लिए दिया गया उदाहरण कोड इसे पूरी तरह लागू करता है आपके संदर्भ के लिए JavaScript में टास्क. यह कोड, इस टास्क की जांच करने और यह पाने में आपकी मदद करता है ने अपना जेस्चर पहचानने वाला ऐप बनाना शुरू कर दिया है. आपके पास रिपोर्ट को देखने, चलाने, और जेस्चर आइडेंटिफ़ायर के उदाहरण कोड में बदलाव करना बस अपने वेब ब्राउज़र का इस्तेमाल करके.
सेटअप
इस सेक्शन में, डेवलपमेंट एनवायरमेंट को सेट अप करने के मुख्य चरणों के बारे में बताया गया है खास तौर पर, जेस्चर आइडेंटिफ़ायर का इस्तेमाल करें. इस पर सामान्य जानकारी के लिए वेब और JavaScript डेवलपमेंट एनवायरमेंट को सेट अप करना. इसमें ये भी शामिल हैं प्लैटफ़ॉर्म वर्शन की ज़रूरी शर्तें पूरी करते हैं. इसके बारे में ज़्यादा जानने के लिए, वेब के लिए सेटअप गाइड.
JavaScript पैकेज
जेस्चर आइडेंटिफ़ायर कोड MediaPipe @mediapipe/tasks-vision
के ज़रिए उपलब्ध होता है
NPM पैकेज. आप
इस प्लैटफ़ॉर्म में दिए गए निर्देशों का पालन करके, इन लाइब्रेरी को खोजा और डाउनलोड किया जा सकता है
सेटअप गाइड.
एनपीएम की मदद से, ज़रूरी पैकेज इंस्टॉल किए जा सकते हैं ऐसा करने के लिए:
npm install @mediapipe/tasks-vision
अगर आपको कॉन्टेंट डिलीवरी नेटवर्क (सीडीएन) के ज़रिए टास्क कोड को इंपोर्ट करना हो
सेवा है, तो अपनी एचटीएमएल फ़ाइल के <head>
टैग में यह कोड जोड़ें:
<!-- You can replace JSDeliver with another CDN if you prefer to -->
<head>
<script src="https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision/vision_bundle.js"
crossorigin="anonymous"></script>
</head>
मॉडल
MediaPipe जेस्चर आइडेंटिफ़ायर टास्क के लिए, एक प्रशिक्षित मॉडल की ज़रूरत होती है, जो इसके साथ काम कर सके टास्क. जेस्चर आइडेंटिफ़ायर के लिए तैयार किए गए उपलब्ध मॉडल के बारे में ज़्यादा जानकारी के लिए देखें टास्क की खास जानकारी मॉडल सेक्शन.
मॉडल चुनें और डाउनलोड करें, और फिर उसे अपनी प्रोजेक्ट डायरेक्ट्री में सेव करें:
<dev-project-root>/app/shared/models/
टास्क बनाएं
इन कामों के लिए, जेस्चर आइडेंटिफ़ायर createFrom...()
फ़ंक्शन में से किसी एक का इस्तेमाल करें
अनुमान लगाने के लिए टास्क तैयार करें. createFromModelPath()
का इस्तेमाल करना
फ़ंक्शन के लिए तैयार मॉडल फ़ाइल के रिलेटिव या ऐब्सलूट पाथ का इस्तेमाल करें.
अगर आपका मॉडल पहले से ही मेमोरी में लोड हो, तो
createFromModelBuffer()
तरीका.
नीचे दिए गए कोड उदाहरण में, createFromOptions()
फ़ंक्शन का इस्तेमाल करने के बारे में बताया गया है
टास्क सेट अप करना. createFromOptions
फ़ंक्शन की मदद से,
कॉन्फ़िगरेशन विकल्पों के साथ जेस्चर आइडेंटिफ़ायर. कॉन्फ़िगरेशन के बारे में ज़्यादा जानकारी पाने के लिए
विकल्पों के लिए, कॉन्फ़िगरेशन के विकल्प देखें.
नीचे दिया गया कोड, कस्टम टेंप्लेट की मदद से टास्क बनाने और कॉन्फ़िगर करने का तरीका बताता है विकल्प:
// Create task for image file processing:
const vision = await FilesetResolver.forVisionTasks(
// path/to/wasm/root
"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest/wasm "
);
const gestureRecognizer = await GestureRecognizer.createFromOptions(vision, {
baseOptions: {
modelAssetPath: "https://storage.googleapis.com/mediapipe-tasks/gesture_recognizer/gesture_recognizer.task"
},
numHands: 2
});
कॉन्फ़िगरेशन विकल्प
इस टास्क में वेब ऐप्लिकेशन के लिए, नीचे दिए गए कॉन्फ़िगरेशन के विकल्प मौजूद हैं:
विकल्प का नाम | ब्यौरा | मान की सीमा | डिफ़ॉल्ट मान |
---|---|---|---|
runningMode |
टास्क के लिए रनिंग मोड सेट करता है. दो
मोड: अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है इमेज: सिंगल इमेज इनपुट का मोड. अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है वीडियो: किसी वीडियो के डिकोड किए गए फ़्रेम के लिए मोड या इनपुट डेटा की लाइव स्ट्रीम, जैसे कि कैमरे से ली गई हो. |
{IMAGE, VIDEO } |
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"] हैं |
|
|
custom_gestures_classifier_options |
कस्टम जेस्चर की कैटगरी तय करने वाले व्यवहार को कॉन्फ़िगर करने के विकल्प. |
|
|
डेटा तैयार करें
जेस्चर आइडेंटिफ़ायर, इमेज में दिए गए जेस्चर की पहचान कर सकता है. यह सुविधा, इन जेस्चर के साथ काम करती है: होस्ट ब्राउज़र. यह टास्क, डेटा इनपुट की प्री-प्रोसेसिंग को भी मैनेज करता है. इसमें ये शामिल हैं साइज़ बदलना, रोटेशन, और वैल्यू नॉर्मलाइज़ेशन. वीडियो में हाथ के जेस्चर को पहचानने के लिए, एक बार में एक फ़्रेम को तेज़ी से प्रोसेस करने के लिए, एपीआई का इस्तेमाल किया जा सकता है. इसके लिए, फ़्रेम का इस्तेमाल करें.
टास्क को पूरा करें
जेस्चर आइडेंटिफ़ायर, recognize()
(रनिंग मोड 'image'
के साथ) का इस्तेमाल करता है और
ट्रिगर करने के लिए, recognizeForVideo()
(रनिंग मोड 'video'
की मदद से) तरीके
अनुमान. टास्क, डेटा को प्रोसेस करता है और हाथ की पहचान करने की कोशिश करता है
संकेत देता है और फिर परिणामों की रिपोर्ट करता है.
नीचे दिया गया कोड बताता है कि टास्क मॉडल की मदद से प्रोसेसिंग कैसे लागू की जाती है:
इमेज
const image = document.getElementById("image") as HTMLImageElement; const gestureRecognitionResult = gestureRecognizer.recognize(image);
वीडियो
await gestureRecognizer.setOptions({ runningMode: "video" }); let lastVideoTime = -1; function renderLoop(): void { const video = document.getElementById("video"); if (video.currentTime !== lastVideoTime) { const gestureRecognitionResult = gestureRecognizer.recognizeForVideo(video); processResult(gestureRecognitionResult); lastVideoTime = video.currentTime; } requestAnimationFrame(() => { renderLoop(); }); }
जेस्चर आइडेंटिफ़ायर पर recognize()
और recognizeForVideo()
तरीके से कॉल करने की सुविधा चालू है
साथ ही, यूज़र इंटरफ़ेस थ्रेड को ब्लॉक भी कर सकता है. अगर आपको Google Assistant की मदद से
वीडियो फ़्रेम सेट अप करते हैं, तो हर पहचान मुख्य इमेज को
थ्रेड. इसे रोकने के लिए वेब वर्कर लागू करके
किसी दूसरी थ्रेड में, recognize()
और recognizeForVideo()
तरीके.
जेस्चर आइडेंटिफ़ायर टास्क को चलाने की पूरी प्रोसेस के बारे में जानने के लिए, देखें कोड का उदाहरण.
नतीजों को हैंडल करना और दिखाना
जेस्चर आइडेंटिफ़ायर हर उपयोगकर्ता के लिए, जेस्चर की पहचान करने वाला नतीजा ऑब्जेक्ट जनरेट करता है पहचान करने के लिए इस्तेमाल किया जाता है. नतीजे के तौर पर दिखाए गए ऑब्जेक्ट में इमेज के निर्देशांकों में, हाथ के लैंडमार्क शामिल हैं, विश्व के निर्देशांकों में हैंड लैंडमार्क, किसी हाथ के इस्तेमाल(बायां/दायां हाथ), और हाथ पहचाने गए हाथों के जेस्चर की कैटगरी.
इस टास्क के आउटपुट डेटा का एक उदाहरण नीचे दिया गया है:
नतीजे में मिले GestureRecognizerResult
में चार कॉम्पोनेंट होते हैं और हर कॉम्पोनेंट एक कलेक्शन होता है. इसमें हर एलिमेंट में एक हाथ की पहचान होने पर मिला नतीजा शामिल होता है.
किसी खास हाथ का इस्तेमाल
किसी हाथ के काम से पता चलता है कि जिस हाथ की पहचान की गई है वह बाएं हाथ है या दाएं.
हाथ के जेस्चर
पहचाने गए हाथ के जेस्चर की कैटगरी.
लैंडमार्क
यहां 21 हाथ से बने लैंडमार्क हैं, जिनमें से हर एक में
x
,y
, औरz
निर्देशांक हैं. कॉन्टेंट बनानेx
औरy
कोऑर्डिनेट, इमेज की चौड़ाई के हिसाब से [0.0, 1.0] के लिए नॉर्मलाइज़ किए जाते हैं और उंचाई करता है.z
निर्देशांक लैंडमार्क की गहराई दिखाता है. इसमें कलाई पर मौजूद गहराई से इसका पता लगाया जा सकता है. वैल्यू जितनी कम होगी, वैल्यू उतनी ही कम होगी लैंडमार्क को कैमरे के सामने रखा जाता है.z
की तीव्रताx
.विश्व भू-स्थल
21 हाथ के लैंडमार्क को भी दुनिया के निर्देशांकों में दिखाया गया है. हर लैंडमार्क
x
,y
, औरz
से मिलकर बना है, जो वास्तविक दुनिया के 3D निर्देशांक दिखाता है मीटर.
GestureRecognizerResult:
Handedness:
Categories #0:
index : 0
score : 0.98396
categoryName : Left
Gestures:
Categories #0:
score : 0.76893
categoryName : Thumb_Up
Landmarks:
Landmark #0:
x : 0.638852
y : 0.671197
z : -3.41E-7
Landmark #1:
x : 0.634599
y : 0.536441
z : -0.06984
... (21 landmarks for a hand)
WorldLandmarks:
Landmark #0:
x : 0.067485
y : 0.031084
z : 0.055223
Landmark #1:
x : 0.063209
y : -0.00382
z : 0.020920
... (21 world landmarks for a hand)
इन इमेज में, टास्क के आउटपुट का विज़ुअलाइज़ेशन दिखाया गया है:
जेस्चर आइडेंटिफ़ायर टास्क को बेहतर तरीके से लागू करने के लिए, देखें कोड का उदाहरण.