Udhëzues për zbulimin e pikës referimi të pozicionit për iOS

Detyra Pose Landmarker ju lejon të zbuloni pika referimi të trupave njerëzorë në një imazh ose video. Ju mund ta përdorni këtë detyrë për të identifikuar vendndodhjet kryesore të trupit, për të analizuar qëndrimin dhe për të kategorizuar lëvizjet. Kjo detyrë përdor modele të mësimit të makinerive (ML) që funksionojnë me imazhe ose video të vetme. Detyra nxjerr pikat referuese të pozës së trupit në koordinatat e imazhit dhe në koordinatat botërore 3-dimensionale.

Këto udhëzime ju tregojnë se si të përdorni Pose Landmarker me aplikacionet iOS. Shembulli i kodit i përshkruar në këto udhëzime është i disponueshëm në GitHub .

Ju mund ta shihni këtë detyrë në veprim duke parë këtë demonstrim në ueb . Për më shumë informacion rreth aftësive, modeleve dhe opsioneve të konfigurimit të kësaj detyre, shihni Përmbledhjen .

Shembull kodi

Kodi i shembullit të MediaPipe Tasks është një zbatim bazë i një aplikacioni Pose Landmarker për iOS. Shembulli përdor kamerën në një pajisje fizike iOS për të zbuluar pozat në një transmetim të vazhdueshëm video. Aplikacioni gjithashtu mund të zbulojë pozat në imazhe dhe video nga galeria e pajisjes.

Mund ta përdorni aplikacionin si pikënisje për aplikacionin tuaj iOS ose t'i referoheni kur modifikoni një aplikacion ekzistues. Shembulli i kodit Pose Landmarker është pritur në GitHub .

Shkarkoni kodin

Udhëzimet e mëposhtme ju tregojnë se si të krijoni një kopje lokale të kodit shembull duke përdorur mjetin e linjës së komandës git .

Për të shkarkuar kodin shembull:

  1. Klononi depon e git duke përdorur komandën e mëposhtme:

    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. Opsionale, konfiguroni shembullin tuaj të git për të përdorur arkëtimin e rrallë, në mënyrë që të keni vetëm skedarët për shembullin e aplikacionit Pose Landmarker:

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

Pas krijimit të një versioni lokal të kodit shembull, mund të instaloni bibliotekën e detyrave MediaPipe, të hapni projektin duke përdorur Xcode dhe të ekzekutoni aplikacionin. Për udhëzime, shihni Udhëzuesin e konfigurimit për iOS .

Komponentët kryesorë

Skedarët e mëposhtëm përmbajnë kodin vendimtar për shembullin e aplikacionit Pose Landmarker:

  • PoseLandmarkerService.swift : Inicializon pikëshënuesin, trajton zgjedhjen e modelit dhe ekzekuton konkluzionet në të dhënat hyrëse.
  • CameraViewController : Zbaton ndërfaqen e përdoruesit për modalitetin e hyrjes së furnizimit të drejtpërdrejtë të kamerës dhe vizualizon pikat e referimit.
  • MediaLibraryViewController.swift : Zbaton ndërfaqen e përdoruesit për modalitetin e futjes së skedarëve të imazheve dhe videove dhe vizualizon pikat e referimit.

Konfigurimi

Ky seksion përshkruan hapat kryesorë për konfigurimin e mjedisit tuaj të zhvillimit dhe projekteve të kodit për të përdorur Pose Landmarker. Për informacion të përgjithshëm mbi konfigurimin e mjedisit tuaj të zhvillimit për përdorimin e detyrave të MediaPipe, duke përfshirë kërkesat e versionit të platformës, shihni udhëzuesin e konfigurimit për iOS .

varësitë

Pose Landmarker përdor bibliotekën MediaPipeTasksVision , e cila duhet të instalohet duke përdorur CocoaPods. Biblioteka është e pajtueshme me të dy aplikacionet Swift dhe Objective-C dhe nuk kërkon ndonjë konfigurim shtesë specifik për gjuhën.

Për udhëzime për instalimin e CocoaPods në macOS, referojuni udhëzuesit të instalimit të CocoaPods . Për udhëzime se si të krijoni një Podfile me pods-et e nevojshme për aplikacionin tuaj, referojuni Përdorimit të CocoaPods .

Shtoni podin MediaPipeTasksVision në Podfile duke përdorur kodin e mëposhtëm:

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

Nëse aplikacioni juaj përfshin objektiva testimi të njësisë, referojuni Udhëzuesit të konfigurimit për iOS për informacion shtesë mbi konfigurimin e skedarit tuaj Podfile .

Model

Detyra MediaPipe Pose Landmarker kërkon një paketë të trajnuar që është në përputhje me këtë detyrë. Për më shumë informacion mbi modelet e trajnuara të disponueshme për Pose Landmarker, shihni seksionin Modelet e përmbledhjes së detyrave.

