iOS için poz önemli nokta algılama kılavuzu

Poz İşaretçisi görevi, bir görüntüdeki insan vücuduna ait önemli noktaları tespit etmenizi ya da videosunu izleyin. Bu görevi vücutla ilgili önemli konumları belirlemek, duruşunuzu analiz etmek, ve hareketleri kategorilere ayırabilirsiniz. Bu görev, kullanılabilecek makine öğrenimi (ML) modellerini kullanır. tek resim veya video ile oluşturabilirsiniz. Görev, görüntüdeki vücut duruşunda önemli noktaları gösterir koordinatlarla ve 3 boyutlu dünya koordinatlarında gösterir.

Bu talimatlarda, Poz İşaretçisi'nin iOS uygulamalarıyla nasıl kullanılacağı gösterilmektedir. Kod bu talimatlarda açıklanan örnek şurada bulunabilir: GitHub'a gidin.

Bu Web sayfasını görüntüleyerek bu görevin nasıl yerine getirildiğini demo'ya gidin. Özellikler, modeller ve yapılandırma seçenekleri hakkında daha fazla bilgi daha fazla bilgi edinmek için Genel Bakış.

Kod örneği

MediaPipe Tasks örnek kodu, bir Poz İşaretçisi işlevinin temel uygulamasıdır uygulamasını indirin. Örnekte, cihazlarınızın algılanması için fiziksel bir iOS cihazındaki kamera kullanılmaktadır. pozları tespit edebilir. Uygulama aynı zamanda cihaz galerisinden resim ve videolar yükleyin.

Uygulamayı kendi iOS uygulamanız için bir başlangıç noktası olarak kullanabilir veya buna başvurabilirsiniz mevcut bir uygulamada değişiklik yaparken. Poz İşaretçisi örnek kodu, GitHub'a gidin.

Kodu indirme

Aşağıdaki talimatlarda, örneğin yerel bir kopyasını nasıl oluşturacağınız gösterilmektedir kodu oluşturmak için git komut satırı aracını kullanın.

Örnek kodu indirmek için:

  1. Aşağıdaki komutu kullanarak git deposunu klonlayın:

    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. İsteğe bağlı olarak, git örneğinizi seyrek ödeme yöntemini kullanacak şekilde yapılandırın. Böylece, yalnızca Poz İşaretçisi örnek uygulamasına ait dosyalar için:

    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/pose_landmarker/ios/
    

Örnek kodun yerel sürümünü oluşturduktan sonra, MediaPipe görev kitaplığı, Xcode kullanarak projeyi açın ve uygulamayı çalıştırın. Örneğin, iOS için Kurulum Kılavuzu'na bakın.

Temel bileşenler

Aşağıdaki dosyalarda Poz İşaretçisi örneği için önemli bir kod bulunuyor uygulama:

  • PoseLandmarkerService.swift: İşaretçiyi başlatır, model seçimini işler ve çıkarımı çalıştırır olduğunu unutmayın.
  • CameraViewController: Canlı kamera feed'i giriş modu için kullanıcı arayüzünü uygular ve önemli noktalardır.
  • MediaLibraryViewController.swift: Hareketsiz resim ve video dosyası giriş modu için kullanıcı arayüzünü uygular ve önemli noktaları görselleştirir.

Kurulum

Bu bölümde, geliştirme ortamınızı ve ayarlarınızı yönetmeyle ilgili Poz İşaretçisi'ni kullanmak için projeleri kodlayın. platform sürümü de dahil olmak üzere MediaPipe görevlerini kullanmaya yönelik geliştirme ortamı iOS için kurulum kılavuzuna bakın.

Bağımlılıklar

Poz İşaretçisi, yüklenmesi gereken MediaPipeTasksVision kitaplığını kullanır 360 derece videolu düşünün. Kitaplık hem Swift hem de Objective-C uygulamalarıyla uyumludur. ve dile özel ek kurulum gerektirmez.

CocoaPods'u macOS'e yükleme talimatları için bkz. CocoaPods kurulum kılavuzuna başvurun. Uygulamanız için gerekli kapsülleri içeren bir Podfile oluşturma talimatlarına için CocoaPods'da bulabilirsiniz.

