Zadanie wykrywania punktów orientacyjnych w pozie pozwala wykrywać punkty orientacyjne ciała ludzkiego na obrazie lub filmie. Za pomocą tego zadania możesz identyfikować kluczowe części ciała, analizować postawę oraz kategoryzować ruchy. To zadanie korzysta z modeli systemów uczących się, które działają z pojedynczymi obrazami lub filmami. Zadanie wyprowadza punkty orientacyjne postawy ciała w współrzędnych obrazu i w trójwymiarowych współrzędnych świata.
Z tych instrukcji dowiesz się, jak używać narzędzia do oznaczania pozycji w aplikacji na iOS. Przykład kodu opisany w tych instrukcjach jest dostępny na GitHub.
Aby zobaczyć, jak to zadanie działa w praktyce, obejrzyj prezentację internetową. Więcej informacji o możliwościach, modelach i opcjach konfiguracji związanych z tym zadaniem znajdziesz w sekcji Omówienie.
Przykładowy kod
Przykładowy kod MediaPipe Tasks to podstawowe wdrożenie aplikacji Pose Landmarker na iOS. Przykład wykorzystuje kamerę na fizycznym urządzeniu z iOS, aby wykrywać pozy w ciągłym strumieniu wideo. Aplikacja może też wykrywać pozy w zdjęciach i filmach z galerii urządzenia.
Możesz użyć tej aplikacji jako punktu wyjścia do stworzenia własnej aplikacji na iOS lub skorzystać z niej podczas modyfikowania istniejącej aplikacji. Przykładowy kod aplikacji Pose Landmarker jest hostowany na GitHub.
Pobieranie kodu
Z tych instrukcji dowiesz się, jak utworzyć lokalną kopię przykładowego kodu za pomocą narzędzia wiersza poleceń git.
Aby pobrać przykładowy kod:
Sklonuj repozytorium Git za pomocą tego polecenia:
git clone https://github.com/google-ai-edge/mediapipe-samples
Opcjonalnie skonfiguruj instancję git do użycia rzadkiego sprawdzania, aby mieć tylko pliki przykładowej aplikacji Pose Landmarker:
cd mediapipe-samples git sparse-checkout init --cone git sparse-checkout set examples/pose_landmarker/ios/
Po utworzeniu lokalnej wersji przykładowego kodu możesz zainstalować bibliotekę zadań MediaPipe, otworzyć projekt za pomocą Xcode i uruchomić aplikację. Instrukcje znajdziesz w przewodniku konfiguracji na iOS.
Kluczowe komponenty
Te pliki zawierają kluczowy kod aplikacji przykładowej Pose Landmarker:
- PoseLandmarkerService.swift inicjalizuje punkt orientacyjny, obsługuje wybór modelu i wykonuje wnioskowanie na podstawie danych wejściowych.
- CameraViewController: implementuje interfejs użytkownika w trybie wprowadzania danych z obrazu na żywo z kamery i wizualizuje punkty orientacyjne.
- MediaLibraryViewController.swift implementuje interfejs użytkownika dla trybu wprowadzania statycznych obrazów i plików wideo oraz wizualizuje punkty orientacyjne.
Konfiguracja
W tej sekcji opisaliśmy najważniejsze kroki konfigurowania środowiska programistycznego i projektów kodu na potrzeby korzystania z usługi Pose Landmarker. Ogólne informacje o konfigurowaniu środowiska programistycznego do korzystania z zadań MediaPipe, w tym wymagania dotyczące wersji platformy, znajdziesz w przewodniku konfiguracji dla iOS.
Zależności
Pose Landmarker korzysta z biblioteki MediaPipeTasksVision
, którą należy zainstalować za pomocą CocoaPods. Biblioteka jest zgodna z aplikacją w języku Swift i Objective-C i nie wymaga dodatkowej konfiguracji językowej.
Instrukcje instalacji CocoaPods na macOS znajdziesz w przewodniku instalacji CocoaPods.
Instrukcje tworzenia Podfile
z podstawowymi komponentami potrzebnymi do działania aplikacji znajdziesz w artykule Korzystanie z CocoaPods.
Dodaj podproces MediaPipeTasksVision w pliku Podfile
, używając tego kodu:
target 'MyPoseLandmarkerApp' do
use_frameworks!
pod 'MediaPipeTasksVision'
end
Jeśli Twoja aplikacja zawiera cele testów jednostkowych, dodatkowe informacje o konfigurowaniu Podfile
znajdziesz w przewodniku konfiguracji na iOS.
Model
Zadanie MediaPipe Pose Landmarker wymaga przetrenowanego pakietu, który jest zgodny z tym zadaniem. Więcej informacji o dostępnych wytrenowanych modelach usługi Pose Landmarker znajdziesz w sekcji „Modele” w omówieniu zadania.
Użyj skryptu download_models.sh
, aby pobrać modele i dodać je do katalogu projektu za pomocą Xcode. Instrukcje dodawania plików do projektu Xcode znajdziesz w artykule Zarządzanie plikami i folderami w projekcie Xcode.
Użyj właściwości BaseOptions.modelAssetPath
, aby określić ścieżkę do modelu w pakiecie aplikacji. Przykład kodu znajdziesz w następnej sekcji.
Tworzenie zadania
Zadaniem tworzenia punktowania pozycji może być wywołanie jednego z inicjalizatorów. Inicjalizator PoseLandmarker(options:)
może przyjmować wartości opcji konfiguracji.
Jeśli nie potrzebujesz narzędzia do wykrywania punktów orientacyjnych pozy zainicjowanego za pomocą niestandardowych opcji konfiguracji, możesz użyć funkcji inicjalizującej PoseLandmarker(modelPath:)
, aby utworzyć narzędzie do wykrywania punktów orientacyjnych pozy z opcjami domyślnymi. Więcej informacji o opcjach konfiguracji znajdziesz w artykule Omówienie konfiguracji.
Zadanie dotyczące punktów orientacyjnych pozy obsługuje 3 typy danych wejściowych: zdjęcia, pliki wideo i transmisje na żywo. Domyślnie PoseLandmarker(modelPath:)
inicjuje zadanie dotyczące obrazów statycznych. Jeśli chcesz, aby zadanie zostało zainicjowane w celu przetwarzania plików wideo lub transmisji na żywo, użyj parametru PoseLandmarker(options:)
, aby określić tryb działania związany z odtwarzaniem filmów lub transmisji na żywo. Tryb transmisji na żywo wymaga też dodatkowej opcji konfiguracji poseLandmarkerLiveStreamDelegate
, która umożliwia narzędziu Pose Landmarker asynchroniczne przesyłanie wyników wykrywania punktów orientacyjnych postawy do delegowanego procesu.
Aby dowiedzieć się, jak utworzyć zadanie i przeprowadzić wnioskowanie, wybierz kartę odpowiadającą trybowi działania.
Swift
Obraz
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)
Wideo
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)
Transmisja na żywo
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
Obraz
@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];
Wideo
@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];
Transmisja na żywo
@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];
Uwaga: jeśli używasz trybu wideo lub transmisji na żywo, funkcja Pose Landmarker korzysta z śledzenia, aby uniknąć uruchamiania modelu wykrywania dłoni w każdym ujęciu. Pomaga to zmniejszyć opóźnienie.
Opcje konfiguracji
W tym zadaniu dostępne są te opcje konfiguracji aplikacji na iOS:
Nazwa opcji | Opis | Zakres wartości | Wartość domyślna |
---|---|---|---|
running_mode |
Ustawia tryb działania zadania. Dostępne są 3 tryby: OBRAZ: tryb dla pojedynczych obrazów wejściowych. FILM: tryb dekodowanych klatek filmu. LIVE_STREAM: tryb transmisji na żywo danych wejściowych, takich jak dane z kamery. W tym trybie parametr poseLandmarkerLiveStreamDelegate musi być ustawiony na instancję klasy, która implementuje interfejs PoseLandmarkerLiveStreamDelegate , aby otrzymać wyniki asynchronicznego wykrywania punktów orientacyjnych postawy.
|
{RunningMode.image, RunningMode.video, RunningMode.liveStream } |
RunningMode.image |
num_poses |
Maksymalna liczba poz, które może wykryć Landmarker poz. | Integer > 0 |
1 |
min_pose_detection_confidence |
Minimalna wartość ufności wykrywania pozycji, która jest uznawana za prawidłową. | Float [0.0,1.0] |
0.5 |
min_pose_presence_confidence |
Minimalny wynik ufności obecności pozycji w wykrywaniu punktów orientacyjnych postawy. | Float [0.0,1.0] |
0.5 |
min_tracking_confidence |
Minimalny wynik ufności śledzenia pozycji ciała, aby uznać go za udany. | Float [0.0,1.0] |
0.5 |
output_segmentation_masks |
Określa, czy narzędzie Pose Landmarker wygeneruje maskę segmentacji dla wykrytej postawy. | Boolean |
False |
result_callback |
Ustawia odbiornik wyników tak, aby asynchronicznie otrzymywał wyniki wyszukiwania punktów orientacyjnych, gdy punkt orientacyjny w ramach funkcji Pose Landmarker jest w trybie transmisji na żywo.
Można go używać tylko wtedy, gdy tryb działania ma wartość LIVE_STREAM . |
ResultListener |
N/A |
Konfiguracja transmisji na żywo
Gdy tryb działania jest ustawiony na transmisję na żywo, narzędzie Pose Landmarker wymaga dodatkowej opcji konfiguracji poseLandmarkerLiveStreamDelegate
, która umożliwia asynchroniczne dostarczanie wyników wykrywania punktów orientacyjnych. Delegat musi zaimplementować metodę poseLandmarker(_:didFinishDetection:timestampInMilliseconds:error:)
, którą wywołuje funkcja wykrywająca punkty orientacyjne pozy po przetworzeniu wyników wykrywania punktów orientacyjnych pozy w każdej klatce.
Nazwa opcji | Opis | Zakres wartości | Wartość domyślna |
---|---|---|---|
poseLandmarkerLiveStreamDelegate |
Umożliwia modułowi Pose Landmarker asynchroniczne otrzymywanie wyników wykrywania punktów orientacyjnych w trybie transmisji na żywo. Klasa, której instancja jest ustawiona w tej właściwości, musi implementować metodę poseLandmarker(_:didFinishDetection:timestampInMilliseconds:error:) . |
Nie dotyczy | Nie ustawiono |
Przygotuj dane
Przed przekazaniem do funkcji Pose Landmarker musisz przekonwertować wejściowy obraz lub ramkę na obiekt MPImage
. MPImage
obsługuje różne typy formatów obrazów iOS i może ich używać w dowolnym trybie działania do wnioskowania. Więcej informacji o MPImage
znajdziesz w dokumentacji interfejsu MPImage API.
Wybierz format obrazu iOS na podstawie przypadku użycia i trybułu działania wymaganego przez aplikację.MPImage
obsługuje formaty obrazów iOS UIImage
, CVPixelBuffer
i CMSampleBuffer
.
UIImage
Format UIImage
jest odpowiedni do tych trybów działania:
Obrazy: obrazy z pakietu aplikacji, galerii użytkownika lub systemu plików sformatowane jako obrazy
UIImage
można przekształcić w obiektMPImage
.Filmy: użyj narzędzia AVAssetImageGenerator, aby wyodrębnić klatki wideo do formatu CGImage, a następnie przekonwertuj je na obrazy
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)
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];
Przykład inicjalizuje MPImage
z domyślnym ułożeniem UIImage.Orientation.Up. Możesz zainicjować MPImage
dowolną z obsługiwanych wartości UIImage.Orientation. Narzędzie Pose Landmarker nie obsługuje lustrzanych orientacji, takich jak .upMirrored
, .downMirrored
, .leftMirrored
i .rightMirrored
.
Więcej informacji o UIImage
znajdziesz w dokumentacji UIImage dla deweloperów Apple.
CVPixelBuffer
Format CVPixelBuffer
jest odpowiedni do aplikacji, które generują klatki i korzystają z ramy CoreImage na iOS do przetwarzania.
Format CVPixelBuffer
jest odpowiedni do tych trybów działania:
Obrazy: aplikacje, które generują obrazy
CVPixelBuffer
po przetworzeniu ich za pomocą frameworkaCoreImage
w iOS, mogą wysyłać je do usługi Pose Landmarker w trybie uruchamiania obrazu.Filmy: ramki wideo można przekonwertować do formatu
CVPixelBuffer
w celu przetwarzania, a następnie wysłać do usługi Pose Landmarker w trybie wideo.transmisja na żywo: aplikacje korzystające z kamery iOS do generowania klatek mogą zostać przekonwertowane do formatu
CVPixelBuffer
w celu przetworzenia, zanim zostaną wysłane do usługi Pose Landmarker w trybie transmisji na żywo.
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];
Więcej informacji o CVPixelBuffer
znajdziesz w dokumentacji dla deweloperów Apple dotyczącej CVPixelBuffer.
CMSampleBuffer
Format CMSampleBuffer
przechowuje próbki multimediów o jednolitym typie i jest odpowiedni do uruchamiania transmisji na żywo. Ramki na żywo z kamer iOS są asynchronicznie dostarczane w formacie CMSampleBuffer
przez 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];
Więcej informacji o CMSampleBuffer
znajdziesz w dokumentacji CMSampleBuffer dla deweloperów Apple.
Uruchamianie zadania
Aby uruchomić narzędzie do wyznaczania punktów orientacyjnych w pozie, użyj metody detect()
odpowiedniej do przypisanego trybu działania:
- Statyczny obraz:
detect(image:)
- Film:
detect(videoFrame:timestampInMilliseconds:)
- Transmisja na żywo:
detectAsync(image:timestampInMilliseconds:)
Poniższe przykłady kodu pokazują proste przykłady uruchamiania narzędzia Pose Landmarker w różnych trybach:
Swift
Obraz
let result = try poseLandmarker.detect(image: image)
Wideo
let result = try poseLandmarker.detect( videoFrame: image, timestampInMilliseconds: timestamp)
Transmisja na żywo
try poseLandmarker.detectAsync( image: image, timestampInMilliseconds: timestamp)
Objective-C
Obraz
MPPPoseLandmarkerResult *result = [poseLandmarker detectImage:image error:nil];
Wideo
MPPPoseLandmarkerResult *result = [poseLandmarker detectVideoFrame:image timestampInMilliseconds:timestamp error:nil];
Transmisja na żywo
BOOL success = [poseLandmarker detectAsyncImage:image timestampInMilliseconds:timestamp error:nil];
Przykład kodu usługi Pose Landmarker pokazuje implementację każdego z tych trybów (detect(image:)
, detect(videoFrame:timestampInMilliseconds:)
i detectAsync(image:timestampInMilliseconds:)
) w szczegółach. Przykładowy kod umożliwia użytkownikowi przełączanie się między trybami przetwarzania, które mogą nie być wymagane w Twoim przypadku.
Pamiętaj:
W trybie wideo lub transmisji na żywo musisz też podać sygnaturę czasową ramki wejściowej do zadania dotyczącego wyznaczenia punktów orientacyjnych pozy.
W trybie obrazu lub filmu zadanie wyszukiwania punktów orientacyjnych w pozie blokuje bieżący wątek, dopóki nie zakończy przetwarzania obrazu wejściowego lub ramki. Aby uniknąć blokowania bieżącego wątku, przeprowadź przetwarzanie w wątku tła za pomocą frameworków iOS Dispatch lub NSOperation.
W trybie transmisji na żywo zadanie dotyczące wyszukiwania punktów orientacyjnych pozy zwraca wynik natychmiast i nie blokuje bieżącego wątku. Po przetworzeniu każdego wejściowego kadru wywołuje metodę
poseLandmarker(_:didFinishDetection:timestampInMilliseconds:error:)
z wynikiem funkcji wyznaczania punktów orientacyjnych postawy. Landmarker pozycji wywołuje tę metodę asynchronicznie w ramach dedykowanej kolejki wysyłania sekwencyjnego. Aby wyświetlić wyniki w interfejsie, prześlij je do kolejki głównej po przetworzeniu. Jeśli funkcjadetectAsync
zostanie wywołana, gdy zadanie dotyczące wyodrębniania punktów orientacyjnych pozy jest zajęte przetwarzaniem innego kadru, wyodrębnianie punktów orientacyjnych pozy zignoruje nowy klatka wejściowa.
Obsługa i wyświetlanie wyników
Po przeprowadzeniu wnioskowania zadanie wyszukiwania punktów orientacyjnych pozy zwraca PoseLandmarkerResult
, które zawiera współrzędne każdego punktu orientacyjnego pozy.
Poniżej znajdziesz przykład danych wyjściowych z tego zadania:
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)
Dane wyjściowe zawierają zarówno znormalizowane współrzędne (Landmarks
), jak i współrzędne globalne (WorldLandmarks
) dla każdego punktu orientacyjnego.
Dane wyjściowe zawierają te sformatowane współrzędne (Landmarks
):
x
iy
: współrzędne punktu orientacyjnego znormalizowane w zakresie od 0,0 do 1,0 przez szerokość (x
) i wysokość (y
) obrazu.z
: głębokość punktu orientacyjnego, w której głębokość w środku bioder jest traktowana jako punkt początkowy. Im mniejsza wartość, tym obiekt jest bliżej kamery. Wielkość z używa mniej więcej tej samej skali cox
.visibility
: prawdopodobieństwo, że punkt orientacyjny jest widoczny na zdjęciu.
Dane wyjściowe zawierają te współrzędne świata (WorldLandmarks
):
x
,y
iz
: rzeczywiste współrzędne 3D w metrach, z środkiem bioder jako punktem początkowym.visibility
: prawdopodobieństwo, że punkt orientacyjny jest widoczny na zdjęciu.
Na ilustracji poniżej widać wynik wykonania zadania:
Opcjonalna maska podziału na segmenty reprezentuje prawdopodobieństwo, że dany piksel należy do wykrytej osoby. Następujący obraz przedstawia maskę podziału na segmenty danych wyjściowych zadania:
Przykładowy kod usługi Pose Landmarker pokazuje, jak wyświetlać wyniki tej usługi.