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
dhey
: 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ë six
.visibility
: Mundësia që pikë referimi të jetë e dukshme brenda imazhit.
Prodhimi përmban koordinatat e mëposhtme botërore ( WorldLandmarks
):
x
,y
dhez
: 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:
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:
Kodi i shembullit të Pose Landmarker demonstron se si të shfaqen rezultatet e kthyera nga detyra, shikoni shembullin e kodit