MediaPipe के जेस्चर आइडेंटिफ़ायर टास्क से आपको रीयल टाइम में, हाथ के जेस्चर की पहचान करने में मदद मिलती है. पहचाने गए हाथ के जेस्चर से जुड़े नतीजे और हाथ के लैंडमार्क की जानकारी देता है हाथ. ये निर्देश आपको जेस्चर आइडेंटिफ़ायर को इस्तेमाल करने का तरीका बताते हैं Python ऐप्लिकेशन के साथ काम करता है.
वेब पर, इस टास्क को काम करते हुए देखा जा सकता है डेमो इसके लिए इसकी क्षमताओं, मॉडल, और कॉन्फ़िगरेशन विकल्पों के बारे में ज़्यादा जानकारी इस टास्क के लिए, खास जानकारी देखें.
कोड का उदाहरण
जेस्चर आइडेंटिफ़ायर के लिए दिया गया उदाहरण कोड इसे पूरी तरह लागू करता है Python में आज़माएं. यह कोड, इस टास्क की जांच करने और यह पाने में आपकी मदद करता है ने अपने हाथ के जेस्चर आइडेंटिफ़ायर की शुरुआत की है. आपके पास रिपोर्ट को देखने, चलाने, और जेस्चर आइडेंटिफ़ायर के उदाहरण में बदलाव करें कोड बस अपने वेब ब्राउज़र का इस्तेमाल करके.
अगर आप Raspberry Pi के लिए जेस्चर आइडेंटिफ़ायर का इस्तेमाल कर रहे हैं, तो Raspberry Pi का उदाहरण ऐप्लिकेशन है.
सेटअप
इस सेक्शन में, आपके डेवलपमेंट एनवायरमेंट को सेट अप करने और कोड प्रोजेक्ट को खास तौर पर, जेस्चर आइडेंटिफ़ायर का इस्तेमाल करने के लिए किया जाता है. इस पर सामान्य जानकारी के लिए MediaPipe के टास्क इस्तेमाल करने के लिए डेवलपमेंट एनवायरमेंट सेट अप करना. इसमें ये भी शामिल हैं प्लैटफ़ॉर्म वर्शन की ज़रूरी शर्तें, Google के सभी प्रॉडक्ट के लिए सेटअप गाइड Python.
पैकेज
MediaPipe जेस्चर आइडेंटिफ़ायर टास्क के लिए मीडियापाइप PyPI पैकेज की ज़रूरत होती है. आप इंस्टॉल कर सकते हैं और इन डिपेंडेंसी को नीचे दिए गए निर्देशों के साथ इंपोर्ट करें:
$ python -m pip install mediapipe
आयात
जेस्चर आइडेंटिफ़ायर के टास्क फ़ंक्शन ऐक्सेस करने के लिए, इन क्लास को इंपोर्ट करें:
import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision
मॉडल
MediaPipe जेस्चर आइडेंटिफ़ायर टास्क के लिए, ट्रेन किए गए मॉडल बंडल की ज़रूरत होती है जो इस टास्क को पूरा करें. जेस्चर आइडेंटिफ़ायर के लिए तैयार किए गए उपलब्ध मॉडल के बारे में ज़्यादा जानकारी के लिए, टास्क की खास जानकारी वाला मॉडल सेक्शन देखें.
मॉडल को चुनें और डाउनलोड करें, और फिर उसे लोकल डायरेक्ट्री में स्टोर करें:
model_path = '/absolute/path/to/gesture_recognizer.task'
मॉडल का नाम पैरामीटर में मॉडल का पाथ तय करें, जैसा कि नीचे दिखाया गया है:
base_options = BaseOptions(model_asset_path=model_path)
टास्क बनाएं
MediaPipe हाव-भाव पहचानकर्ता टास्क create_from_options
फ़ंक्शन का इस्तेमाल करके यह
टास्क. create_from_options
फ़ंक्शन, कॉन्फ़िगरेशन के लिए वैल्यू स्वीकार करता है
को मैनेज करने के विकल्प होते हैं. कॉन्फ़िगरेशन के विकल्पों के बारे में ज़्यादा जानकारी पाने के लिए, यहां जाएं
कॉन्फ़िगरेशन के विकल्प.
नीचे दिया गया कोड इस टास्क को बनाने और कॉन्फ़िगर करने का तरीका बताता है.
ये सैंपल, इमेज के लिए अलग-अलग तरह के टास्क बनाते हैं, और लाइव वीडियो स्ट्रीम.
इमेज
import mediapipe as mp BaseOptions = mp.tasks.BaseOptions GestureRecognizer = mp.tasks.vision.GestureRecognizer GestureRecognizerOptions = mp.tasks.vision.GestureRecognizerOptions VisionRunningMode = mp.tasks.vision.RunningMode # Create a gesture recognizer instance with the image mode: options = GestureRecognizerOptions( base_options=BaseOptions(model_asset_path='/path/to/model.task'), running_mode=VisionRunningMode.IMAGE) with GestureRecognizer.create_from_options(options) as recognizer: # The detector is initialized. Use it here. # ...
वीडियो
import mediapipe as mp BaseOptions = mp.tasks.BaseOptions GestureRecognizer = mp.tasks.vision.GestureRecognizer GestureRecognizerOptions = mp.tasks.vision.GestureRecognizerOptions VisionRunningMode = mp.tasks.vision.RunningMode # Create a gesture recognizer instance with the video mode: options = GestureRecognizerOptions( base_options=BaseOptions(model_asset_path='/path/to/model.task'), running_mode=VisionRunningMode.VIDEO) with GestureRecognizer.create_from_options(options) as recognizer: # The detector is initialized. Use it here. # ...
लाइव स्ट्रीम
import mediapipe as mp BaseOptions = mp.tasks.BaseOptions GestureRecognizer = mp.tasks.vision.GestureRecognizer GestureRecognizerOptions = mp.tasks.vision.GestureRecognizerOptions GestureRecognizerResult = mp.tasks.vision.GestureRecognizerResult VisionRunningMode = mp.tasks.vision.RunningMode # Create a gesture recognizer instance with the live stream mode: def print_result(result: GestureRecognizerResult, output_image: mp.Image, timestamp_ms: int): print('gesture recognition result: {}'.format(result)) options = GestureRecognizerOptions( base_options=BaseOptions(model_asset_path='/path/to/model.task'), running_mode=VisionRunningMode.LIVE_STREAM, result_callback=print_result) with GestureRecognizer.create_from_options(options) as recognizer: # The detector is initialized. Use it here. # ...
कॉन्फ़िगरेशन विकल्प
इस टास्क में Python ऐप्लिकेशन के लिए, ये कॉन्फ़िगरेशन विकल्प मौजूद हैं:
विकल्प का नाम | ब्यौरा | मान की सीमा | डिफ़ॉल्ट मान | |
---|---|---|---|---|
running_mode |
टास्क के लिए रनिंग मोड सेट करता है. तीन
मोड: अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है इमेज: सिंगल इमेज इनपुट का मोड. अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है वीडियो: किसी वीडियो के डिकोड किए गए फ़्रेम के लिए मोड. अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है 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"] हैं |
|
|
|
custom_gestures_classifier_options |
कस्टम जेस्चर की कैटगरी तय करने वाले व्यवहार को कॉन्फ़िगर करने के विकल्प. |
|
|
|
result_callback |
यह नीति, क्लासिफ़िकेशन के नतीजे पाने के लिए, रिज़ल्ट लिसनर को सेट करती है
जब जेस्चर आइडेंटिफ़ायर लाइव स्ट्रीम मोड में हो, तब यह एसिंक्रोनस रूप से काम करता है.
इसका इस्तेमाल सिर्फ़ तब किया जा सकता है, जब रनिंग मोड को LIVE_STREAM पर सेट किया गया हो |
ResultListener |
लागू नहीं | लागू नहीं |
डेटा तैयार करें
अपना इनपुट, इमेज फ़ाइल या नंपी अरे के तौर पर तैयार करें. इसके बाद,
mediapipe.Image
ऑब्जेक्ट. अगर आपका इनपुट किसी वीडियो फ़ाइल या लाइव स्ट्रीम के लिए है,
वेबकैम से, आप एक बाहरी लाइब्रेरी का
इस्तेमाल कर सकते हैं, जैसे कि
अपने इनपुट फ़्रेम को numpy के तौर पर लोड करने के लिए OpenCV
कलेक्शन.
इमेज
import mediapipe as mp # Load the input image from an image file. mp_image = mp.Image.create_from_file('/path/to/image') # Load the input image from a numpy array. mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_image)
वीडियो
import mediapipe as mp # Use OpenCV’s VideoCapture to load the input video. # Load the frame rate of the video using OpenCV’s CV_CAP_PROP_FPS # You’ll need it to calculate the timestamp for each frame. # Loop through each frame in the video using VideoCapture#read() # Convert the frame received from OpenCV to a MediaPipe’s Image object. mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_frame_from_opencv)
लाइव स्ट्रीम
import mediapipe as mp # Use OpenCV’s VideoCapture to start capturing from the webcam. # Create a loop to read the latest frame from the camera using VideoCapture#read() # Convert the frame received from OpenCV to a MediaPipe’s Image object. mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_frame_from_opencv)
टास्क को पूरा करें
जेस्चर आइडेंटिफ़ायर, पहचानकर्ता, identifier_for_video और समुद्र के किनारे की पहचान [identifier_async] का इस्तेमाल करता है फ़ंक्शन का इस्तेमाल करता है. जेस्चर की पहचान करने के लिए, यह ज़रूरी है प्री-प्रोसेसिंग इनपुट डेटा, इमेज में हाथों की पहचान करना, हाथ की पहचान करना लैंडमार्क को पहचानने और उसके हाथ के जेस्चर की पहचान करने के लिए किया जाता है.
नीचे दिया गया कोड बताता है कि टास्क मॉडल की मदद से प्रोसेसिंग कैसे लागू की जाती है.
इमेज
# Perform gesture recognition on the provided single image. # The gesture recognizer must be created with the image mode. gesture_recognition_result = recognizer.recognize(mp_image)
वीडियो
# Perform gesture recognition on the provided single image. # The gesture recognizer must be created with the video mode. gesture_recognition_result = recognizer.recognize_for_video(mp_image, frame_timestamp_ms)
लाइव स्ट्रीम
# Send live image data to perform gesture recognition. # The results are accessible via the `result_callback` provided in # the `GestureRecognizerOptions` object. # The gesture recognizer must be created with the live stream mode. recognizer.recognize_async(mp_image, frame_timestamp_ms)
निम्न पर ध्यान दें:
- वीडियो मोड या लाइव स्ट्रीम मोड में चलाते समय, आपको ये काम भी करने होंगे जेस्चर आइडेंटिफ़ायर टास्क को इनपुट फ़्रेम का टाइमस्टैंप उपलब्ध कराएं.
- इमेज या वीडियो मॉडल में चलाते समय, जेस्चर आइडेंटिफ़ायर का टास्क मौजूदा थ्रेड को तब तक ब्लॉक करें, जब तक कि यह इनपुट इमेज की प्रोसेसिंग पूरी न कर ले या फ़्रेम.
- लाइव स्ट्रीम मोड में इस्तेमाल करते समय, जेस्चर आइडेंटिफ़ायर का टास्क ब्लॉक नहीं होता मौजूदा थ्रेड को हल करने में मदद मिलती है, लेकिन वह तुरंत वापस आ जाता है. यह अपने नतीजे को शुरू करेगा हर बार प्रोसेसिंग खत्म होने पर, पहचान करने के नतीजे के साथ लिसनर इनपुट फ़्रेम शामिल है. अगर पहचान करने वाले फ़ंक्शन को कॉल किया जाता है, तो जेस्चर आइडेंटिफ़ायर टास्क, किसी दूसरे फ़्रेम को प्रोसेस करने में व्यस्त है. इसलिए, यह टास्क नए इनपुट को अनदेखा कर देगा फ़्रेम.
किसी इमेज पर जेस्चर आइडेंटिफ़ायर को चलाने का पूरा उदाहरण देखने के लिए, कोड देखें उदाहरण के लिए देखें.
नतीजों को हैंडल करना और दिखाना
जेस्चर आइडेंटिफ़ायर हर उपयोगकर्ता के लिए, जेस्चर की पहचान करने वाला नतीजा ऑब्जेक्ट जनरेट करता है पहचान करने के लिए इस्तेमाल किया जाता है. नतीजे के तौर पर दिखाए गए ऑब्जेक्ट में इमेज के निर्देशांकों में, हाथ के लैंडमार्क शामिल हैं, विश्व के निर्देशांकों में हैंड लैंडमार्क, किसी हाथ के इस्तेमाल(बायां/दायां हाथ), और हाथ पहचाने गए हाथों के जेस्चर की कैटगरी.
इस टास्क के आउटपुट डेटा का एक उदाहरण नीचे दिया गया है:
नतीजे में मिले 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)
इन इमेज में, टास्क के आउटपुट का विज़ुअलाइज़ेशन दिखाया गया है:
जेस्चर आइडेंटिफ़ायर का उदाहरण कोड, पहचान को दिखाने का तरीका बताता है टास्क के बाद मिले नतीजे देखने के लिए, कोड देखें उदाहरण के लिए देखें.