Web için önemli nokta algılama rehberi

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:

  • x ve y: Ö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üğü, kabaca x ile 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 ve z: 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:

Meditasyon pozisyonunda bir kadın. Her pozu, uzuvlarının ve gövdesinin konumunu gösteren bir tel çerçeveyle vurgulanıyor.

İ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:

Önceki resmin, kadının şeklini belirten segmentasyon maskesi

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.