MediaPipe Pose Landmarker görevi, bir resim veya videodaki insan vücutlarının önemli noktalarını algılamanıza olanak tanır. Bu görevi kullanarak vücudun önemli bölgelerini belirleyebilir, duruşu analiz edebilir ve hareketleri sınıflandırabilirsiniz. Bu görevde, tek resim veya video ile çalışan makine öğrenimi (ML) modelleri kullanılır. Görev, görüntü koordinatlarında ve 3 boyutlu dünya koordinatlarında vücut pozunun önemli noktalarını çıkarır.
Bu talimatlarda, web ve JavaScript uygulamaları için Pose Landmarker'ın nasıl kullanılacağı gösterilmektedir. Bu görevin özellikleri, modelleri ve yapılandırma seçenekleri hakkında daha fazla bilgi için Genel Bakış bölümüne bakın.
Kod örneği
Pose Landmarker'ın örnek kodu, bu görevin JavaScript'te eksiksiz bir uygulamasını referansınız için sağlar. Bu kod, bu görevi test etmenize ve kendi pozisyon işaretçisi uygulamanızı oluşturmaya başlamanıza yardımcı olur. Pozisyon işaretçisi örneğini yalnızca web tarayıcınızı kullanarak görüntüleyebilir, çalıştırabilir ve düzenleyebilirsiniz.
Kurulum
Bu bölümde, geliştirme ortamınızı özellikle Pose Landmarker'ı kullanacak şekilde ayarlamayla ilgili temel adımlar açıklanmaktadır. Platform sürümü gereksinimleri de dahil olmak üzere web ve JavaScript geliştirme ortamınızı ayarlama hakkında genel bilgi için Web için kurulum kılavuzu'na bakın.
JavaScript paketleri
Pose Landmarker kodu, MediaPipe @mediapipe/tasks-vision
NPM paketi üzerinden kullanılabilir. Bu kitaplıkları, platform kurulum kılavuzundaki talimatları uygulayarak bulup indirebilirsiniz.
Gerekli paketleri NPM aracılığıyla aşağıdaki komutu kullanarak yükleyebilirsiniz:
npm install @mediapipe/tasks-vision
Görev kodunu bir içerik yayınlama ağı (CDN) hizmeti aracılığıyla içe aktarmak istiyorsanız HTML dosyanızdaki <head> etiketine aşağıdaki kodu ekleyin:
<!-- 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
MediaPipe Pose Landmarker görevi, bu görevle uyumlu eğitilmiş bir model gerektirir. Pose Landmarker için kullanılabilen eğitilmiş modeller hakkında daha fazla bilgi edinmek istiyorsanız görev genel bakışındaki Modeller bölümüne bakın.
Bir model seçip indirin ve proje dizininizde saklayın:
<dev-project-root>/app/shared/models/
Görevi oluşturma
Görevi çıkarım çalıştırmaya hazırlamak için Pose Landmarker createFrom...() işlevlerinden birini kullanın. createFromModelPath() işlevini, eğitilmiş model dosyasına ait göreli veya mutlak bir yolla kullanın.
Modeliniz zaten belleğe yüklendiyse createFromModelBuffer() yöntemini kullanabilirsiniz.
Aşağıdaki kod örneğinde, görevi ayarlamak için createFromOptions() işlevinin nasıl kullanılacağı gösterilmektedir. createFromOptions() işlevi, yapılandırma seçenekleriyle Pose Landmarker'ı özelleştirmenize olanak tanır. Yapılandırma seçenekleri hakkında daha fazla bilgi için Yapılandırma seçenekleri başlıklı makaleyi inceleyin.
Aşağıdaki kodda, görevin özel seçeneklerle nasıl oluşturulacağı ve yapılandırılacağı gösterilmektedir:
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
});
Yapılandırma seçenekleri
Bu görev, Web ve JavaScript uygulamaları için aşağıdaki yapılandırma seçeneklerine sahiptir:
| Seçenek Adı | Açıklama | Değer aralığı | Varsayılan değer |
|---|---|---|---|
runningMode |
Görevin çalışma modunu ayarlar. İki mod vardır: RESİM: Tek resim girişleri için mod. VIDEO: Bir videonun veya bir kameradan gelen giriş verilerinin canlı yayınındaki kod çözülmüş kareler için mod. |
{IMAGE, VIDEO} |
IMAGE |
numPoses |
Pose Landmarker tarafından algılanabilecek maksimum poz sayısı. | Integer > 0 |
1 |
minPoseDetectionConfidence |
Poz algılamanın başarılı kabul edilmesi için gereken minimum güven puanı. | Float [0.0,1.0] |
0.5 |
minPosePresenceConfidence |
Pozisyon işareti algılamada pozisyon varlığı puanının minimum güven puanı. | Float [0.0,1.0] |
0.5 |
minTrackingConfidence |
Poz izlemenin başarılı sayılması için gereken minimum güven puanı. | Float [0.0,1.0] |
0.5 |
outputSegmentationMasks |
Pose Landmarker'ın, algılanan poz için bir segmentasyon maskesi çıkışı verip vermeyeceği. | Boolean |
False |
Verileri hazırlama
Pose Landmarker, ana makine tarayıcısı tarafından desteklenen herhangi bir biçimdeki resimlerde pozları algılayabilir. Görev, yeniden boyutlandırma, döndürme ve değer normalleştirme dahil olmak üzere veri girişi ön işlemesini de gerçekleştirir. Videolardaki pozları işaretlemek için API'yi kullanarak her seferinde bir kareyi hızlıca işleyebilir ve pozların videoda ne zaman gerçekleştiğini belirlemek için karenin zaman damgasını kullanabilirsiniz.
Görevi çalıştırma
Pose Landmarker, çıkarımları tetiklemek için detect() (çalıştırma modu IMAGE ile) ve detectForVideo() (çalıştırma modu VIDEO ile) yöntemlerini kullanır. Görev, verileri işler, pozları işaretlemeye çalışır ve sonuçları bildirir.
Pose Landmarker detect() ve detectForVideo() yöntemlerine yapılan çağrılar eşzamanlı olarak çalışır ve kullanıcı araya girme iş parçacığını engeller. Bir cihazın kamerasından alınan video karelerinde poz algılarsanız her algılama ana iş parçacığını engeller. detect() ve detectForVideo() yöntemlerini başka bir iş parçacığında çalıştıracak web işçileri uygulayarak bunu önleyebilirsiniz.
Aşağıdaki kodda, görevi işleme modelini kullanarak işlemenin nasıl yürütüleceği gösterilmektedir:
Resim
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(); }); }
Pose Landmarker görevini çalıştırmanın daha eksiksiz bir uygulaması için örneğe bakın.
Sonuçları işleme ve görüntüleme
Pozisyon İşaretçisi, her algılama çalıştırması için bir poseLandmarkerResult nesnesi döndürür. Sonuç nesnesi, her poz işaretçisinin koordinatlarını içerir.
Aşağıda bu görevden elde edilen çıkış verilerine bir örnek verilmiştir:
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)
Çıkış, her önemli nokta için hem normalleştirilmiş koordinatları (Landmarks) hem de dünya koordinatlarını (WorldLandmarks) içerir.
Çıkışta aşağıdaki normalleştirilmiş koordinatlar (Landmarks) yer alır:
xvey: Önemli nokta koordinatları, resim genişliği (x) ve yüksekliği (y) ile 0,0 ile 1,0 arasında normalleştirilir.z: Kalçaların orta noktasındaki derinliğin başlangıç noktası olarak alındığı, ünlü yapı derinliği. Değer ne kadar küçük olursa yer işareti kameraya o kadar yakındır. z'nin büyüklüğü, kabacaxile aynı ölçeği kullanır.visibility: Önemli noktanın resimde görünme olasılığı.
Çıkış aşağıdaki dünya koordinatlarını (WorldLandmarks) içerir:
x,yvez: Kalçaların orta noktası başlangıç noktası olacak şekilde, metre cinsinden gerçek dünyadaki 3 boyutlu koordinatlar.visibility: Önemli noktanın resimde görünme olasılığı.
Aşağıdaki resimde, görev çıktısının görselleştirilmiş hali gösterilmektedir:
İsteğe bağlı segmentasyon maskesi, her pikselin algılanan bir kişiye ait olma olasılığını gösterir. Aşağıdaki resim, görev çıkışının bölümleme maskesidir:
Pose Landmarker örnek kodu, görevden döndürülen sonuçların nasıl görüntüleneceğini gösterir. Örneğe göz atın.