MediaPipe Pose Interester görevi, bir görüntü veya videodaki insan vücudunun önemli noktalarını tespit etmenizi sağlar. Bu görevi önemli vücut konumlarını belirlemek, duruşunuzu analiz etmek ve hareketleri sınıflandırmak için kullanabilirsiniz. Bu görev, tek görüntüler veya videolarla çalışan makine öğrenimi (ML) modellerini kullanır. Görev, vücut pozisyonu yer işaretlerini resim koordinatlarında ve 3 boyutlu dünya koordinatlarında üretir.
Bu talimatlar, Pose Signer'ın web ve JavaScript uygulamaları için nasıl kullanılacağını gösterir. 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 Referanslayıcı için örnek kod, bu görevin JavaScript'te eksiksiz bir şekilde uygulanmasını referans olarak sağlamaktadır. Bu kod, bu görevi test etmenize ve kendi poz işaretleyici uygulamanızı geliştirmeye başlamanıza yardımcı olur. Yalnızca web tarayıcınızı kullanarak Pose Monumenter örnek kodunu görüntüleyebilir, çalıştırabilir ve düzenleyebilirsiniz.
Kurulum
Bu bölümde, özellikle Konum İşaretçisi'ni kullanmak için geliştirme ortamınızı ayarlamaya yönelik 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 bilgiler için Web kurulum kılavuzuna bakın.
JavaScript paketleri
Pose Referans Aracı kodu, MediaPipe @mediapipe/tasks-vision
NPM paketi aracılığıyla kullanılabilir. Bu kitaplıkları, platform Kurulum kılavuzundaki talimatları uygulayarak bulup indirebilirsiniz.
Aşağıdaki komutu kullanarak gerekli paketleri AİOY ü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 isterseniz aşağıdaki kodu HTML dosyanızdaki <head> etiketine 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 pozisyon simgesi için bu görevle uyumlu, eğitilmiş bir model gerekir. Posegrounder için eğitilmiş modeller hakkında daha fazla bilgi almak üzere göreve genel bakış Modeller bölümüne bakın.
Bir model seçip indirin ve ardından proje dizininizde depolayın:
<dev-project-root>/app/shared/models/
Görevi oluşturma
Çıkarımları yapmak üzere görev hazırlamak için Posegrounder createFrom...()
işlevlerinden birini kullanın. createFromModelPath()
işlevini, eğitilen model dosyasına giden göreli veya mutlak bir yolla kullanın.
Modeliniz belleğe zaten yüklenmişse createFromModelBuffer()
yöntemini kullanabilirsiniz.
Aşağıdaki kod örneği, görevi ayarlamak için createFromOptions()
işlevinin kullanımını gösterir. createFromOptions()
işlevi, Konfigürasyon Aracı'nı yapılandırma seçenekleriyle özelleştirmenize olanak tanır. Yapılandırma seçenekleri hakkında daha fazla bilgi edinmek için Yapılandırma seçenekleri bölümüne bakın.
Aşağıdaki kod, görevin özel seçeneklerle nasıl oluşturulacağını ve yapılandırılacağını gösterir:
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 modu. VİDEO: Bir videonun kodu çözülmüş kareleri veya kamera gibi giriş verilerinin canlı yayınındaki mod. |
{IMAGE, VIDEO } |
IMAGE |
numPoses |
Pose İşaretleyici tarafından tespit edilebilen maksimum poz sayısı. | Integer > 0 |
1 |
minPoseDetectionConfidence |
Poz 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 önemli nokta algılamasında pozisyon varlığı puanının minimum güven puanı. | Float [0.0,1.0] |
0.5 |
minTrackingConfidence |
Poz izlemenin başarılı olarak kabul edilmesi için gereken minimum güven puanı. | Float [0.0,1.0] |
0.5 |
outputSegmentationMasks |
Posegrounder'ın algılanan poz için segmentasyon maskesi oluşturup oluşturmadığı. | Boolean |
False |
Verileri hazırlama
Posegrounder, resimlerdeki pozları ana makine tarayıcısının desteklediği herhangi bir biçimde algılayabilir. Görev; yeniden boyutlandırma, döndürme ve değer normalleştirmesi dahil olmak üzere, veri girişi ön işlemesini de yönetir. Videolardaki önemli nokta pozisyonları için API'yi kullanarak pozların videoda ne zaman gerçekleştiğini belirlemek üzere karenin zaman damgasını kullanarak her seferinde bir kareyi hızlı bir şekilde işleyebilirsiniz.
Görevi çalıştırma
Pose Referans Aracı, çıkarımları tetiklemek için detect()
(koşu moduyla IMAGE
) ve detectForVideo()
(koşu moduyla VIDEO
) yöntemlerini kullanır. Görev; verileri işler, önemli nokta duruşlarını dener ve ardından sonuçları raporlar.
Konum İşaretçisi detect()
ve detectForVideo()
yöntemlerine yapılan çağrılar eşzamanlı olarak çalışır ve kullanıcının araya giren iş parçacığı engellenir. Video karelerindeki pozları bir cihazın kamerasından 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 çalışanları uygulayarak bunu önleyebilirsiniz.
Aşağıdaki kod, işlemenin görev modeliyle nasıl yürütüldüğünü gösterir:
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 Builderer görevi çalıştırmayla ilgili daha kapsamlı bir uygulama için kod örneğine göz atın.
Sonuçları işleme ve görüntüleme
Pose İşaretleyici, her algılama çalıştırması için bir poseLandmarkerResult
nesnesi döndürür. Sonuç nesnesi, her bir poz önemli noktası için koordinatları içerir.
Aşağıda, bu görevden alınan çıkış verilerinin bir örneği gösterilmektedir:
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ış aşağıdaki normalleştirilmiş koordinatları (Landmarks
) içerir:
x
vey
: Önemli nokta koordinatları, resim genişliği (x
) ve yüksekliğine (y
) göre 0,0 ile 1,0 arasında normalleştirilmiştir.z
: Referans noktası olarak kalçaların orta noktasındaki derinliğin yer aldığı belirgin nokta derinliği. Değer ne kadar küçükse yer işareti kameraya o kadar yakın olur. Z'nin büyüklüğü, yaklaşık olarakx
ile aynı ölçeği kullanır.visibility
: Önemli noktanın resimde görünür olma olasılığı.
Çıkış şu dünya koordinatlarını içerir (WorldLandmarks
):
x
,y
vez
: Kalçaların orta noktası başlangıç noktası olmak üzere metre cinsinden gerçek dünyadan 3 boyutlu koordinatlar.visibility
: Önemli noktanın resimde görünür olma olasılığı.
Aşağıdaki resimde, görev çıkışının görseli 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 görüntü, görev çıktısının bir segmentasyon maskesidir:
Pose Referans Aracı örnek kodu, görevden döndürülen sonuçların nasıl görüntüleneceğini gösterir. Kod örneğine göz atın.