Aşağıdaki kodu kullanarak MediaPipeTasksVision kapsülünü Podfile bölümüne ekleyin:

target 'MyPoseLandmarkerApp' do
  use_frameworks!
  pod 'MediaPipeTasksVision'
end

Uygulamanız birim test hedefleri içeriyorsa iOS'i kurma hakkında daha fazla bilgi edinin. Podfile cihazınız.

Model

MediaPipe Pose İşaretçisi görevi, uyumlu ve eğitilmiş bir paket gerektiriyor. karar veriyorum. Mevcut eğitilmiş modeller hakkında daha fazla bilgi için Poz İşaretçisi, göreve genel bakışı görüntüleyin Modeller bölümünü inceleyin.

download_models.sh komut dosyası kullanarak modelleri indirin ve Xcode kullanarak proje dizininize ekleyin. Örneğin, Xcode projenize dosya eklemeye ilişkin talimatlar için Dosyaları yönetme Xcode'daki diğer klasörler inceleyebilirsiniz.

Modelin yolunu belirtmek için BaseOptions.modelAssetPath özelliğini kullanın daha fazla bilgi edineceksiniz. Kod örneği için sonraki bölüme bakın.

Görevi oluşturma

Poz İşaretçisi görevini başlatıcılardan birini çağırarak oluşturabilirsiniz. İlgili içeriği oluşturmak için kullanılan PoseLandmarker(options:) başlatıcı, yapılandırma için değerleri kabul eder seçenekleri vardır.

Özelleştirilmiş yapılandırma ile başlatılan bir Poz İşaretçisi simgesine ihtiyacınız yoksa seçeneklerini görmek isterseniz PoseLandmarker(modelPath:) başlatıcıyı kullanarak Varsayılan seçeneklerle Poz İşaretçisi. Yapılandırma hakkında daha fazla bilgi için Yapılandırmaya Genel Bakış bölümüne göz atın.

Poz İşaretçisi görevi 3 giriş verisi türünü destekler: hareketsiz resimler, video dosyaları ve canlı video akışları kullanılabilir. PoseLandmarker(modelPath:) varsayılan olarak özel bir görevdir. Video işlemek için görevinizin başlatılmasını istiyorsanız dosya veya canlı video akışı içeriyorsa videoyu belirtmek için PoseLandmarker(options:) öğesini kullanın modunu kullanabilirsiniz. Canlı yayın modu ayrıca poseLandmarkerLiveStreamDelegate yapılandırma seçeneği sunar. Bu seçenek Poz belirten önemli nokta algılama sonuçlarını delegeye göndermek için Poz İşaretçisi eşzamansız olarak ayarlayabilirsiniz.

Görevin nasıl oluşturulacağını görmek için koşu modunuza karşılık gelen sekmeyi seçin ve çıkarım yapın.

Swift

Resim

import MediaPipeTasksVision

let modelPath = Bundle.main.path(forResource: "pose_landmarker",
                                      ofType: "task")

let options = PoseLandmarkerOptions()
options.baseOptions.modelAssetPath = modelPath
options.runningMode = .image
options.minPoseDetectionConfidence = minPoseDetectionConfidence
options.minPosePresenceConfidence = minPosePresenceConfidence
options.minTrackingConfidence = minTrackingConfidence
options.numPoses = numPoses

let poseLandmarker = try PoseLandmarker(options: options)
    

Video

import MediaPipeTasksVision

let modelPath = Bundle.main.path(forResource: "pose_landmarker",
                                      ofType: "task")

let options = PoseLandmarkerOptions()
options.baseOptions.modelAssetPath = modelPath
options.runningMode = .video
options.minPoseDetectionConfidence = minPoseDetectionConfidence
options.minPosePresenceConfidence = minPosePresenceConfidence
options.minTrackingConfidence = minTrackingConfidence
options.numPoses = numPoses

let poseLandmarker = try PoseLandmarker(options: options)
    

Canlı yayın

import MediaPipeTasksVision

// Class that conforms to the `PoseLandmarkerLiveStreamDelegate` protocol and
// implements the method that the pose landmarker calls once it finishes
// performing pose landmark detection in each input frame.
class PoseLandmarkerResultProcessor: NSObject, PoseLandmarkerLiveStreamDelegate {

