Mit der Aufgabe „Pose Landmarker“ können Sie Orientierungspunkte menschlicher Körper in einem Bild oder Video. Sie können diese Aufgabe nutzen, um wichtige Körperregionen zu identifizieren, und kategorisieren Sie Bewegungen. Bei dieser Aufgabe werden Modelle für maschinelles Lernen (ML) verwendet, mit einzelnen Bildern oder Videos. Die Aufgabe gibt Text und Markierungen im Bild aus und in dreidimensionalen Weltkoordinaten angegeben werden.
In dieser Anleitung erfahren Sie, wie Sie den Pose Landmarker mit iOS-Apps verwenden. Der Code das in dieser Anleitung beschriebene Beispiel GitHub
Sie können diese Aufgabe in Aktion sehen, indem Sie dieses Web- Weitere Informationen zu Funktionen, Modellen und Konfigurationsoptionen sehen Sie sich die Übersicht:
Codebeispiel
Der Beispielcode von MediaPipe Tasks ist eine einfache Implementierung eines Pose Landmarker. App für iOS. In diesem Beispiel wird die Kamera eines physischen iOS-Geräts verwendet, um Posen in einem durchgehenden Videostream erkennen. Die App kann auch Posen in Bilder und Videos aus der Gerätegalerie.
Du kannst die App als Ausgangspunkt für deine eigene iOS-App verwenden oder darauf verweisen wenn Sie eine vorhandene App ändern. Der Beispielcode für Pose Landmarker wird auf GitHub
Code herunterladen
In der folgenden Anleitung erfahren Sie, wie Sie eine lokale Kopie des Beispiels erstellen. mit dem Befehlszeilentool git erstellen.
So laden Sie den Beispielcode herunter:
Klonen Sie das Git-Repository mit dem folgenden Befehl:
git clone https://github.com/google-ai-edge/mediapipe-samples
Konfigurieren Sie optional Ihre Git-Instanz für den Sparse-Checkout, damit Sie nur die Dateien für die Beispiel-App Pose Landmarker an:
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/pose_landmarker/ios/
Nachdem Sie eine lokale Version des Beispielcodes erstellt haben, können Sie den MediaPipe-Aufgabenbibliothek, öffnen Sie das Projekt mit Xcode und führen Sie die App aus. Für finden Sie im Einrichtungsleitfaden für iOS.
Schlüsselkomponenten
Die folgenden Dateien enthalten den wichtigen Code für das Beispiel Pose Landmarker Anwendung:
- PoseLandmarkerService.swift: Initialisiert den Landmarker, übernimmt die Modellauswahl und führt eine Inferenz aus für die Eingabedaten.
- CameraViewController: Implementiert die Benutzeroberfläche für den Live-Kamerafeed-Eingabemodus und visualisiert die Sehenswürdigkeiten.
- MediaLibraryViewController.swift: Implementiert die Benutzeroberfläche für den Eingabemodus für Standbilder und Videodateien und die Orientierungspunkte visualisieren.
Einrichtung
In diesem Abschnitt werden die wichtigsten Schritte zum Einrichten Ihrer Entwicklungsumgebung und für die Verwendung von Pose Landmarker programmieren. Allgemeine Informationen zum Einrichten der Entwicklungsumgebung für die Verwendung von MediaPipe-Aufgaben, einschließlich Plattformversion finden Sie im Einrichtungsleitfaden für iOS.
Abhängigkeiten
Pose Landmarker verwendet die Bibliothek MediaPipeTasksVision
, die installiert werden muss
mit CocoaPods. Die Bibliothek ist sowohl mit Swift- als auch mit Objective-C-Apps kompatibel.
und erfordert keine zusätzliche sprachspezifische Einrichtung.
Eine Anleitung zur Installation von CocoaPods unter macOS findest du im Artikel zu CocoaPods
Installationsanleitung.
Eine Anleitung zum Erstellen eines Podfile
mit den für Ihr Projekt erforderlichen Pods
erhalten Sie unter Verwendung
CocoaPods
Fügen Sie den MediaPipeTasksVision-Pod mit dem folgenden Code in Podfile
ein:
target 'MyPoseLandmarkerApp' do
use_frameworks!
pod 'MediaPipeTasksVision'
end
Falls Ihre App Einheitentestziele enthält, lesen Sie den Einrichtungsleitfaden für
iOS: Weitere Informationen zur Einrichtung
Dein Podfile
.
Modell
Für die Aufgabe „MediaPipe Pose Landmarker“ ist ein trainiertes Bundle erforderlich, bei dieser Aufgabe. Weitere Informationen zu verfügbaren trainierten Modellen für Pose Landmarker, siehe Aufgabenübersicht Modelle .
Verwenden Sie die download_models.sh
Skript
um die Modelle herunterzuladen und mit Xcode zu Ihrem Projektverzeichnis hinzuzufügen. Für
Eine Anleitung zum Hinzufügen von Dateien zu Ihrem Xcode-Projekt finden Sie unter Dateien verwalten
und Ordner in Ihrem Xcode
Projekt.
Verwenden Sie das Attribut BaseOptions.modelAssetPath
, um den Pfad zum Modell anzugeben
in deinem App Bundle. Ein Codebeispiel finden Sie im nächsten Abschnitt.
Aufgabe erstellen
Sie können die Aufgabe „Pose Landmarker“ erstellen, indem Sie einen ihrer Initialisierer aufrufen. Die
Der PoseLandmarker(options:)
-Initialisierer akzeptiert Werte für die Konfiguration
Optionen.
Wenn kein Pose Landmarker mit benutzerdefinierter Konfiguration initialisiert werden muss
können Sie mit dem PoseLandmarker(modelPath:)
-Initialisierer ein
Posen-Markierung mit den Standardoptionen. Weitere Informationen zur Konfiguration
finden Sie unter Konfigurationsübersicht.
Die Aufgabe „Pose Landmarker“ unterstützt drei Eingabedatentypen: Standbilder, Videodateien
und Live-Videostreams. Standardmäßig initialisiert PoseLandmarker(modelPath:)
einen
für Standbilder angelangt. Wenn Sie möchten, dass Ihre Aufgabe für die Verarbeitung von Videos initialisiert wird
Dateien oder Live-Videostreams verwenden, geben Sie das Video mit PoseLandmarker(options:)
an
oder den Livestream-Laufmodus. Der Livestream-Modus erfordert außerdem die zusätzlichen
poseLandmarkerLiveStreamDelegate
, mit der die
Pose Landmarker, um dem Bevollmächtigten die Ergebnisse der Erkennung von Pose-Markierungen zu senden
asynchron programmiert.
Wählen Sie den Tab für Ihren Ausführungsmodus aus, um zu sehen, wie die Aufgabe erstellt wird und eine Inferenz ausführen.
Swift
Bild
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)
Livestream
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
Bild
@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];
Livestream
@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];
Hinweis:Im Video- oder Livestream-Modus werden für die Pose-Markierung um zu verhindern, dass in jedem Frame das Handflächenerkennungsmodell ausgelöst wird. die Latenz zu reduzieren.
Konfigurationsoptionen
Diese Aufgabe bietet die folgenden Konfigurationsoptionen für iOS-Apps:
Option | Beschreibung | Wertebereich | Standardwert |
---|---|---|---|
running_mode |
Legt den Ausführungsmodus für die Task fest. Es gibt drei
Modi: IMAGE: Der Modus für Einzelbildeingaben. VIDEO: Der Modus für decodierte Frames eines Videos. LIVE_STREAM: Der Modus für einen Livestream mit Eingabe zum Beispiel von einer Kamera. In diesem Modus muss poseLandmarkerLiveStreamDelegate auf
Eine Instanz einer Klasse, die den
PoseLandmarkerLiveStreamDelegate , um die Ergebnisse von
Asynchrone Erkennung von Sehenswürdigkeiten durchführen.
|
{RunningMode.image, RunningMode.video, RunningMode.liveStream } |
RunningMode.image |
num_poses |
Die maximale Anzahl der Posen, die vom Pose-Markierung | Integer > 0 |
1 |
min_pose_detection_confidence |
Der minimale Konfidenzwert für die Pose-Erkennung als erfolgreich angesehen wird. | Float [0.0,1.0] |
0.5 |
min_pose_presence_confidence |
Der minimale Konfidenzwert für die Präsenz in Posen bei der Erkennung von Orientierungspunkten für Posen. | Float [0.0,1.0] |
0.5 |
min_tracking_confidence |
Der minimale Konfidenzwert für das Positions-Tracking um als erfolgreich zu gelten. | Float [0.0,1.0] |
0.5 |
output_segmentation_masks |
Legt fest, ob Pose Landmarker eine Segmentierungsmaske für die erkannte Pose. | Boolean |
False |
result_callback |
Legt den Ergebnis-Listener so fest, dass er die Landmark-Ergebnisse empfängt
asynchron, wenn sich Pose Landmarker im Livestreammodus befindet.
Kann nur verwendet werden, wenn der Ausführungsmodus auf LIVE_STREAM festgelegt ist |
ResultListener |
N/A |
Livestreamkonfiguration
Wenn der Laufmodus auf „Livestream“ gesetzt ist, benötigt der Pose Landmarker die Berechtigung
zusätzliche poseLandmarkerLiveStreamDelegate
-Konfigurationsoption, die
ermöglicht es dem Pose Landmarker, Ergebnisse zur Erkennung von Pose-Markierungen zu liefern
asynchron programmiert. Der Bevollmächtigte muss den Parameter
Methode poseLandmarker(_:didFinishDetection:timestampInMilliseconds:error:)
,
den der Pose Landmarker aufruft, nachdem er die Ergebnisse der Pose-Ausführung verarbeitet hat
Erkennung von Sehenswürdigkeiten in jedem Frame.
Optionsname | Beschreibung | Wertebereich | Standardwert |
---|---|---|---|
poseLandmarkerLiveStreamDelegate |
Aktiviert Pose Landmarker, um die Ergebnisse einer Pose zu erhalten
im Livestream-Modus asynchron erkennen. Die Klasse, deren
Instanz auf diese Eigenschaft eingestellt ist, muss den
poseLandmarker(_:didFinishDetection:timestampInMilliseconds:error:)
. |
Nicht zutreffend | Nicht festgelegt |
Daten vorbereiten
Konvertieren Sie das Eingabebild oder den Eingabe-Frame zuerst in ein MPImage
-Objekt,
an den Pose Landmarker übergeben. MPImage
unterstützt verschiedene Arten von iOS-Bildern
Formate und können sie in jedem
ausgeführten Modus für die Inferenz verwenden. Weitere Informationen
Informationen zu MPImage
finden Sie in der
MPImage-API
Wählen Sie je nach Anwendungsfall und Laufmodus ein iOS-Bildformat aus.
Anwendung erforderlich.MPImage
akzeptiert die UIImage
, CVPixelBuffer
und
CMSampleBuffer
iOS-Bildformate.
UIImage
Das Format UIImage
eignet sich gut für die folgenden Laufmodi:
Bilder: Bilder aus einem App Bundle, einer Nutzergalerie oder einem Dateisystem, die wie folgt formatiert sind:
UIImage
-Bilder können in einMPImage
-Objekt konvertiert werden.Videos: Verwenden Sie AVAssetImageGenerator. zum Extrahieren von Videoframes CGImage Format und konvertieren Sie sie in
UIImage
Bilder.
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];
In diesem Beispiel wird ein MPImage
mit dem Standardwert
UIImage.Orientation.Up
Ausrichtung. Sie können MPImage
mit einer der unterstützten
UIImage.Orientation
Werte. Die Pose-Markierung unterstützt keine gespiegelten Ausrichtungen wie .upMirrored
,
.downMirrored
, .leftMirrored
, .rightMirrored
.
Weitere Informationen zu UIImage
findest du unter UIImage Apple Developer
Dokumentation.
CVPixelBuffer
Das Format CVPixelBuffer
eignet sich gut für Anwendungen, die Frames generieren.
und verwenden Sie das iOS-CoreImage
Framework für die Verarbeitung.
Das Format CVPixelBuffer
eignet sich gut für die folgenden Laufmodi:
Bilder: Apps, die nach einer Verarbeitung
CVPixelBuffer
Bilder generieren mit demCoreImage
-Framework von iOS an den Pose Landmarker im Bildlaufmodus.Videos: Videoframes können für folgendes Format in das
CVPixelBuffer
-Format konvertiert werden: und dann im Videomodus an den Pose Landmarker gesendet.Livestream: Apps, die mit einer iOS-Kamera Frames generieren, werden möglicherweise zur Verarbeitung in das
CVPixelBuffer
-Format konvertiert, bevor sie an den Posiere den Landmark-Modus im Livestream-Modus.
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];
Weitere Informationen zu CVPixelBuffer
finden Sie in der CVPixelBuffer Apple-Dokumentation
Entwickler*in
Dokumentation.
CMSampleBuffer
Das Format CMSampleBuffer
speichert Medienbeispiele eines einheitlichen Medientyps und ist
eignet sich gut für den
Livestream-Laufmodus. Live-Frames von iOS-Kameras
asynchron im CMSampleBuffer
-Format von iOS bereitgestellt
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];
Weitere Informationen zu CMSampleBuffer
finden Sie im Artikel CMSampleBuffer Apple“.
Entwickler*in
Dokumentation.
Aufgabe ausführen
Verwenden Sie zum Ausführen des Pose Landmarker die Methode detect()
, die für den zugewiesenen
Laufmodus:
- Standbild:
detect(image:)
- Video:
detect(videoFrame:timestampInMilliseconds:)
- Livestream:
detectAsync(image:timestampInMilliseconds:)
Die folgenden Codebeispiele zeigen einfache Beispiele für die Ausführung von Pose Landmarker in verschiedene Laufmodi zu testen:
Swift
Bild
let result = try poseLandmarker.detect(image: image)
Video
let result = try poseLandmarker.detect( videoFrame: image, timestampInMilliseconds: timestamp)
Livestream
try poseLandmarker.detectAsync( image: image, timestampInMilliseconds: timestamp)
Objective-C
Bild
MPPPoseLandmarkerResult *result = [poseLandmarker detectImage:image error:nil];
Video
MPPPoseLandmarkerResult *result = [poseLandmarker detectVideoFrame:image timestampInMilliseconds:timestamp error:nil];
Livestream
BOOL success = [poseLandmarker detectAsyncImage:image timestampInMilliseconds:timestamp error:nil];
Das Codebeispiel für Pose Landmarker zeigt die Implementierungen dieser Modi
detect(image:)
, detect(videoFrame:timestampInMilliseconds:)
,
und detectAsync(image:timestampInMilliseconds:)
. Der Beispielcode ermöglicht es,
zwischen Verarbeitungsmodi wechseln, was für Sie möglicherweise nicht erforderlich ist
Fall.
Wichtige Hinweise:
Im Video- oder Livestream-Modus müssen Sie außerdem die Zeitstempel des Eingabe-Frames für die Aufgabe „Pose Landmarker“.
Im Bild- oder Videomodus blockiert die Aufgabe „Pose Landmarker“ die aktuellen Thread zu schreiben, bis die Verarbeitung des Eingabebilds oder -frames abgeschlossen ist. Bis Blockieren des aktuellen Threads vermeiden, Verarbeitung im Hintergrund ausführen Threads unter iOS verwenden Versand oder NSOperation Frameworks.
Im Livestream-Modus wird die Aufgabe „Pose Landmarker“ sofort zurückgegeben und blockiert den aktuellen Thread nicht. Es ruft die Methode
poseLandmarker(_:didFinishDetection:timestampInMilliseconds:error:)
-Methode mit dem Pose-Landmarker-Ergebnis nach der Verarbeitung jedes Eingabeframes. Die Pose Landmarker ruft diese Methode asynchron auf einem dedizierten seriellen Weiterleitungswarteschlange. Erstellen Sie zum Anzeigen der Ergebnisse auf der Benutzeroberfläche den Befehl nach der Verarbeitung der Ergebnisse an die Hauptwarteschlange. Wenn diedetectAsync
wird aufgerufen, wenn die Pose Landmarker-Aufgabe mit der Verarbeitung einer anderen Aufgabe beschäftigt ist. -Frame ignoriert den neuen Eingabeframe.
Ergebnisse verarbeiten und anzeigen
Beim Ausführen einer Inferenz gibt die Pose Landmarker-Aufgabe ein PoseLandmarkerResult
zurück.
die die Koordinaten für jede Pose-Markierung enthält.
Im Folgenden sehen Sie ein Beispiel für die Ausgabedaten dieser Aufgabe:
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)
Die Ausgabe enthält sowohl normalisierte Koordinaten (Landmarks
) als auch Weltkoordinaten
Koordinaten (WorldLandmarks
) für jede Sehenswürdigkeit.
Die Ausgabe enthält die folgenden normalisierten Koordinaten (Landmarks
):
x
undy
: Sehenswürdigkeiten-Koordinaten, normalisiert zwischen 0,0 und 1,0 durch das Bildbreite (x
) und -höhe (y
).z
: die charakteristische Tiefe, wobei die Tiefe in der Mitte der Hüfte Ursprung. Je kleiner der Wert, desto näher liegt die Sehenswürdigkeit an der Kamera. Die Die Größe von z hat ungefähr den gleichen Maßstab wiex
.visibility
: gibt an, wie wahrscheinlich es ist, dass die Sehenswürdigkeit im Bild zu sehen ist.
Die Ausgabe enthält die folgenden Weltkoordinaten (WorldLandmarks
):
x
,y
undz
: Reale dreidimensionale Koordinaten in Metern mit dem Attribut der Hüftmitte als Ursprung.visibility
: gibt an, wie wahrscheinlich es ist, dass die Sehenswürdigkeit im Bild zu sehen ist.
Die folgende Abbildung zeigt eine Visualisierung der Aufgabenausgabe:
Die optionale Segmentierungsmaske gibt an, wie wahrscheinlich es ist, dass jedes Pixel an eine erkannte Person gesendet. Das folgende Bild zeigt eine Segmentierungsmaske des Aufgabenausgabe:
Der Beispielcode für Pose Landmarker zeigt, wie der Pose Landmarker angezeigt wird Ergebnisse.