Python के लिए लैंडमार्क का पता लगाने वाली गाइड

MediaPipe पोज़ लैंडमार्कर टास्क से, आपको किसी इमेज में इंसानी शरीर के लैंडमार्क का पता लगाने की सुविधा मिलती है या वीडियो. इस टास्क की मदद से, शरीर की प्रमुख जगहों की पहचान की जा सकती है, पॉस्चर का विश्लेषण किया जा सकता है, और गतिविधियों को अलग-अलग कैटगरी में बांट सकता है. यह टास्क, मशीन लर्निंग (एमएल) मॉडल का इस्तेमाल करता है अलग-अलग इमेज या वीडियो के साथ काम करते हैं. टास्क, इमेज में बॉडी पोज़ लैंडमार्क दिखाता है निर्देशांकों और 3-आयामी दुनिया के निर्देशांकों में भी देखा जा सकता है.

इन निर्देशों में बताया गया कोड सैंपल यहां उपलब्ध है GitHub. क्षमताओं, मॉडल, और कॉन्फ़िगरेशन के विकल्पों के बारे में ज़्यादा जानकारी पाने के लिए इस टास्क की खास जानकारी देखें.

कोड का उदाहरण

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

अगर रैज़बेरी पाई के लिए पोज़ लैंडमार्कर का इस्तेमाल किया जा रहा है, तो इसे देखें: Raspberry Pi का उदाहरण ऐप्लिकेशन है.

सेटअप

इस सेक्शन में, आपके डेवलपमेंट एनवायरमेंट को सेट अप करने और अलग-अलग कोड प्रोजेक्ट का इस्तेमाल करता है. इस पर सामान्य जानकारी के लिए MediaPipe के टास्क इस्तेमाल करने के लिए डेवलपमेंट एनवायरमेंट सेट अप करना. इसमें ये भी शामिल हैं प्लैटफ़ॉर्म वर्शन की ज़रूरी शर्तें पूरी करते हैं. इसके बारे में ज़्यादा जानने के लिए, 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/pose_landmarker.task'

पाथ की जानकारी देने के लिए, BaseOptions ऑब्जेक्ट model_asset_path पैरामीटर का इस्तेमाल करें इस्तेमाल करना है. कोड के उदाहरण के लिए, अगला सेक्शन देखें.

टास्क बनाएं

MediaPipe पोज़ लैंडमार्कर टास्क, 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 टास्क के लिए रनिंग मोड सेट करता है. तीन मोड:

अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है इमेज: सिंगल इमेज इनपुट का मोड.
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है वीडियो: किसी वीडियो के डिकोड किए गए फ़्रेम के लिए मोड.
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है LIVE_STREAM: इनपुट की लाइवस्ट्रीम करने का मोड जैसी निजी जानकारी को किसी भी समय रिकॉर्ड कर सकते हैं. इस मोड में, 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 लैंडमार्कर के नतीजे पाने के लिए, यह नतीजा लिसनर को सेट करता है जब Pose मार्कर लाइव स्ट्रीम मोड में हो, तब यह एसिंक्रोनस रूप से उपलब्ध नहीं होता है. इसका इस्तेमाल सिर्फ़ तब किया जा सकता है, जब रनिंग मोड को LIVE_STREAM पर सेट किया गया हो ResultListener N/A

डेटा तैयार करें

अपने इनपुट को इमेज फ़ाइल या नंपी अरे के तौर पर तैयार करें, फिर उसे 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: लैंडमार्क कोऑर्डिनेट को 0.0 और 1.0 के बीच इमेज की चौड़ाई (x) और ऊंचाई (y).

  • z: लैंडमार्क गहराई, कूल्हे के बीच के बिंदु पर गहराई के रूप में ऑरिजिन. वैल्यू जितनी कम होती है, लैंडमार्क, कैमरे के उतना ही करीब होता है. कॉन्टेंट बनाने z मैग्निट्यूड भी x के बराबर स्केल का इस्तेमाल करता है.

  • visibility: इमेज में लैंडमार्क के दिखने की संभावना.

आउटपुट में दुनिया के ये निर्देशांक शामिल हैं (WorldLandmarks):

  • x, y, और z: मीटर में, वास्तविक दुनिया के 3-डाइमेंशन वाले निर्देशांक, मूल रूप से कूल्हे के बीच का हिस्सा.

  • visibility: इमेज में लैंडमार्क के दिखने की संभावना.

नीचे दी गई इमेज, टास्क के आउटपुट का विज़ुअलाइज़ेशन दिखाती है:

वैकल्पिक सेगमेंटेशन मास्क, हर पिक्सल से जुड़े होने की संभावना दिखाता है को नुकसान पहुंचता है. नीचे दी गई इमेज, टास्क आउटपुट:

पोज़ लैंडमार्कर के उदाहरण कोड में बताया गया है कि कैसे टास्क के नतीजे वापस मिले हैं, तो कोड का उदाहरण देखें.