Përdorni skriptin download_models.sh për të shkarkuar modelet dhe për ta shtuar atë në drejtorinë e projektit tuaj duke përdorur Xcode. Për udhëzime se si të shtoni skedarë në projektin tuaj Xcode, referojuni Menaxhimi i skedarëve dhe dosjeve në projektin tuaj Xcode .

Përdorni veçorinë BaseOptions.modelAssetPath për të specifikuar shtegun drejt modelit në paketën tuaj të aplikacionit. Për një shembull kodi, shihni seksionin tjetër.

Krijo detyrën

Ju mund të krijoni detyrën Pose Landmarker duke thirrur një nga inicializuesit e saj. Inicializuesi PoseLandmarker(options:) pranon vlerat për opsionet e konfigurimit.

Nëse nuk keni nevojë për një Pose Landmarker të inicializuar me opsione të personalizuara të konfigurimit, mund të përdorni iniciatorin PoseLandmarker(modelPath:) për të krijuar një Pose Landmarker me opsionet e paracaktuara. Për më shumë informacion rreth opsioneve të konfigurimit, shihni Përmbledhjen e konfigurimit .

Detyra Pose Landmarker mbështet 3 lloje të dhënash hyrëse: imazhe statike, skedarë video dhe transmetime video të drejtpërdrejta. Si parazgjedhje, PoseLandmarker(modelPath:) inicializon një detyrë për imazhet statike. Nëse dëshironi që detyra juaj të inicializohet për të përpunuar skedarë video ose transmetime video të drejtpërdrejta, përdorni PoseLandmarker(options:) për të specifikuar modalitetin e ekzekutimit të videos ose transmetimit të drejtpërdrejtë. Modaliteti i transmetimit të drejtpërdrejtë kërkon gjithashtu opsionin shtesë të konfigurimit poseLandmarkerLiveStreamDelegate , i cili i mundëson Pose Landmarker t'i japë delegatit rezultatet e zbulimit të pikës referuese të pozës në mënyrë asinkrone.

Zgjidhni skedën që korrespondon me modalitetin tuaj të ekzekutimit për të parë se si të krijoni detyrën dhe të ekzekutoni konkluzionet.

Swift

Imazhi

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)
    

Transmetim i drejtpërdrejtë

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)
    

Objektivi-C

Imazhi

@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];
    

Transmetim i drejtpërdrejtë

@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];
    

Shënim: Nëse përdorni modalitetin e videos ose modalitetin e transmetimit të drejtpërdrejtë, Pose Landmarker përdor gjurmimin për të shmangur aktivizimin e modelit të zbulimit të pëllëmbës në çdo kornizë, gjë që ndihmon në uljen e vonesës.

Opsionet e konfigurimit

Kjo detyrë ka opsionet e mëposhtme të konfigurimit për aplikacionet iOS:

Emri i opsionit Përshkrimi Gama e vlerave Vlera e paracaktuar
running_mode Vendos modalitetin e ekzekutimit për detyrën. Ekzistojnë tre mënyra:

IMAGE: Modaliteti për hyrjet e një imazhi të vetëm.

VIDEO: Modaliteti për kornizat e dekoduara të një videoje.

LIVE_STREAM: Modaliteti për një transmetim të drejtpërdrejtë të të dhënave hyrëse, si p.sh. nga një aparat fotografik. Në këtë modalitet, poseLandmarkerLiveStreamDelegate duhet të vendoset në një shembull të një klase që zbaton PoseLandmarkerLiveStreamDelegate për të marrë rezultatet e kryerjes së zbulimit të pikës referuese të pozave në mënyrë asinkrone.
{ RunningMode.image, RunningMode.video, RunningMode.liveStream } RunningMode.image
num_poses Numri maksimal i pozave që mund të zbulohet nga Shënuesi i Pozës. Integer > 0 1
min_pose_detection_confidence Rezultati minimal i besimit për zbulimin e pozës që të konsiderohet i suksesshëm. Float [0.0,1.0] 0.5
min_pose_presence_confidence Rezultati minimal i besimit të rezultatit të pranisë së pozës në zbulimin e pikës referuese të pozës. Float [0.0,1.0] 0.5
min_tracking_confidence Rezultati minimal i besimit për ndjekjen e pozës që të konsiderohet i suksesshëm. Float [0.0,1.0] 0.5
output_segmentation_masks Nëse Pose Landmarker nxjerr një maskë segmentimi për pozën e zbuluar. Boolean False
result_callback Vendos dëgjuesin e rezultateve që të marrë rezultatet e pikë referimit në mënyrë asinkrone kur Pose Landmarker është në modalitetin e transmetimit të drejtpërdrejtë. Mund të përdoret vetëm kur modaliteti i ekzekutimit është caktuar në LIVE_STREAM ResultListener N/A

