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, vücudun önemli konumlarını belirlemek, duruşu analiz etmek ve hareketleri sınıflandırmak için kullanabilirsiniz. Bu görevde, tek resim veya videoyla çalışan makine öğrenimi (ML) modelleri kullanılır. Görev, vücut duruşu yer işaretlerini resim koordinatlarında ve 3 boyutlu dünya koordinatlarında döndürür.
Bu talimatlarda, web ve JavaScript uygulamaları için Poz İşaretçisi'nin 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 için örnek kod, referans olarak kullanabileceğiniz bu görevin JavaScript'de eksiksiz bir uygulamasını sağlar. Bu kod, bu görevi test etmenize ve kendi poz yer işaretleyici uygulamanızı oluşturmaya başlamanıza yardımcı olur. Poz yer işaretleyici örnek kodunu 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'ı kullanmak için ayarlamayla ilgili temel adımlar açıklanmaktadır. Platform sürümü gereksinimleri dahil olmak üzere web ve JavaScript geliştirme ortamınızı ayarlama hakkında genel bilgi için Web için kurulum kılavuzu başlıklı makaleyi inceleyin.
JavaScript paketleri
Poz İşaretçisi kodu, MediaPipe @mediapipe/tasks-vision
NPM paketi aracılığıyla kullanılabilir. Bu kitaplıkları, platformun Kurulum kılavuzundaki talimatları uygulayarak bulabilir ve indirebilirsiniz.
Aşağıdaki komutu kullanarak gerekli paketleri NPM üzerinden 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.js"
crossorigin="anonymous"></script>
</head>
Model
MediaPipe Pose Landmarker görevi, bu görevle uyumlu bir eğitimli model gerektirir. Poz İşaretçisi için mevcut eğitimli modeller hakkında daha fazla bilgi edinmek isterseniz göreve genel bakıştaki Modeller bölümüne göz atın.
Bir model seçip indirin ve ardından proje dizininizde saklayın:
<dev-project-root>/app/shared/models/
Görevi oluşturun
Görevi çıkarım çalıştırmaya hazırlamak için Pose Landmarker createFrom...()
işlevlerinden birini kullanın. Eğitilmiş model dosyasının göreli veya mutlak yoluyla createFromModelPath()
işlevini kullanın.
Modeliniz zaten belleğe yüklenmişse createFromModelBuffer()
yöntemini kullanabilirsiniz.
Aşağıdaki kod örneğinde, görevi ayarlamak için createFromOptions()
işlevinin kullanımı gösterilmektedir. createFromOptions()
işlevi, Poz İşaretçisi'ni yapılandırma seçenekleriyle ö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örevde, web ve JavaScript uygulamaları için aşağıdaki yapılandırma seçenekleri bulunur:
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 kullanılan mod. VIDEO: Videonun veya kameradan gelen giriş verilerinin canlı yayınındaki kod çözülmüş kareler için kullanılan mod. |
{IMAGE, VIDEO } |
IMAGE |
numPoses |
Poz İşaretçisi tarafından algılanabilecek maksimum poz sayısı. | Integer > 0 |
1 |
minPoseDetectionConfidence |
Poz duruşu algılamanın başarılı olarak kabul edilmesi için gereken minimum güven puanı. | Float [0.0,1.0] |
0.5 |
minPosePresenceConfidence |
Poz duruşu yer işareti algılamada poz varlığı puanının minimum güven puanı. | Float [0.0,1.0] |
0.5 |
minTrackingConfidence |
Poz izlemenin başarılı kabul edilmesi için gereken minimum güven puanı. | Float [0.0,1.0] |
0.5 |
outputSegmentationMasks |
Poz İşaretçisi'nin, algılanan poz için segmentasyon maskesi çıkışı yapıp yapmadığını belirtir. | Boolean |
False |
Verileri hazırlama
Poz İşaretçisi, ana tarayıcı tarafından desteklenen herhangi bir biçimdeki resimlerdeki pozları algılayabilir. Görev, yeniden boyutlandırma, döndürme ve değer normalleştirme dahil olmak üzere veri girişi ön işleme işlemlerini de yönetir. Videolardaki pozları işaretlemek için API'yi kullanarak tek seferde bir kareyi hızlıca işleyebilirsiniz. Pozların videoda ne zaman gerçekleştiğini belirlemek için karenin zaman damgasını kullanabilirsiniz.
Görevi çalıştırma
Poz İşaretçisi, çıkarım tetiklemek için detect()
(çalışma modu IMAGE
ile) ve detectForVideo()
(çalışma modu VIDEO
ile) yöntemlerini kullanır. Görev, verileri işler, pozları işaretlemeye çalışır ve ardından sonuçları raporlar.
Pose Landmarker detect()
ve detectForVideo()
yöntemlerine yapılan çağrılar eşzamanlı olarak çalışır ve kullanıcı müdahalesi ileti dizisini engeller. Bir cihazın kamerasından video karelerinde poz algılarsanız her algılama ana mesaj dizisini 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, işleme işleminin görev modeliyle 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(); }); }
Poz İşaretçisi görevi çalıştırmanın daha kapsamlı bir uygulaması için kod örneğine bakın.
Sonuçları işleme ve görüntüleme
Poz İşaretçisi, her algılama çalıştırması için bir poseLandmarkerResult
nesnesi döndürür. Sonuç nesnesi, her bir poz yer işaretinin koordinatlarını içerir.
Aşağıda, bu görevin çıkış verilerine ö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 bir yer işareti için hem normalleştirilmiş koordinatları (Landmarks
) hem de dünya koordinatlarını (WorldLandmarks
) içerir.
Çıkış, aşağıdaki normalleştirilmiş koordinatları (Landmarks
) içerir:
x
vey
: Resim genişliği (x
) ve yüksekliği (y
) ile 0,0 ile 1,0 arasında normalleştirilmiş yer işareti koordinatları.z
: Başlangıç noktası kalçaların orta noktasındaki derinlik olan yer işareti derinliği. Değer ne kadar küçükse yer işareti kameraya o kadar yakındır. z büyüklüğü,x
ile yaklaşık olarak 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
,y
vez
: Kalçaların orta noktası kaynak olarak kullanılarak 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ştirmesi 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 çıktısının segmentasyon maskesidir:
Poz İşaretçisi örnek kodunda, görevden döndürülen sonuçların nasıl görüntüleneceği gösterilmektedir. Kod örneğine göz atın.