  func poseLandmarker(
    _ poseLandmarker: PoseLandmarker,
    didFinishDetection result: PoseLandmarkerResult?,
    timestampInMilliseconds: Int,
    error: Error?) {

    // Process the pose landmarker result or errors here.

  }
}

let modelPath = Bundle.main.path(forResource: "pose_landmarker",
                                      ofType: "task")

let options = PoseLandmarkerOptions()
options.baseOptions.modelAssetPath = modelPath
options.runningMode = .liveStream
options.minPoseDetectionConfidence = minPoseDetectionConfidence
options.minPosePresenceConfidence = minPosePresenceConfidence
options.minTrackingConfidence = minTrackingConfidence
options.numPoses = numPoses

// Assign an object of the class to the `poseLandmarkerLiveStreamDelegate`
// property.
let processor = PoseLandmarkerResultProcessor()
options.poseLandmarkerLiveStreamDelegate = processor

let poseLandmarker = try PoseLandmarker(options: options)
    

Objective-C

Resim

@import MediaPipeTasksVision;

NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"pose_landmarker"
                                                      ofType:@"task"];

MPPPoseLandmarkerOptions *options = [[MPPPoseLandmarkerOptions alloc] init];
options.baseOptions.modelAssetPath = modelPath;
options.runningMode = MPPRunningModeImage;
options.minPoseDetectionConfidence = minPoseDetectionConfidence;
options.minPosePresenceConfidence = minPosePresenceConfidence;
options.minTrackingConfidence = minTrackingConfidence;
options.numPoses = numPoses;

MPPPoseLandmarker *poseLandmarker =
  [[MPPPoseLandmarker alloc] initWithOptions:options error:nil];
    

Video

@import MediaPipeTasksVision;

NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"pose_landmarker"
                                                      ofType:@"task"];

MPPPoseLandmarkerOptions *options = [[MPPPoseLandmarkerOptions alloc] init];
options.baseOptions.modelAssetPath = modelPath;
options.runningMode = MPPRunningModeVideo;
options.minPoseDetectionConfidence = minPoseDetectionConfidence;
options.minPosePresenceConfidence = minPosePresenceConfidence;
options.minTrackingConfidence = minTrackingConfidence;
options.numPoses = numPoses;

MPPPoseLandmarker *poseLandmarker =
  [[MPPPoseLandmarker alloc] initWithOptions:options error:nil];
    

Canlı yayın

@import MediaPipeTasksVision;

// Class that conforms to the `MPPPoseLandmarkerLiveStreamDelegate` protocol
// and implements the method that the pose landmarker calls once it finishes
// performing pose landmarks= detection in each input frame.

@interface APPPoseLandmarkerResultProcessor : NSObject 

@end

@implementation APPPoseLandmarkerResultProcessor

-   (void)poseLandmarker:(MPPPoseLandmarker *)poseLandmarker
    didFinishDetectionWithResult:(MPPPoseLandmarkerResult *)poseLandmarkerResult
         timestampInMilliseconds:(NSInteger)timestampInMilliseconds
                           error:(NSError *)error {

    // Process the pose landmarker result or errors here.

}

@end

NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"pose_landmarker"
                                                      ofType:@"task"];

MPPPoseLandmarkerOptions *options = [[MPPPoseLandmarkerOptions alloc] init];
options.baseOptions.modelAssetPath = modelPath;
options.runningMode = MPPRunningModeLiveStream;
options.minPoseDetectionConfidence = minPoseDetectionConfidence;
options.minPosePresenceConfidence = minPosePresenceConfidence;
options.minTrackingConfidence = minTrackingConfidence;
options.numPoses = numPoses;

// Assign an object of the class to the `poseLandmarkerLiveStreamDelegate`
// property.
APPPoseLandmarkerResultProcessor *processor =
  [APPPoseLandmarkerResultProcessor new];
options.poseLandmarkerLiveStreamDelegate = processor;

MPPPoseLandmarker *poseLandmarker =
  [[MPPPoseLandmarker alloc] initWithOptions:options error:nil];
    

