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, 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 ve y: 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 ve z: 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:

Meditasyon yapan bir kadın. Modelin duruşu, uzuvlarının ve gövdesinin konumunu gösteren bir iskeletle vurgulanır.

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

Önceki resmin, kadının şeklini ana hatlarıyla gösteren segmentasyon maskesi

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.