Udhëzues për zbulimin e pikës referimi të pozave për ueb

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.

Këto udhëzime ju tregojnë se si të përdorni Pose Landmarker për aplikacionet në ueb dhe JavaScript. 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ë JavaScript për referencën tuaj. Ky kod ju ndihmon të testoni këtë detyrë dhe të filloni të ndërtoni aplikacionin tuaj të shënjimit të pozave. Mund të shikoni, ekzekutoni dhe modifikoni kodin e shembullit të Pose Landmarker duke përdorur vetëm shfletuesin tuaj të internetit.

Konfigurimi

Ky seksion përshkruan hapat kryesorë për konfigurimin e mjedisit tuaj të zhvillimit posaçërisht për të përdorur Pose Landmarker. Për informacion të përgjithshëm mbi konfigurimin e mjedisit tuaj të zhvillimit të uebit dhe JavaScript, duke përfshirë kërkesat e versionit të platformës, shihni udhëzuesin e konfigurimit për ueb .

Paketat JavaScript

Kodi i Pose Landmarker ofrohet përmes paketës MediaPipe @mediapipe/tasks-vision NPM . Ju mund t'i gjeni dhe shkarkoni këto biblioteka duke ndjekur udhëzimet në udhëzuesin e konfigurimit të platformës.

Ju mund të instaloni paketat e kërkuara përmes NPM duke përdorur komandën e mëposhtme:

npm install @mediapipe/tasks-vision

Nëse dëshironi të importoni kodin e detyrës nëpërmjet një shërbimi të rrjetit të shpërndarjes së përmbajtjes (CDN), shtoni kodin e mëposhtëm në etiketën <head> në skedarin tuaj HTML:

<!-- You can replace JSDeliver with another CDN if you prefer -->
<head>
  <script src="https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision/vision_bundle.js"
    crossorigin="anonymous"></script>
</head>

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 një model dhe më pas ruajeni në direktorinë e projektit tuaj:

<dev-project-root>/app/shared/models/

Krijo detyrën

Përdorni një nga funksionet Pose Landmarker createFrom...() për të përgatitur detyrën për ekzekutimin e konkluzioneve. Përdorni funksionin createFromModelPath() me një shteg relative ose absolute drejt skedarit të modelit të trajnuar. Nëse modeli juaj tashmë është i ngarkuar në memorie, mund të përdorni metodën createFromModelBuffer() .

Shembulli i kodit më poshtë tregon përdorimin e funksionit createFromOptions() për të vendosur detyrën. Funksioni createFromOptions() ju lejon të personalizoni Pose Landmarker me opsionet e konfigurimit. Për më shumë informacion mbi opsionet e konfigurimit, shihni Opsionet e konfigurimit .

Kodi i mëposhtëm tregon se si të ndërtoni dhe konfiguroni detyrën me opsione të personalizuara:

const vision = await FilesetResolver.forVisionTasks(
  // path/to/wasm/root
  "https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest/wasm"
);
const poseLandmarker = await poseLandmarker.createFromOptions(
    vision,
    {
      baseOptions: {
        modelAssetPath: "path/to/model"
      },
      runningMode: runningMode
    });

Opsionet e konfigurimit

Kjo detyrë ka opsionet e mëposhtme të konfigurimit për aplikacionet Web dhe JavaScript:

Emri i opsionit Përshkrimi Gama e vlerave Vlera e paracaktuar
runningMode Vendos modalitetin e ekzekutimit për detyrën. Ka dy mënyra:

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

VIDEO: Modaliteti për kornizat e deshifruara të një videoje ose në një transmetim të drejtpërdrejtë të të dhënave hyrëse, si p.sh. nga një aparat fotografik.
{ IMAGE, VIDEO } IMAGE
numPoses Numri maksimal i pozave që mund të zbulohet nga Shënuesi i Pozës. Integer > 0 1
minPoseDetectionConfidence Rezultati minimal i besimit për zbulimin e pozës që të konsiderohet i suksesshëm. Float [0.0,1.0] 0.5
minPosePresenceConfidence 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
minTrackingConfidence Rezultati minimal i besimit për ndjekjen e pozës që të konsiderohet i suksesshëm. Float [0.0,1.0] 0.5
outputSegmentationMasks Nëse Pose Landmarker nxjerr një maskë segmentimi për pozën e zbuluar. Boolean False

Përgatitni të dhënat

Pose Landmarker mund të zbulojë pozat në imazhe në çdo format të mbështetur nga shfletuesi pritës. Detyra trajton gjithashtu parapërpunimin e hyrjes së të dhënave, duke përfshirë ndryshimin e madhësisë, rrotullimin dhe normalizimin e vlerës. Për të shënuar pozat në video, mund të përdorni API-në për të përpunuar me shpejtësi një kornizë në të njëjtën kohë, duke përdorur vulën kohore të kornizës për të përcaktuar se kur ndodhin pozat brenda videos.

Drejtoni detyrën

Pose Landmarker përdor metodat detect() (me modalitetin e ekzekutimit IMAGE ) dhe detectForVideo() (me modalitetin e ekzekutimit VIDEO ) për të shkaktuar përfundime. Detyra përpunon të dhënat, përpiqet të shënojë pozat dhe më pas raporton rezultatet.

Thirrjet drejt metodave Pose Landmarker detect() dhe detectForVideo() ekzekutohen në mënyrë sinkronike dhe bllokojnë thread-in e interpozimit të përdoruesit. Nëse zbuloni poza në korniza video nga kamera e një pajisjeje, çdo zbulim bllokon fillin kryesor. Ju mund ta parandaloni këtë duke zbatuar punëtorët e uebit për të ekzekutuar metodat detect() dhe detectForVideo() në një thread tjetër.

Kodi i mëposhtëm tregon se si kryhet përpunimi me modelin e detyrës:

Imazhi

const image = document.getElementById("image") as HTMLImageElement;
const poseLandmarkerResult = poseLandmarker.detect(image);

Video

await poseLandmarker.setOptions({ runningMode: "VIDEO" });

let lastVideoTime = -1;
function renderLoop(): void {
  const video = document.getElementById("video");

  if (video.currentTime !== lastVideoTime) {
    const poseLandmarkerResult = poseLandmarker.detectForVideo(video);
    processResults(detections);
    lastVideoTime = video.currentTime;
  }

  requestAnimationFrame(() => {
    renderLoop();
  });
}

Për një zbatim më të plotë të ekzekutimit të një detyre Pose Landmarker, shihni shembullin e kodit .

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

Kodi i shembullit të Pose Landmarker demonstron se si të shfaqen rezultatet e kthyera nga detyra, shikoni shembullin e kodit