Not: Video modunu veya canlı yayın modunu kullanırsanız Poz İşaretçisi özelliği her karede avuç içi algılama modelini tetiklemekten kaçınmak için izleme özelliğini kullanabilirsiniz. gecikmeyi azaltabilir.

Yapılandırma seçenekleri

Bu görev, iOS uygulamaları için aşağıdaki yapılandırma seçeneklerine sahiptir:

Seçenek Adı Açıklama Değer Aralığı Varsayılan Değer
running_mode Görev için çalışma modunu ayarlar. Üç tane var modlar:

IMAGE: Tek resimli giriş modu.

VIDEO: Bir videonun kodu çözülmüş karelerine yönelik mod.

LIVE_STREAM: Giriş canlı yayını modu kameradan alınan veriler gibi. Bu modda, poseLandmarkerLiveStreamDelegate şuna ayarlanmalıdır: öğesini uygulayan bir sınıf örneği PoseLandmarkerLiveStreamDelegate eşzamansız bir şekilde poz önemli nokta algılaması gerçekleştirme.
{RunningMode.image, RunningMode.video, RunningMode.liveStream} RunningMode.image
num_poses tarafından algılanabilecek maksimum poz sayısı Poz İşaretçisi. Integer > 0 1
min_pose_detection_confidence Poz algılamanın olması için gereken minimum güven puanı kabul edilir. Float [0.0,1.0] 0.5
min_pose_presence_confidence Pozlamanın minimum güven puanı puanının yüksek olması gerekir. Float [0.0,1.0] 0.5
min_tracking_confidence Poz izleme için minimum güven puanı kabul edilir. Float [0.0,1.0] 0.5
output_segmentation_masks Poz İşaretçisi'nin algılanan öğe için bir segmentasyon maskesi verip vermediği poz verin. Boolean False
result_callback Sonuç işleyiciyi işaretleyici sonuçlarını alacak şekilde ayarlar otomatik olarak senkronize edilir. Yalnızca koşu modu LIVE_STREAM olarak ayarlandığında kullanılabilir ResultListener N/A

Canlı yayın yapılandırması

Koşu modu canlı yayın yapacak şekilde ayarlandığında, Poz İşaretçisi ek poseLandmarkerLiveStreamDelegate yapılandırma seçeneği sunar. Poz İşaretçisinin poz önemli nokta algılama sonuçları vermesini sağlar eşzamansız olarak ayarlayabilirsiniz. Yetki verilen kişi poseLandmarker(_:didFinishDetection:timestampInMilliseconds:error:) yöntem, yapılan pozun sonuçlarını işledikten sonra Poz İşaretçisi tarafından çağrılan her karede önemli nokta algılamasını sağlar.

Seçenek adı Açıklama Değer Aralığı Varsayılan Değer
poseLandmarkerLiveStreamDelegate Poz İşaretçisi'nin pozun sonuçlarını almasını sağlar önemli nokta algılaması eşzamansız olarak yapılabilir. İlgili sınıfa için bir örnek değer bu mülke ayarlanması durumunda, poseLandmarker(_:didFinishDetection:timestampInMilliseconds:error:) yöntemidir. Geçerli değil Ayarlanmadı

Verileri hazırlama

Önce giriş resmini veya çerçeveyi bir MPImage nesnesine dönüştürmeniz gerekiyor Poz İşaretçisi'ne iletebilir. MPImage, farklı iOS görsel türlerini destekler ve çıkarım için bunları herhangi bir çalışma modunda kullanabilir. Daha fazla MPImage hakkında bilgi için MPImage API

Kullanım alanınıza ve cihazınızın çalışma moduna göre bir iOS resim biçimi seçin. gerektirir.MPImage, UIImage, CVPixelBuffer ve CMSampleBuffer iOS resim biçimi.

UIImage

UIImage biçimi, aşağıdaki koşu modları için çok uygundur:

  • Resimler: uygulama paketi, kullanıcı galerisi veya dosya sisteminden şu şekilde biçimlendirilmiş resimler: UIImage resim, MPImage nesnesine dönüştürülebilir.

  • Videolar: AVAssetImageGenerator yöntemini kullanın ve CGImage daha sonra bunları UIImage resme dönüştürün.