Konfigurimi i transmetimit të drejtpërdrejtë

Kur modaliteti i drejtimit vendoset në transmetim të drejtpërdrejtë, Pose Landmarker kërkon opsionin shtesë të konfigurimit poseLandmarkerLiveStreamDelegate , i cili i mundëson Pose Landmarker të japë rezultatet e zbulimit të pikës referuese të pozës në mënyrë asinkrone. I deleguari duhet të zbatojë metodën poseLandmarker(_:didFinishDetection:timestampInMilliseconds:error:) , të cilën Pose Landmarker e quan pas përpunimit të rezultateve të kryerjes së zbulimit të pikës referuese të pozës në çdo kornizë.

Emri i opsionit Përshkrimi Gama e vlerave Vlera e paracaktuar
poseLandmarkerLiveStreamDelegate Mundëson Pose Landmarker të marrë rezultatet e kryerjes së zbulimit të pikës referuese të pozave në mënyrë asinkrone në modalitetin e transmetimit të drejtpërdrejtë. Klasa instanca e së cilës është caktuar në këtë veti duhet të zbatojë metodën poseLandmarker(_:didFinishDetection:timestampInMilliseconds:error:) . E pazbatueshme Nuk është vendosur

Përgatitni të dhënat

Ju duhet të konvertoni imazhin ose kornizën hyrëse në një objekt MPImage përpara se t'ia kaloni atë në Pose Landmarker. MPImage mbështet lloje të ndryshme të formateve të imazhit iOS dhe mund t'i përdorë ato në çdo modalitet ekzekutimi për përfundime. Për më shumë informacion rreth MPImage , referojuni MPImage API .

Zgjidhni një format imazhi iOS bazuar në rastin tuaj të përdorimit dhe mënyrën e ekzekutimit që kërkon aplikacioni juaj. MPImage pranon formatet e imazhit UIImage , CVPixelBuffer dhe CMSampleBuffer iOS.

UIIimazh

Formati UIImage është i përshtatshëm për mënyrat e mëposhtme të funksionimit:

  • Imazhet: imazhet nga një grup aplikacioni, galeri përdoruesish ose sistem skedarësh të formatuar si imazhe UIImage mund të konvertohen në një objekt MPImage .

  • Videot: përdorni AVAssetImageGenerator për të nxjerrë kornizat e videos në formatin CGImage , më pas i konvertoni ato në imazhe UIImage .

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)
    

Objektivi-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];
    

Shembulli inicializon një MPImage me orientimin e paracaktuar UIImage.Orientation.Up . Mund të inicializoni një MPImage me ndonjë nga vlerat e mbështetura të UIImage.Orientation . Pose Landmarker nuk mbështet orientime të pasqyruara si .upMirrored , .downMirrored , .leftMirrored , .rightMirrored .

Për më shumë informacion rreth UIImage , referojuni Dokumentacionit të Zhvilluesit të UIImage Apple .

CVPixelBuffer

Formati CVPixelBuffer është i përshtatshëm për aplikacionet që gjenerojnë korniza dhe përdorin kornizën iOS CoreImage për përpunim.

Formati CVPixelBuffer është i përshtatshëm për mënyrat e mëposhtme të funksionimit:

  • Imazhet: aplikacionet që gjenerojnë imazhe CVPixelBuffer pas disa përpunimit duke përdorur kornizën CoreImage të iOS, mund të dërgohen te Pose Landmarker në modalitetin e ekzekutimit të imazhit.

  • Videot: kornizat e videove mund të konvertohen në formatin CVPixelBuffer për përpunim dhe më pas të dërgohen në Pose Landmarker në modalitetin e videos.

  • transmetim i drejtpërdrejtë: aplikacionet që përdorin një kamerë iOS për të gjeneruar korniza mund të konvertohen në formatin CVPixelBuffer për përpunim përpara se të dërgohen në Pose Landmarker në modalitetin e transmetimit të drejtpërdrejtë.

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)
    

Objektivi-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];
    

Për më shumë informacion rreth CVPixelBuffer , referojuni Dokumentacionit të Zhvilluesit të Apple CVPixelBuffer .

CMSampleBuffer

Formati CMSampleBuffer ruan mostrat e mediave të një lloji uniform të medias dhe është i përshtatshëm për modalitetin e ekzekutimit të transmetimit të drejtpërdrejtë. Kornizat e drejtpërdrejta nga kamerat iOS shpërndahen në mënyrë asinkrone në formatin CMSampleBuffer nga iOS 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)
    

Objektivi-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];
    

Për më shumë informacion rreth CMSampleBuffer , referojuni Dokumentacionit të Zhvilluesit të Apple CMSampleBuffer .

