MediaPipe Pose Landmarker टास्क की मदद से, किसी इमेज या वीडियो में मानव शरीर के लैंडमार्क का पता लगाया जा सकता है. इस टास्क का इस्तेमाल करके, शरीर की मुख्य जगहों की पहचान की जा सकती है, मुद्रा का विश्लेषण किया जा सकता है, और गतिविधियों को अलग-अलग कैटगरी में बांटा जा सकता है. यह टास्क, मशीन लर्निंग (एमएल) मॉडल का इस्तेमाल करता है, जो एक इमेज या वीडियो के साथ काम करते हैं. यह टास्क, इमेज के निर्देशांक और दुनिया के थ्री-डाइमेंशनल निर्देशांक में, बॉडी पॉज़ के लैंडमार्क दिखाता है.
इन निर्देशों में बताया गया कोड सैंपल, GitHub पर उपलब्ध है. इस टास्क की सुविधाओं, मॉडल, और कॉन्फ़िगरेशन के विकल्पों के बारे में ज़्यादा जानने के लिए, खास जानकारी देखें.
कोड का उदाहरण
पोज़ लैंडमार्कर के लिए दिए गए कोड के उदाहरण में, इस टास्क को Python में पूरी तरह से लागू करने का तरीका बताया गया है. इस कोड की मदद से, इस टास्क को टेस्ट किया जा सकता है और अपना पोज़ लैंडमार्कर बनाने की प्रोसेस शुरू की जा सकती है. सिर्फ़ वेब ब्राउज़र का इस्तेमाल करके, पोज़ लैंडमार्कर के उदाहरण के कोड को देखा, चलाया, और उसमें बदलाव किया जा सकता है.
अगर Raspberry Pi के लिए पोज़ लैंडमार्कर लागू किया जा रहा है, तो Raspberry Pi के लिए उदाहरण के तौर पर दिया गया ऐप्लिकेशन देखें.
सेटअप
इस सेक्शन में, Pose Landmarker का इस्तेमाल करने के लिए, डेवलपमेंट एनवायरमेंट और कोड प्रोजेक्ट सेट अप करने के मुख्य चरणों के बारे में बताया गया है. MediaPipe Tasks का इस्तेमाल करने के लिए, डेवलपमेंट एनवायरमेंट सेट अप करने के बारे में सामान्य जानकारी पाने के लिए, Python के लिए सेटअप गाइड देखें. इसमें प्लैटफ़ॉर्म के वर्शन से जुड़ी ज़रूरी शर्तें भी शामिल हैं.
पैकेज
MediaPipe Pose Landmarker टास्क के लिए, mediapipe PyPI पैकेज की ज़रूरत होती है. इन डिपेंडेंसी को इनके साथ इंस्टॉल और इंपोर्ट किया जा सकता है:
$ python -m pip install mediapipe
आयात
पोज़ लैंडमार्कर टास्क के फ़ंक्शन ऐक्सेस करने के लिए, ये क्लास इंपोर्ट करें:
import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision
मॉडल
MediaPipe Pose Landmarker टास्क के लिए, ऐसे मॉडल की ज़रूरत होती है जिसे इस टास्क के लिए ट्रेन किया गया हो. पोज़ लैंडमार्कर के लिए, ट्रेन किए गए उपलब्ध मॉडल के बारे में ज़्यादा जानने के लिए, टास्क की खास जानकारी वाला मॉडल सेक्शन देखें.
मॉडल चुनें और डाउनलोड करें. इसके बाद, उसे किसी लोकल डायरेक्ट्री में सेव करें:
model_path = '/absolute/path/to/pose_landmarker.task'
इस्तेमाल किए जाने वाले मॉडल का पाथ बताने के लिए, BaseOptions
ऑब्जेक्ट model_asset_path
पैरामीटर का इस्तेमाल करें. कोड का उदाहरण देखने के लिए, अगला सेक्शन देखें.
टास्क बनाना
MediaPipe Pose Landmarker टास्क, टास्क सेट अप करने के लिए create_from_options
फ़ंक्शन का इस्तेमाल करता है. create_from_options
फ़ंक्शन, कॉन्फ़िगरेशन के विकल्पों को मैनेज करने के लिए वैल्यू स्वीकार करता है. ज़्यादा जानकारी के लिए, कॉन्फ़िगरेशन के विकल्प देखें.
नीचे दिए गए कोड में, इस टास्क को बनाने और कॉन्फ़िगर करने का तरीका बताया गया है.
इन सैंपल में, इमेज, वीडियो फ़ाइलों, और लाइव स्ट्रीम के लिए, टास्क बनाने के अलग-अलग तरीके भी दिखाए गए हैं.
इमेज
import mediapipe as mp BaseOptions = mp.tasks.BaseOptions PoseLandmarker = mp.tasks.vision.PoseLandmarker PoseLandmarkerOptions = mp.tasks.vision.PoseLandmarkerOptions VisionRunningMode = mp.tasks.vision.RunningMode options = PoseLandmarkerOptions( base_options=BaseOptions(model_asset_path=model_path), running_mode=VisionRunningMode.IMAGE) with PoseLandmarker.create_from_options(options) as landmarker: # The landmarker is initialized. Use it here. # ...
वीडियो
import mediapipe as mp BaseOptions = mp.tasks.BaseOptions PoseLandmarker = mp.tasks.vision.PoseLandmarker PoseLandmarkerOptions = mp.tasks.vision.PoseLandmarkerOptions VisionRunningMode = mp.tasks.vision.RunningMode # Create a pose landmarker instance with the video mode: options = PoseLandmarkerOptions( base_options=BaseOptions(model_asset_path=model_path), running_mode=VisionRunningMode.VIDEO) with PoseLandmarker.create_from_options(options) as landmarker: # The landmarker is initialized. Use it here. # ...
लाइव स्ट्रीम
import mediapipe as mp BaseOptions = mp.tasks.BaseOptions PoseLandmarker = mp.tasks.vision.PoseLandmarker PoseLandmarkerOptions = mp.tasks.vision.PoseLandmarkerOptions PoseLandmarkerResult = mp.tasks.vision.PoseLandmarkerResult VisionRunningMode = mp.tasks.vision.RunningMode # Create a pose landmarker instance with the live stream mode: def print_result(result: PoseLandmarkerResult, output_image: mp.Image, timestamp_ms: int): print('pose landmarker result: {}'.format(result)) options = PoseLandmarkerOptions( base_options=BaseOptions(model_asset_path=model_path), running_mode=VisionRunningMode.LIVE_STREAM, result_callback=print_result) with PoseLandmarker.create_from_options(options) as landmarker: # The landmarker is initialized. Use it here. # ...
किसी इमेज के साथ इस्तेमाल करने के लिए, पोज़ लैंडमार्कर बनाने का पूरा उदाहरण देखने के लिए, कोड का उदाहरण देखें.
कॉन्फ़िगरेशन विकल्प
इस टास्क में, Python ऐप्लिकेशन के लिए ये कॉन्फ़िगरेशन विकल्प हैं:
विकल्प का नाम | ब्यौरा | वैल्यू की रेंज | डिफ़ॉल्ट मान |
---|---|---|---|
running_mode |
टास्क के लिए रनिंग मोड सेट करता है. इसके तीन मोड हैं: IMAGE: एक इमेज इनपुट के लिए मोड. वीडियो: किसी वीडियो के डिकोड किए गए फ़्रेम के लिए मोड. LIVE_STREAM: कैमरे से मिले इनपुट डेटा की लाइव स्ट्रीम के लिए मोड. इस मोड में, नतीजे असींक्रोनस तरीके से पाने के लिए, एक listener सेट अप करने के लिए, resultListener को कॉल करना होगा. |
{IMAGE, VIDEO, LIVE_STREAM } |
IMAGE |
num_poses |
पोज़ लैंडमार्कर की मदद से, ज़्यादा से ज़्यादा कितने पोज़ का पता लगाया जा सकता है. | Integer > 0 |
1 |
min_pose_detection_confidence |
पोज़ का पता लगाने के लिए, कम से कम इतना कॉन्फ़िडेंस स्कोर होना चाहिए. | Float [0.0,1.0] |
0.5 |
min_pose_presence_confidence |
पोज़ लैंडमार्क की पहचान करने की सुविधा में, पोज़ की मौजूदगी के कम से कम कॉन्फ़िडेंस स्कोर का मतलब है. | Float [0.0,1.0] |
0.5 |
min_tracking_confidence |
पोज़ ट्रैकिंग के लिए कम से कम कॉन्फ़िडेंस स्कोर, जिसे सफल माना जाता है. | Float [0.0,1.0] |
0.5 |
output_segmentation_masks |
पोज़ लैंडमार्कर, पहचाने गए पोज़ के लिए सेगमेंटेशन मास्क दिखाता है या नहीं. | Boolean |
False |
result_callback |
जब पोज़ लैंडमार्कर लाइव स्ट्रीम मोड में हो, तब लैंडमार्कर के नतीजे पाने के लिए रिज़ल्ट लिसनर को असिंक्रोनस तरीके से सेट करता है.
इसका इस्तेमाल सिर्फ़ तब किया जा सकता है, जब रनिंग मोड को LIVE_STREAM पर सेट किया गया हो |
ResultListener |
N/A |
डेटा तैयार करना
अपने इनपुट को इमेज फ़ाइल या numpy ऐरे के तौर पर तैयार करें. इसके बाद, उसे 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)
टास्क चलाना
पोज़ लैंडमार्कर, अनुमान लगाने के लिए detect
, detect_for_video
, और detect_async
फ़ंक्शन का इस्तेमाल करता है. पोज़ लैंडमार्किंग के लिए, इसमें इनपुट डेटा को पहले से प्रोसेस करना और इमेज में पोज़ का पता लगाना शामिल है.
नीचे दिए गए कोड में, टास्क मॉडल की मदद से प्रोसेसिंग को लागू करने का तरीका बताया गया है.
इमेज
# Perform pose landmarking on the provided single image. # The pose landmarker must be created with the image mode. pose_landmarker_result = landmarker.detect(mp_image)
वीडियो
# Perform pose landmarking on the provided single image. # The pose landmarker must be created with the video mode. pose_landmarker_result = landmarker.detect_for_video(mp_image, frame_timestamp_ms)
लाइव स्ट्रीम
# Send live image data to perform pose landmarking. # The results are accessible via the `result_callback` provided in # the `PoseLandmarkerOptions` object. # The pose landmarker must be created with the live stream mode. landmarker.detect_async(mp_image, frame_timestamp_ms)
निम्न पर ध्यान दें:
- वीडियो मोड या लाइव स्ट्रीम मोड में चलाते समय, पोज़ लैंडमार्कर टास्क को इनपुट फ़्रेम का टाइमस्टैंप भी दें.
- इमेज या वीडियो मॉडल में चलने पर, पोज़ लैंडमार्कर टास्क, मौजूदा थ्रेड को तब तक ब्लॉक करता है, जब तक वह इनपुट इमेज या फ़्रेम को प्रोसेस करना पूरा नहीं कर लेता.
- लाइव स्ट्रीम मोड में चलने पर, पोज़ लैंडमार्कर टास्क तुरंत रिटर्न करता है और मौजूदा थ्रेड को ब्लॉक नहीं करता. यह हर बार किसी इनपुट फ़्रेम को प्रोसेस करने के बाद, नतीजे के बारे में बताने वाले फ़ंक्शन को, पहचान के नतीजे के साथ कॉल करेगा. अगर पोज़ लैंडमार्कर टास्क किसी दूसरे फ़्रेम को प्रोसेस कर रहा है, तो पहचान करने वाले फ़ंक्शन को कॉल करने पर, टास्क नए इनपुट फ़्रेम को अनदेखा कर देगा.
किसी इमेज पर पोज़ लैंडमार्कर चलाने का पूरा उदाहरण देखने के लिए, ज़्यादा जानकारी के लिए कोड का उदाहरण देखें.
नतीजों को मैनेज और दिखाना
पोज़ लैंडमार्कर, हर बार पहचान करने के लिए poseLandmarkerResult
ऑब्जेक्ट दिखाता है. नतीजे के ऑब्जेक्ट में, हर पोज़ के लैंडमार्क के लिए निर्देशांक होते हैं.
यहां इस टास्क के आउटपुट डेटा का उदाहरण दिया गया है:
PoseLandmarkerResult:
Landmarks:
Landmark #0:
x : 0.638852
y : 0.671197
z : 0.129959
visibility : 0.9999997615814209
presence : 0.9999984502792358
Landmark #1:
x : 0.634599
y : 0.536441
z : -0.06984
visibility : 0.999909
presence : 0.999958
... (33 landmarks per pose)
WorldLandmarks:
Landmark #0:
x : 0.067485
y : 0.031084
z : 0.055223
visibility : 0.9999997615814209
presence : 0.9999984502792358
Landmark #1:
x : 0.063209
y : -0.00382
z : 0.020920
visibility : 0.999976
presence : 0.999998
... (33 world landmarks per pose)
SegmentationMasks:
... (pictured below)
आउटपुट में, हर लैंडमार्क के लिए सामान्य काेऑर्डिनेट (Landmarks
) और वर्ल्ड
काेऑर्डिनेट (WorldLandmarks
), दोनों शामिल होते हैं.
आउटपुट में, सामान्य किए गए ये निर्देशांक (Landmarks
) शामिल होते हैं:
x
औरy
: इमेज की चौड़ाई (x
) और ऊंचाई (y
) के हिसाब से, लैंडमार्क के निर्देशांक को 0.0 से 1.0 के बीच नॉर्मलाइज़ किया गया है.z
: लैंडमार्क की गहराई, जिसमें कूल्हों के बीच की जगह को ऑरिजिन के तौर पर लिया गया है. वैल्यू जितनी कम होगी, लैंडमार्क कैमरे के उतना ही करीब होगा. z के मैग्नीट्यूड के लिए,x
के स्केल का इस्तेमाल किया जाता है.visibility
: इमेज में लैंडमार्क दिखने की संभावना.
आउटपुट में, दुनिया के ये निर्देशांक (WorldLandmarks
) शामिल होते हैं:
x
,y
, औरz
: असल ज़िंदगी के 3-डाइमेंशनल निर्देशांक, मीटर में. इनमें कूल्हों के बीच के बिंदु को ऑरिजिन माना जाता है.visibility
: इमेज में लैंडमार्क दिखने की संभावना.
नीचे दी गई इमेज में, टास्क के आउटपुट को विज़ुअलाइज़ किया गया है:
वैकल्पिक सेगमेंटेशन मास्क से पता चलता है कि हर पिक्सल, पहचाने गए व्यक्ति से जुड़ा है या नहीं. नीचे दी गई इमेज, टास्क के आउटपुट का सेगमेंटेशन मास्क है:
पोज़ लैंडमार्कर के उदाहरण वाले कोड में, टास्क से मिले नतीजों को दिखाने का तरीका बताया गया है. ज़्यादा जानकारी के लिए, कोड का उदाहरण देखें.