Aufgabenanleitung zur Gestenerkennung

Mit der Aufgabe „MediaPipe-Gestenerkennung“ können Sie Handgesten in Echtzeit erkennen. Sie erhalten die Ergebnisse der erkannten Gesten sowie die Markierungen der erkannten Hände. Sie können diese Aufgabe verwenden, um bestimmte Gesten eines Nutzers zu erkennen und Anwendungsfunktionen aufzurufen, die diesen Gesten entsprechen.

Diese Aufgabe verarbeitet Bilddaten mit einem Modell für maschinelles Lernen (ML) und akzeptiert entweder statische Daten oder einen kontinuierlichen Stream. Die Aufgabe gibt Orientierungspunkte in Bildkoordinaten, Handmarkierungen in Weltkoordinaten, Händigkeit (links/rechts) und Handgesten mit mehreren Händen aus.

Jetzt ausprobieren

Jetzt starten

Beginnen Sie mit dieser Aufgabe, indem Sie einem dieser Implementierungsleitfäden für Ihre Zielplattform folgen. Diese plattformspezifischen Leitfäden führen Sie mit einem empfohlenen Modell durch eine grundlegende Implementierung dieser Aufgabe und enthalten Codebeispiele mit den empfohlenen Konfigurationsoptionen:

Taskdetails

In diesem Abschnitt werden die Funktionen, Eingaben, Ausgaben und Konfigurationsoptionen dieser Aufgabe beschrieben.

Funktionen

  • Eingabebildverarbeitung: Die Verarbeitung umfasst Bilddrehung, Größenanpassung, Normalisierung und Farbraumkonvertierung.
  • Punktzahl-Schwellenwert: Filtern Sie Ergebnisse basierend auf den Vorhersagewerten.
  • Zulassungsliste und Sperrliste für Labels: Geben Sie die vom Modell erkannten Gestenkategorien an.
Aufgabeneingaben Aufgabenausgaben
Für die Bewegungserkennung sind folgende Datentypen zulässig:
  • Standbilder
  • Decodierte Videoframes
  • Live-Videofeed
Die Bewegungserkennung gibt folgende Ergebnisse aus:
  • Kategorien von Handgesten
  • Händigkeit erkannter Hände
  • Sehenswürdigkeiten erkannter Hände in Bildkoordinaten
  • Sehenswürdigkeiten erkannter Hände in Weltkoordinaten

Konfigurationsoptionen

