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 ):
xdhey: 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ë six.visibility: Mundësia që pika referuese të jetë e dukshme brenda imazhit.
Rezultati përmban koordinatat e mëposhtme botërore ( WorldLandmarks ):
x,ydhez: 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:

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:

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