Drejtoni detyrën

Për të ekzekutuar Pose Landmarker, përdorni metodën detect() specifike për modalitetin e caktuar të funksionimit:

  • Imazhi i palëvizshëm: detect(image:)
  • Video: detect(videoFrame:timestampInMilliseconds:)
  • Transmetimi i drejtpërdrejtë: detectAsync(image:timestampInMilliseconds:)

Shembujt e mëposhtëm të kodit tregojnë shembuj të thjeshtë se si të ekzekutoni Pose Landmarker në këto mënyra të ndryshme drejtimi:

Swift

Imazhi

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

Video

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

Transmetim i drejtpërdrejtë

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

Objektivi-C

Imazhi

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

Video

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

Transmetim i drejtpërdrejtë

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

Shembulli i kodit Pose Landmarker tregon implementimet e secilit prej këtyre mënyrave në më shumë detaje detect(image:) , detect(videoFrame:timestampInMilliseconds:) dhe detectAsync(image:timestampInMilliseconds:) . Kodi shembull i lejon përdoruesit të kalojë ndërmjet mënyrave të përpunimit që mund të mos kërkohen për rastin tuaj të përdorimit.

Vini re sa vijon:

  • Kur ekzekutoni në modalitetin e videos ose në modalitetin e transmetimit të drejtpërdrejtë, duhet të jepni gjithashtu vulën kohore të kornizës së hyrjes në detyrën Pose Landmarker.

  • Kur ekzekutohet në modalitetin e imazhit ose të videos, detyra Pose Landmarker bllokon fillin aktual derisa të përfundojë përpunimin e imazhit ose kornizës hyrëse. Për të shmangur bllokimin e fillit aktual, ekzekutoni përpunimin në një fill në sfond duke përdorur kornizat iOS Dispatch ose NSOoperation .

  • Kur ekzekutohet në modalitetin e transmetimit të drejtpërdrejtë, detyra Pose Landmarker kthehet menjëherë dhe nuk bllokon lidhjen aktuale. Ai thërret metodën poseLandmarker(_:didFinishDetection:timestampInMilliseconds:error:) me rezultatin e pikë referimit pas përpunimit të çdo kornize hyrëse. Pose Landmarker e thërret këtë metodë në mënyrë asinkrone në një radhë të dedikuar dërgimi serik. Për shfaqjen e rezultateve në ndërfaqen e përdoruesit, dërgoni rezultatet në radhën kryesore pas përpunimit të rezultateve. Nëse funksioni detectAsync thirret kur detyra Pose Landmarker është e zënë me përpunimin e një kuadri tjetër, Pose Landmarker injoron kornizën e re hyrëse.

Trajtoni dhe shfaqni rezultatet

Pas ekzekutimit të konkluzionit, detyra Pose Landmarker kthen një PoseLandmarkerResult i cili përmban koordinatat për çdo pikë referimi të pozës.

Më poshtë tregon një shembull të të dhënave dalëse nga kjo detyrë:

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)

Dalja përmban të dyja koordinatat e normalizuara ( Landmarks ) dhe koordinatat botërore ( WorldLandmarks ) për çdo pikë referimi.

Dalja përmban koordinatat e mëposhtme të normalizuara ( Landmarks ):

  • x dhe y : Koordinatat e pikës referimi normalizohen midis 0.0 dhe 1.0 nga gjerësia e imazhit ( x ) dhe lartësia ( y ).

  • z : Thellësia pikë referimi, me thellësinë në mes të ijeve si origjinë. Sa më e vogël të jetë vlera, aq më afër kamerës është pikë referimi. Madhësia e z përdor përafërsisht të njëjtën shkallë si x .

  • visibility : Mundësia që pikë referimi të jetë e dukshme brenda imazhit.

Prodhimi përmban koordinatat e mëposhtme botërore ( WorldLandmarks ):

  • x , y dhe z : Koordinatat 3-dimensionale të botës reale në metra, me pikën e mesit të ijeve si origjinë.

  • visibility : Mundësia që pikë referimi të jetë e dukshme brenda imazhit.

Imazhi i mëposhtëm tregon një vizualizim të daljes së detyrës:

Një grua në një pozë meditative. Poza e saj theksohet me një kornizë teli që tregon pozicionimin e gjymtyrëve dhe bustit të saj

Maska opsionale e segmentimit përfaqëson gjasat që çdo piksel t'i përkasë një personi të zbuluar. Imazhi i mëposhtëm është një maskë segmentimi e daljes së detyrës:

Maska e segmentimit të imazhit të mëparshëm që përshkruan formën e gruas

Shembulli i kodit Pose Landmarker tregon se si të shfaqen rezultatet e Pose Landmarker.