Diese Aufgabe hat die folgenden Konfigurationsoptionen:

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 der Eingabedaten, z. B. von einer Kamera. In diesem Modus muss resultListener aufgerufen werden, um einen Listener einzurichten, der die Ergebnisse asynchron empfängt.
{IMAGE, VIDEO, LIVE_STREAM} IMAGE
num_hands Die maximale Anzahl von Händen kann von GestureRecognizer erkannt werden. Any integer > 0 1
min_hand_detection_confidence Der Mindestkonfidenzwert für die Handerkennung, um im Handflächenerkennungsmodell als erfolgreich zu gelten. 0.0 - 1.0 0.5
min_hand_presence_confidence Der minimale Konfidenzwert für die Handpräsenz im Modell zur Erkennung von Handmarkierungen. Wenn im Video- und Livestream-Modus der Bewegungserkennung der Konfidenzwert für die Anwesenheitserkennung vom Modell für Handmarkierungen unter diesem Grenzwert liegt, wird das Handflächenerkennungsmodell ausgelöst. Andernfalls wird ein leichter Algorithmus zur Handverfolgung verwendet, um die Position der Hand(en) für die nachfolgende Erkennung von Sehenswürdigkeiten zu bestimmen. 0.0 - 1.0 0.5
min_tracking_confidence Der Mindestkonfidenzwert, der für eine erfolgreiche Verfolgung der Handzeichen erforderlich ist. Dies ist der IoU-Grenzwert des Begrenzungsrahmens zwischen Händen im aktuellen und im letzten Frame. Wenn im Video- und Streammodus der Bewegungserkennung die Bewegungserkennung fehlschlägt, löst die Bewegungserkennung die Handerkennung aus, wenn das Tracking fehlschlägt. Andernfalls wird die Handerkennung übersprungen. 0.0 - 1.0 0.5
canned_gestures_classifier_options Optionen zum Konfigurieren des Verhaltens des Klassifikators für gespeicherte Gesten. Vordefinierte Touch-Gesten sind ["None", "Closed_Fist", "Open_Palm", "Pointing_Up", "Thumb_Down", "Thumb_Up", "Victory", "ILoveYou"]
  • Sprache für Anzeigenamen: das für Anzeigenamen, die gegebenenfalls über die TFLite-Modellmetadaten angegeben werden.
  • Max. Ergebnisse: Die maximale Anzahl der Klassifizierungsergebnisse mit der höchsten Punktzahl, die zurückgegeben werden sollen. Wenn < 0, werden alle verfügbaren Ergebnisse zurückgegeben.
  • Punktzahl-Schwellenwert: Der Wert, unter dem Ergebnisse abgelehnt werden. Wenn dieser Wert auf 0 gesetzt ist, werden alle verfügbaren Ergebnisse zurückgegeben.
  • Kategorie-Zulassungsliste: Die Zulassungsliste mit Kategorienamen. Wenn das Feld nicht leer ist, werden Klassifizierungsergebnisse herausgefiltert, die nicht in diesem Satz enthalten sind. Sich gegenseitig ausschließend mit Sperrliste
  • Kategorie-Sperrliste: die Sperrliste der Kategorienamen Wenn das Feld nicht leer ist, werden Klassifizierungsergebnisse herausgefiltert, die zu dieser Kategorie gehören. Schließt sich gegenseitig aus mit Zulassungsliste.
    • Sprache für Anzeigenamen: any string
    • Max. Ergebnisse: any integer
    • Punktzahl-Schwellenwert: 0.0-1.0
    • Zulassungsliste für Kategorien: vector of strings
    • Sperrliste für Kategorien: vector of strings
    • Sprache für Anzeigenamen: "en"
    • Max. Ergebnisse: -1
    • Punktzahl-Schwellenwert: 0
    • Zulassungsliste für Kategorien: leer
    • Sperrliste für Kategorien: leer
    custom_gestures_classifier_options Optionen zum Konfigurieren des Verhaltens des benutzerdefinierten Gestenklassifikators.
  • Sprache für Anzeigenamen: das für Anzeigenamen, die gegebenenfalls über die TFLite-Modellmetadaten angegeben werden.
  • Max. Ergebnisse: Die maximale Anzahl der Klassifizierungsergebnisse mit der höchsten Punktzahl, die zurückgegeben werden sollen. Wenn < 0, werden alle verfügbaren Ergebnisse zurückgegeben.
  • Punktzahl-Schwellenwert: Der Wert, unter dem Ergebnisse abgelehnt werden. Wenn dieser Wert auf 0 gesetzt ist, werden alle verfügbaren Ergebnisse zurückgegeben.
  • Kategorie-Zulassungsliste: Die Zulassungsliste mit Kategorienamen. Wenn das Feld nicht leer ist, werden Klassifizierungsergebnisse herausgefiltert, die nicht in diesem Satz enthalten sind. Sich gegenseitig ausschließend mit Sperrliste
  • Kategorie-Sperrliste: die Sperrliste der Kategorienamen Wenn das Feld nicht leer ist, werden Klassifizierungsergebnisse herausgefiltert, die zu dieser Kategorie gehören. Schließt sich gegenseitig aus mit Zulassungsliste.
    • Sprache für Anzeigenamen: any string
    • Max. Ergebnisse: any integer
    • Punktzahl-Schwellenwert: 0.0-1.0
    • Zulassungsliste für Kategorien: vector of strings
    • Sperrliste für Kategorien: vector of strings
    • Sprache für Anzeigenamen: "en"
    • Max. Ergebnisse: -1
    • Punktzahl-Schwellenwert: 0
    • Zulassungsliste für Kategorien: leer
    • Sperrliste für Kategorien: leer
    result_callback Legt den Ergebnis-Listener so fest, dass er die Klassifizierungsergebnisse asynchron empfängt, wenn sich die Gestenerkennung im Livestream-Modus befindet. Kann nur verwendet werden, wenn der Laufmodus auf LIVE_STREAM festgelegt ist ResultListener

    Modelle

    Für die Gestenerkennung wird ein Modell-Bundle mit zwei vorkonfigurierten Modellpaketen verwendet: ein Bundle mit Hand-Markierungen und ein Modell-Bundle für die Gestenklassifizierung. Das Sehenswürdigkeitenmodell erkennt, ob Hände und Hand geometrische Formen vorhanden sind, und das Modell zur Bewegungserkennung erkennt Gesten anhand der Handgeometrie.

    Modellname Form eingeben Quantisierungstyp Modellkarte Versionen
    HandGestureClassifier 192 x 192, 224 x 224 Gleitkommazahl 16 Informationen Neueste

    Diese Aufgabe unterstützt auch das Ändern des Modell-Bundles mit Model Maker. Weitere Informationen zur Verwendung von Model Maker zum Anpassen von Modellen für diese Aufgabe finden Sie auf der Seite Modelle für die Gestenerkennung anpassen.

    Bundle mit Handmarkierungsmodellen

    Das Modell-Bundle für Hand-Markierungen erkennt die Keypoint-Lokalisierung von 21 Handknöchel-Koordinaten innerhalb der erkannten Handbereiche. Das Modell wurde mit etwa 30.000 Bildern aus der realen Welt sowie mit mehreren gerenderten synthetischen Handmodellen trainiert, die auf verschiedenen Hintergründen angezeigt wurden. Unten sehen Sie die Definition der 21 Orientierungspunkte:

    Das Hand-Landmark-Modell-Bundle enthält ein Modell zur Handmarkierungserkennung und ein Modell zur Handmarkierungserkennung. Das Palmerkennungsmodell lokalisiert den Bereich der Hände aus dem gesamten Eingabebild und das Modell zur Erkennung von Handmarkierungen findet die Orientierungspunkte auf dem zugeschnittenen Handbild, das vom Handflächenerkennungsmodell definiert wurde.

    Da das Modell zur Handflächenerkennung wesentlich zeitaufwendiger ist, verwendet die Gestenerkennung im Video- oder Livestream-Modus den Begrenzungsrahmen, der durch die im aktuellen Frame erkannten Markierungen der Hand definiert wird, um den Handbereich im nächsten Frame zu lokalisieren. Dadurch wird das Modell zur Handflächenerkennung durch die Bewegungserkennung seltener ausgelöst. Erst wenn das Modell für Handmarkierungen nicht mehr die erforderliche Anzahl von Händen identifizieren konnte oder das Handtracking fehlschlägt, wird das Handerkennungsmodell aufgerufen, um die Hände neu zu lokalisieren.

    Bundle für Gestenklassifizierungsmodell

    Das Modellpaket für die Gestenklassifizierung kann die folgenden gängigen Gesten erkennen:

    0 - Unrecognized gesture, label: Unknown
    1 - Closed fist, label: Closed_Fist
    2 - Open palm, label: Open_Palm
    3 - Pointing up, label: Pointing_Up
    4 - Thumbs down, label: Thumb_Down
    5 - Thumbs up, label: Thumb_Up
    6 - Victory, label: Victory
    7 - Love, label: ILoveYou
    

    Wenn das Modell Hände erkennt, aber keine Geste erkennen, gibt die Gestenerkennung das Ergebnis „None“ zurück. Wenn das Modell keine Hände erkennt, gibt die Gestenerkennung einen leeren Wert zurück.

    Das Modell-Bundle zur Gestenklassifizierung enthält eine zweistufige neuronale Netzwerkpipeline mit einem Gesteneinbettungsmodell, gefolgt von einem Gestenklassifizierungsmodell. Weitere Informationen finden Sie auf der Karte für das Gestenklassifizierungsmodell.

    Das Gesteneinbettungsmodell codiert die Bildmerkmale in einen Featurevektor und das Klassifizierungsmodell ist ein einfacher Gestenklassifikator, der den Featurevektor als Eingabe verwendet. Das bereitgestellte Modellpaket zur Gestenklassifizierung enthält den Klassifikator für gespeicherte Gesten, der die sieben oben vorgestellten häufigen Handgesten erkennt. Sie können das Modell-Bundle erweitern, um mehr Gesten zu erkennen. Dazu trainieren Sie Ihren eigenen benutzerdefinierten Gestenklassifikator. Weitere Informationen finden Sie im folgenden Abschnitt Benutzerdefinierte Modelle.

    Die Gestenerkennung mit vorgefertigtem Gestenklassifikator und dem benutzerdefinierten Gestenklassifikator eignet sich besser, wenn beide Klassifikatoren dieselbe Geste in ihren Kategorien erkennen. Wenn nur ein Bewegungsklassifikator die Geste erkennt, gibt die Gestenerkennung die erkannte Geste direkt aus.

    Aufgaben-Benchmarks

    Im Folgenden sind die Aufgaben-Benchmarks für die gesamte Pipeline basierend auf den oben vortrainierten Modellen aufgeführt. Das Latenzergebnis ist die durchschnittliche Latenz auf Pixel 6 mit CPU / GPU.

    Modellname CPU-Latenz GPU-Latenz
    GestureRecognizer 16,76 ms 20,87 ms

    Benutzerdefinierte Modelle

    Wenn Sie die Funktionen der in dieser Aufgabe bereitgestellten Modelle verbessern oder ändern möchten, können Sie die vorhandenen Modelle mithilfe von Model Maker ändern. Benutzerdefinierte Modelle, die mit MediaPipe verwendet werden, müssen im Format .task vorliegen. Das ist eine Modell-Bundle-Datei. Sie sollten die Verwendung von Model Maker in Betracht ziehen, um die bereitgestellten Modelle für diese Aufgabe zu ändern, bevor Sie eigene erstellen.

    Weitere Informationen zum Anpassen eines Modells für diese Aufgabe finden Sie unter Modelle für die Gestenerkennung anpassen.