Swift

// Load an image on the user's device as an iOS `UIImage` object.

// Convert the `UIImage` object to a MediaPipe's Image object having the default
// orientation `UIImage.Orientation.up`.
let image = try MPImage(uiImage: image)
    

Objective-C

// Load an image on the user's device as an iOS `UIImage` object.

// Convert the `UIImage` object to a MediaPipe's Image object having the default
// orientation `UIImageOrientationUp`.
MPImage *image = [[MPPImage alloc] initWithUIImage:image error:nil];
    

Örnek, bir MPImage öğesini varsayılan olarak başlatır UIImage.Orientation.Up Yön. MPImage işlemini, desteklenen herhangi bir UIImage.Orientation değerler. Poz İşaretçisi, .upMirrored gibi yansıyan yönleri desteklemez .downMirrored, .leftMirrored, .rightMirrored.

UIImage hakkında daha fazla bilgi için UIImage Apple Developer uygulamasına bakın Dokümanlar.

CVPixelBuffer

CVPixelBuffer biçimi, çerçeve oluşturan uygulamalar için uygundur ve iOS CoreImage'i kullanmanız gerekir işleme çerçevesidir.

CVPixelBuffer biçimi, aşağıdaki koşu modları için çok uygundur:

  • Resimler: Biraz işlemden sonra CVPixelBuffer resim oluşturan uygulamalar konum işaretçisi, iOS'in CoreImage çerçevesi kullanılarak Poz İşaretçisi'ne gönderilebilir. resim çalıştırma moduna geçiyorum.

  • Videolar: Video kareleri, video kareleri için CVPixelBuffer biçimine dönüştürülebilir. ve daha sonra video modunda Poz İşaretçisi'ne gönderilir.

  • canlı yayın: Kare oluşturmak için iOS kamera kullanan uygulamalar dönüştürülebilir gönderilmeden önce işlenmek üzere CVPixelBuffer biçiminde Canlı yayın modunda Poz İşaretçisi.

Swift

// Obtain a CVPixelBuffer.

// Convert the `CVPixelBuffer` object to a MediaPipe's Image object having the default
// orientation `UIImage.Orientation.up`.
let image = try MPImage(pixelBuffer: pixelBuffer)
    

Objective-C

// Obtain a CVPixelBuffer.

// Convert the `CVPixelBuffer` object to a MediaPipe's Image object having the
// default orientation `UIImageOrientationUp`.
MPImage *image = [[MPPImage alloc] initWithUIImage:image error:nil];
    

CVPixelBuffer hakkında daha fazla bilgi için CVPixelBuffer Apple'a bakın Geliştirici Dokümanlar.

CMSampleBuffer

CMSampleBuffer biçimi, tek tip bir medya türünün medya örneklerini depolar ve için son derece uygun. iOS kameralardaki canlı kareler iOS tarafından CMSampleBuffer biçiminde eşzamansız olarak yayınlanır AVCaptureVideoDataOutput.

Swift

// Obtain a CMSampleBuffer.

// Convert the `CMSampleBuffer` object to a MediaPipe's Image object having the default
// orientation `UIImage.Orientation.up`.
let image = try MPImage(sampleBuffer: sampleBuffer)
    

Objective-C

// Obtain a `CMSampleBuffer`.

// Convert the `CMSampleBuffer` object to a MediaPipe's Image object having the
// default orientation `UIImageOrientationUp`.
MPImage *image = [[MPPImage alloc] initWithSampleBuffer:sampleBuffer error:nil];
    

CMSampleBuffer hakkında daha fazla bilgi için CMSampleBuffer Apple'a bakın Geliştirici Dokümanlar.

Görevi çalıştırma

Poz İşaretçisi'ni çalıştırmak için, atanan seçeneğe özel detect() yöntemini kullanın çalışma modu:

  • Hareketsiz resim: detect(image:)
  • Video: detect(videoFrame:timestampInMilliseconds:)
  • Canlı yayın: detectAsync(image:timestampInMilliseconds:)

Aşağıdaki kod örnekleri, Pose İşaretleyici'nin nasıl çalıştırılacağına ilişkin şu farklı koşu modları var:

