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. 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ë të mësuarit automatik (ML) që funksionojnë me imazhe ose video të vetme. Detyra nxjerr pika referimi të pozicionit të trupit në koordinatat e imazhit dhe në koordinatat 3-dimensionale të botës.

Këto udhëzime ju tregojnë se si të përdorni Pose Landmarker për aplikacionet web dhe JavaScript. Për më shumë informacion në lidhje me aftësitë, modelet dhe opsionet e konfigurimit të kësaj detyre, shihni Përmbledhjen .

Shembull kodi

Kodi shembull për Pose Landmarker ofron një implementim 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 ndërtimin e aplikacionit tuaj të pose landmarker. Mund ta shikoni, ekzekutoni dhe modifikoni shembullin e 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 është i disponueshëm përmes paketës MediaPipe @mediapipe/tasks-vision NPM . Mund t'i gjeni dhe shkarkoni këto biblioteka duke ndjekur udhëzimet në udhëzuesin e konfigurimit të platformës.

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 doni 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.mjs"
    crossorigin="anonymous"></script>
</head>

Model

Detyra MediaPipe Pose Landmarker kërkon një model të trajnuar që është i pajtueshëm 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ë detyrës.

Zgjidhni dhe shkarkoni një model dhe më pas ruajeni atë brenda direktorisë së projektit tuaj:

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

Krijo detyrën

Përdorni një nga funksionet createFrom...() të Pose Landmarker për të përgatitur detyrën për ekzekutimin e inferencave. Përdorni funksionin createFromModelPath() me një shteg relativ ose absolut për në skedarin e modelit të trajnuar. Nëse modeli juaj është ngarkuar tashmë në memorie, mund të përdorni metodën createFromModelBuffer() .

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

Kodi i mëposhtëm tregon se si të ndërtohet dhe konfigurohet detyra 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 Diapazoni i Vlerave Vlera e parazgjedhur
runningMode Cakton modalitetin e ekzekutimit për detyrën. Ekzistojnë dy mënyra:

IMAZH: Modaliteti për futjen e një imazhi të vetëm.

VIDEO: Modaliteti për kuadrot e dekoduara të një videoje ose në një transmetim të drejtpërdrejtë të të dhënave hyrëse, si p.sh. nga një kamera.
{ IMAGE, VIDEO } IMAGE
numPoses Numri maksimal i pozave që mund të zbulohen nga Pose Landmarker. Integer > 0 1
minPoseDetectionConfidence Rezultati minimal i besimit që zbulimi i pozës 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 që gjurmimi i pozës 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 gjithashtu trajton përpunimin paraprak të të dhënave të futura, 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 shpejt një kuadër në të njëjtën kohë, duke përdorur vulën kohore të kuadrit për të përcaktuar se kur ndodhin pozat brenda videos.

Ekzekuto detyrën

Pose Landmarker përdor metodat detect() (me modalitetin ekzekutues IMAGE ) dhe detectForVideo() (me modalitetin ekzekutues VIDEO ) për të shkaktuar konkluzione. Detyra përpunon të dhënat, përpiqet të përcaktojë pozicionet e referencës dhe më pas raporton rezultatet.

Thirrjet në metodat Pose Landmarker detect() dhe detectForVideo() ekzekutohen në mënyrë sinkrone dhe bllokojnë fijen e ndërmjetme të përdoruesit. Nëse zbuloni poza në kuadro video nga kamera e një pajisjeje, çdo zbulim bllokon fijen kryesore. Mund ta parandaloni këtë duke zbatuar punëtorët e uebit për të ekzekutuar metodat detect() dhe detectForVideo() në një fije tjetër.

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

Imazh

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ë implementim më të plotë të ekzekutimit të një detyre Pose Landmarker, shihni shembullin .

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ë tregohet një shembull i të dhënave të daljes 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)

Rezultati përmban koordinatat e normalizuara ( Landmarks ) dhe koordinatat botërore ( WorldLandmarks ) për secilën pikë referimi.

Rezultati përmban koordinatat e normalizuara si më poshtë ( Landmarks ):

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

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

  • visibility : Mundësia që pika referuese të jetë e dukshme brenda imazhit.

Rezultati 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ë vitheve si origjinë.

  • visibility : Mundësia që pika referuese të jetë e dukshme brenda imazhit.

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

Një grua në një pozë meditative. Poza e saj është theksuar me një kornizë teli që tregon pozicionimin e gjymtyrëve dhe torsos së saj.

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

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

The Pose Landmarker example code demonstrates how to display the results returned from the task, see the example