Pozoni udhëzuesin e zbulimit të pikë referimi për Python

Detyra MediaPipe Pose Landmarker ju lejon të zbuloni pika referimi të trupave njerëzorë në një imazh ose video. Ju mund ta përdorni këtë detyrë për të identifikuar vendndodhjet kryesore të trupit, për të analizuar qëndrimin dhe për të kategorizuar lëvizjet. Kjo detyrë përdor modele të mësimit të makinerive (ML) që funksionojnë me imazhe ose video të vetme. Detyra nxjerr pikat referuese të pozës së trupit në koordinatat e imazhit dhe në koordinatat botërore 3-dimensionale.

Shembulli i kodit i përshkruar në këto udhëzime është i disponueshëm në GitHub . Për më shumë informacion rreth aftësive, modeleve dhe opsioneve të konfigurimit të kësaj detyre, shihni Përmbledhjen .

Shembull kodi

Shembulli i kodit për Pose Landmarker ofron një zbatim të plotë të kësaj detyre në Python për referencën tuaj. Ky kod ju ndihmon të testoni këtë detyrë dhe të filloni të ndërtoni pikëshënuesin tuaj të pozës. Mund të shikoni, ekzekutoni dhe modifikoni kodin e shembullit të Pose Landmarker duke përdorur vetëm shfletuesin tuaj të internetit.

Nëse po zbatoni Pose Landmarker për Raspberry Pi, referojuni shembullit të aplikacionit Raspberry Pi .

Konfigurimi

Ky seksion përshkruan hapat kryesorë për konfigurimin e mjedisit tuaj të zhvillimit dhe projekteve të kodit në mënyrë specifike për të përdorur Pose Landmarker. Për informacion të përgjithshëm mbi konfigurimin e mjedisit tuaj të zhvillimit për përdorimin e detyrave të MediaPipe, duke përfshirë kërkesat e versionit të platformës, shihni udhëzuesin e konfigurimit për Python .

Paketat

Detyra MediaPipe Pose Landmarker kërkon paketën mediapipe PyPI. Ju mund t'i instaloni dhe importoni këto varësi me sa vijon:

$ python -m pip install mediapipe

Importet

Importoni klasat e mëposhtme për të hyrë në funksionet e detyrës Pose Landmarker:

import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision

Model

Detyra MediaPipe Pose Landmarker kërkon një model të trajnuar që është në përputhje me këtë detyrë. Për më shumë informacion mbi modelet e trajnuara të disponueshme për Pose Landmarker, shihni seksionin Modelet e përmbledhjes së detyrave.

Zgjidhni dhe shkarkoni modelin dhe më pas ruajeni në një direktori lokale:

model_path = '/absolute/path/to/pose_landmarker.task'

Përdorni parametrin e objektit BaseOptions model_asset_path për të specifikuar shtegun e modelit që do të përdoret. Për një shembull kodi, shihni seksionin tjetër.

Krijo detyrën

Detyra MediaPipe Pose Landmarker përdor funksionin create_from_options për të konfiguruar detyrën. Funksioni create_from_options pranon vlera për opsionet e konfigurimit që duhen trajtuar. Për më shumë informacion, shihni Opsionet e konfigurimit .

Kodi i mëposhtëm tregon se si të ndërtohet dhe konfigurohet kjo detyrë.

Këto mostra tregojnë gjithashtu variacionet e ndërtimit të detyrës për imazhe, skedarë video dhe transmetim të drejtpërdrejtë.

Imazhi

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.
  # ...
    

Video

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.
  # ...
    

Transmetim i drejtpërdrejtë

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.
  # ...
    

Për një shembull të plotë të krijimit të një Pose Landmarker për përdorim me një imazh, shihni shembullin e kodit .

Opsionet e konfigurimit

Kjo detyrë ka opsionet e mëposhtme të konfigurimit për aplikacionet Python:

Emri i opsionit Përshkrimi Gama e vlerave Vlera e paracaktuar
running_mode Vendos modalitetin e ekzekutimit për detyrën. Ekzistojnë tre mënyra:

IMAGE: Modaliteti për hyrjet e një imazhi të vetëm.

VIDEO: Modaliteti për kornizat e dekoduara të një videoje.

LIVE_STREAM: Modaliteti për një transmetim të drejtpërdrejtë të të dhënave hyrëse, si p.sh. nga një aparat fotografik. Në këtë modalitet, resultListener duhet të thirret për të vendosur një dëgjues për të marrë rezultatet në mënyrë asinkrone.
{ IMAGE, VIDEO, LIVE_STREAM } IMAGE
num_poses Numri maksimal i pozave që mund të zbulohet nga Shënuesi i Pozës. Integer > 0 1
min_pose_detection_confidence Rezultati minimal i besimit për zbulimin e pozës që të konsiderohet i suksesshëm. Float [0.0,1.0] 0.5
min_pose_presence_confidence Rezultati minimal i besimit të rezultatit të pranisë së pozës në zbulimin e pikës referuese të pozës. Float [0.0,1.0] 0.5
min_tracking_confidence Rezultati minimal i besimit për ndjekjen e pozës që të konsiderohet i suksesshëm. Float [0.0,1.0] 0.5
output_segmentation_masks Nëse Pose Landmarker nxjerr një maskë segmentimi për pozën e zbuluar. Boolean False
result_callback Vendos dëgjuesin e rezultateve që të marrë rezultatet e pikë referimit në mënyrë asinkrone kur Pose Landmarker është në modalitetin e transmetimit të drejtpërdrejtë. Mund të përdoret vetëm kur modaliteti i ekzekutimit është caktuar në LIVE_STREAM ResultListener N/A