Swift

Resim

let result = try poseLandmarker.detect(image: image)
    

Video

let result = try poseLandmarker.detect(
  videoFrame: image,
  timestampInMilliseconds: timestamp)
    

Canlı yayın

try poseLandmarker.detectAsync(
  image: image,
  timestampInMilliseconds: timestamp)
    

Objective-C

Resim

MPPPoseLandmarkerResult *result =
  [poseLandmarker detectImage:image error:nil];
    

Video

MPPPoseLandmarkerResult *result =
  [poseLandmarker detectVideoFrame:image
           timestampInMilliseconds:timestamp
                             error:nil];
    

Canlı yayın

BOOL success =
  [poseLandmarker detectAsyncImage:image
           timestampInMilliseconds:timestamp
                             error:nil];
    

Poz İşaretçisi kod örneği, bu modlardan her birinin uygulamalarını göstermektedir. ayrıntılı olarak detect(image:), detect(videoFrame:timestampInMilliseconds:), ve detectAsync(image:timestampInMilliseconds:). Örnek kod, işlem modları arasında geçiş yapmasını sağlar. Bu modlar, kullanımınız için gerekli olmayabilir. dava açın.

Aşağıdakileri göz önünde bulundurun:

  • Video modunda veya canlı yayın modunda çalışırken ayrıca Poz İşaretçisi görevine giriş çerçevesinin zaman damgası.

  • Resim veya video modunda çalışırken, Poz İşaretçisi görevi öğesini, giriş resmini veya çerçevesini işlemeyi bitirene kadar devam ettirir. Alıcı: mevcut iş parçacığını engellemekten kaçının, işlemeyi arka planda yürütün iOS kullanan iş parçacığı Sevkiyat veya NSOperation çerçeveleri.

  • Canlı yayın modunda çalışırken Poz İşaretçisi görevi hemen geri dönüyor ve mevcut ileti dizisini engellemez. İçeriği poseLandmarker(_:didFinishDetection:timestampInMilliseconds:error:) yöntem her giriş çerçevesini işledikten sonra poz belirginleştirici sonucuyla değiştirirsiniz. İlgili içeriği oluşturmak için kullanılan Poz İşaretçisi, bu yöntemi özel bir seri üzerinde eşzamansız olarak çağırır sevk sırası oluşturun. Sonuçları kullanıcı arayüzünde görüntülemek için, ana sıraya eklenir. detectAsync işlevi, Poz İşaretçisi görevi başka bir öğeyi işlemekle meşgulken çağrılır Poz İşaretçisi, yeni giriş çerçevesini yok sayar.

Sonuçları işleme ve görüntüleme

Çıkarım yapıldığında, Poz İşaretçisi görevi bir PoseLandmarkerResult döndürür. konumunu da ekleyebilirsiniz.

Aşağıda, bu görevdeki çı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ış, hem normalleştirilmiş koordinatlar (Landmarks) hem de dünya içeriyor koordinatları (WorldLandmarks) girin.

Çıkış şu normalleştirilmiş koordinatları içerir (Landmarks):

  • x ve y: Önemli nokta koordinatları: resim genişliği (x) ve yüksekliği (y).

  • z: Yer işareti derinliği; kalçaların orta noktasına kadar gelen derinliği kaynak. Değer ne kadar küçükse önemli nokta kameraya o kadar yakındır. İlgili içeriği oluşturmak için kullanılan z büyüklüğü, x ile hemen hemen 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 ve z: Metre cinsinden gerçek 3 boyutlu koordinatlar kalçanın orta noktasını bulun.

  • visibility: Önemli noktanın resimde görünür olma olasılığı.

Aşağıdaki resimde, görev çıkışının görselleştirmesi gösterilmektedir:

İsteğe bağlı segmentasyon maskesi, her bir pikselin ait olma olasılığını temsil eder. geri bildirim gönderebilirsiniz. Aşağıdaki resimde, Google Etiket Yöneticisi'nin görev çıkışı:

Poz İşaretçisi örnek kodu, Poz İşaretçisi'nin nasıl görüntüleneceğini gösterir. sonuç.