Përgatitni të dhënat

Përgatitni hyrjen tuaj si një skedar imazhi ose një grup numpy, më pas konvertojeni atë në një objekt mediapipe.Image . Nëse hyrja juaj është një skedar video ose transmetim i drejtpërdrejtë nga një kamerë në internet, mund të përdorni një bibliotekë të jashtme si OpenCV për të ngarkuar kornizat tuaja hyrëse si grupe të pakëndshme.

Imazhi

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)
    

Video

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)
    

Transmetim i drejtpërdrejtë

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)
    

Drejtoni detyrën

Pose Landmarker përdor funksionet detect , detect_for_video dhe detect_async për të nxjerrë konkluzione. Për shënjimin e pozave, kjo përfshin parapërpunimin e të dhënave hyrëse dhe zbulimin e pozave në imazh.

Kodi i mëposhtëm tregon se si të ekzekutohet përpunimi me modelin e detyrës.

Imazhi

# 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)
    

Video

# 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)
    

Transmetim i drejtpërdrejtë

# 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)
    

Vini re sa vijon:

  • Kur ekzekutoni në modalitetin e videos ose në modalitetin e transmetimit të drejtpërdrejtë, jepni gjithashtu detyrën Pose Landmarker vulën kohore të kornizës së hyrjes.
  • Kur ekzekutohet në imazhin ose modelin e videos, detyra Pose Landmarker bllokon fillin aktual derisa të përfundojë përpunimin e imazhit ose kornizës hyrëse.
  • Kur ekzekutohet në modalitetin e transmetimit të drejtpërdrejtë, detyra Pose Landmarker kthehet menjëherë dhe nuk bllokon lidhjen aktuale. Ai do të thërrasë dëgjuesin e rezultatit me rezultatin e zbulimit sa herë që përfundon përpunimin e një kornize hyrëse. Nëse funksioni i zbulimit thirret kur detyra Pose Landmarker është e zënë me përpunimin e një kuadri tjetër, detyra do të injorojë kornizën e re të hyrjes.

Për një shembull të plotë të ekzekutimit të një Pose Landmarker në një imazh, shihni shembullin e kodit për detaje.

Trajtoni dhe shfaqni rezultatet

Pose Landmarker kthen një objekt poseLandmarkerResult për çdo ekzekutim zbulimi. Objekti i rezultatit përmban koordinatat për çdo pikë referimi të pozës.

Më poshtë tregon një shembull të të dhënave dalëse nga kjo detyrë:

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)

Dalja përmban të dyja koordinatat e normalizuara ( Landmarks ) dhe koordinatat botërore ( WorldLandmarks ) për çdo pikë referimi.

Dalja përmban koordinatat e mëposhtme të normalizuara ( Landmarks ):

  • x dhe y : Koordinatat e pikës referimi normalizohen midis 0.0 dhe 1.0 nga gjerësia e imazhit ( x ) dhe lartësia ( y ).

  • z : Thellësia pikë referimi, me thellësinë në mes të ijeve si origjinë. Sa më e vogël të jetë vlera, aq më afër kamerës është pikë referimi. Madhësia e z përdor përafërsisht të njëjtën shkallë si x .

  • visibility : Mundësia që pikë referimi të jetë e dukshme brenda imazhit.

Prodhimi përmban koordinatat e mëposhtme botërore ( WorldLandmarks ):

  • x , y dhe z : Koordinatat 3-dimensionale të botës reale në metra, me pikën e mesit të ijeve si origjinë.

  • visibility : Mundësia që pikë referimi të jetë e dukshme brenda imazhit.

Imazhi i mëposhtëm tregon një vizualizim të daljes së detyrës:

Një grua në një pozë meditative. Poza e saj theksohet me një kornizë teli që tregon pozicionimin e gjymtyrëve dhe bustit të saj

Maska opsionale e segmentimit përfaqëson gjasat që çdo piksel t'i përkasë një personi të zbuluar. Imazhi i mëposhtëm është një maskë segmentimi e daljes së detyrës:

Maska e segmentimit të imazhit të mëparshëm që përshkruan formën e gruas

Shembulli i kodit Pose Landmarker demonstron se si të shfaqen rezultatet e kthyera nga detyra, shikoni shembullin e kodit për detaje.