Aufgabenanleitung zur Gestenerkennung

Eine Hand, die einen Daumen nach oben streckt. Das Modell hat diese Geste mit einer Wahrscheinlichkeit von 63% als „Daumen nach oben“ erkannt.

Mit der MediaPipe-Aufgabe „Gesture Recognizer“ können Sie Handgesten in Echtzeit erkennen. Sie erhalten die Ergebnisse der erkannten Handgesten zusammen mit den Landmarken der erkannten Hände. Mit dieser Aufgabe können Sie bestimmte Handgesten eines Nutzers erkennen und Anwendungsfunktionen aufrufen, die diesen Gesten entsprechen.

Diese Aufgabe wird mit einem ML-Modell (Machine Learning) auf Bilddaten ausgeführt und akzeptiert entweder statische Daten oder einen kontinuierlichen Stream. Die Aufgabe gibt Handlandmarken in Bildkoordinaten, Handlandmarken in Weltkoordinaten, Händigkeit (linke/rechte Hand) und die Handgestenkategorien mehrerer Hände aus.

Jetzt testen

Jetzt starten

Folgen Sie einer dieser Implementierungsanleitungen für Ihre Zielplattform, um diese Aufgabe zu verwenden. In diesen plattformspezifischen Anleitungen wird eine grundlegende Implementierung dieser Aufgabe mit einem empfohlenen Modell beschrieben. Außerdem finden Sie Codebeispiele mit den empfohlenen Konfigurationsoptionen:

Task details

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

Funktionen

  • Eingabebildverarbeitung : Die Verarbeitung umfasst Bildrotation, Größenänderung, Normalisierung und Farbraumkonvertierung.
  • Schwellenwert für Wert : Ergebnisse anhand von Vorhersagewerten filtern.
  • Zulassungs- und Sperrliste für Labels: Geben Sie die Gestenkategorien an, die vom Modell erkannt werden.
Aufgabeneingaben Aufgabenausgaben
Der Gestenerkenner akzeptiert eine Eingabe eines der folgenden Datentypen:
  • Standbilder
  • Decodierte Videoframes
  • Live-Videostream
Der Gestenerkenner gibt die folgenden Ergebnisse aus:
  • Kategorien von Handgesten
  • Händigkeit der erkannten Hände
  • Landmarken der erkannten Hände in Bildkoordinaten
  • Landmarken der erkannten Hände in Weltkoordinaten

Konfigurationsoptionen

Diese Aufgabe hat die folgenden Konfigurationsoptionen:

Option Beschreibung Wertebereich Standardwert
running_mode Legt den Ausführungsmodus für die Aufgabe fest. Es gibt drei Modi:

IMAGE: Der Modus für einzelne Bildeingaben.

VIDEO: Der Modus für decodierte Frames eines Videos.

LIVE_STREAM: Der Modus für einen Livestream von Eingabedaten, z. B. von einer Kamera. In diesem Modus muss „resultListener“ aufgerufen werden, um einen Listener einzurichten, der Ergebnisse asynchron empfängt.
{IMAGE, VIDEO, LIVE_STREAM} IMAGE
num_hands Die maximale Anzahl von Händen, die von dem GestureRecognizer erkannt werden können. Any integer > 0 1
min_hand_detection_confidence Der Mindestwert für die Konfidenz, damit die Handerkennung im Modell zur Handflächenerkennung als erfolgreich gilt. 0.0 - 1.0 0.5
min_hand_presence_confidence Der Mindestwert für die Konfidenz der Handpräsenz im Modell zur Erkennung von Hand landmarken. Wenn im Videomodus und im Livestream-Modus des Gestenerkenners, wenn der Konfidenzwert für die Handpräsenz aus dem Modell für Handlandmarken unter diesem Schwellenwert liegt, wird das Modell zur Handflächenerkennung ausgelöst. Andernfalls wird ein einfacher Algorithmus zur Handverfolgung verwendet, um die Position der Hand(e) für die anschließende Landmarkenerkennung zu bestimmen. 0.0 - 1.0 0.5
min_tracking_confidence Der Mindestwert für die Konfidenz, damit das Handtracking als erfolgreich gilt. Dies ist der IoU-Schwellenwert für den Begrenzungsrahmen zwischen den Händen im aktuellen und im letzten Frame. Wenn im Videomodus und im Stream-Modus des Gestenerkenners die Verfolgung fehlschlägt, löst der Gestenerkenner die Hand erkennung aus. Andernfalls wird die Handerkennung übersprungen. 0.0 - 1.0 0.5
canned_gestures_classifier_options Optionen zum Konfigurieren des Verhaltens des Klassifikators für vordefinierte Gesten. Die vordefinierten Gesten sind ["None", "Closed_Fist", "Open_Palm", "Pointing_Up", "Thumb_Down", "Thumb_Up", "Victory", "ILoveYou"]
  • Locale für Anzeigenamen: Das Locale, das für Anzeigenamen verwendet werden soll, die über die TFLite-Modelldaten angegeben wurden (falls vorhanden).
  • Maximale Ergebnisse: Die maximale Anzahl der Klassifizierungsergebnisse mit den höchsten Werten, die zurückgegeben werden sollen. Wenn < 0, werden alle verfügbaren Ergebnisse zurückgegeben.
  • Schwellenwert für Wert: Der Wert, unter dem Ergebnisse abgelehnt werden. Wenn auf 0 gesetzt, werden alle verfügbaren Ergebnisse zurückgegeben.
  • Zulassungsliste für Kategorien: Die Zulassungsliste der Kategorienamen. Wenn nicht leer, werden Klassifizierungsergebnisse herausgefiltert, deren Kategorie nicht in diesem Set enthalten ist. Kann nicht zusammen mit der Sperrliste verwendet werden.
  • Sperrliste für Kategorien: Die Sperrliste der Kategorienamen. Wenn nicht leer, werden Klassifizierungsergebnisse herausgefiltert, deren Kategorie in diesem Set enthalten ist. Kann nicht zusammen mit der Zulassungsliste verwendet werden.
    • Locale für Anzeigenamen: any string
    • Maximale Ergebnisse: any integer
    • Schwellenwert für Wert: 0.0-1.0
    • Zulassungsliste für Kategorien: vector of strings
    • Sperrliste für Kategorien: vector of strings
    • Locale für Anzeigenamen: "en"
    • Maximale Ergebnisse: -1
    • Schwellenwert für Wert: 0
    • Zulassungsliste für Kategorien: leer
    • Sperrliste für Kategorien: leer
    custom_gestures_classifier_options Optionen zum Konfigurieren des Verhaltens des Klassifikators für benutzerdefinierte Gesten.
  • Locale für Anzeigenamen: Das Locale, das für Anzeigenamen verwendet werden soll, die über die TFLite-Modelldaten angegeben wurden (falls vorhanden).
  • Maximale Ergebnisse: Die maximale Anzahl der Klassifizierungsergebnisse mit den höchsten Werten, die zurückgegeben werden sollen. Wenn < 0, werden alle verfügbaren Ergebnisse zurückgegeben.
  • Schwellenwert für Wert: Der Wert, unter dem Ergebnisse abgelehnt werden. Wenn auf 0 gesetzt, werden alle verfügbaren Ergebnisse zurückgegeben.
  • Zulassungsliste für Kategorien: Die Zulassungsliste der Kategorienamen. Wenn nicht leer, werden Klassifizierungsergebnisse herausgefiltert, deren Kategorie nicht in diesem Set enthalten ist. Kann nicht zusammen mit der Sperrliste verwendet werden.
  • Sperrliste für Kategorien: Die Sperrliste der Kategorienamen. Wenn nicht leer, werden Klassifizierungsergebnisse herausgefiltert, deren Kategorie in diesem Set enthalten ist. Kann nicht zusammen mit der Zulassungsliste verwendet werden.
    • Locale für Anzeigenamen: any string
    • Maximale Ergebnisse: any integer
    • Schwellenwert für Wert: 0.0-1.0
    • Zulassungsliste für Kategorien: vector of strings
    • Sperrliste für Kategorien: vector of strings
    • Locale für Anzeigenamen: "en"
    • Maximale Ergebnisse: -1
    • Schwellenwert für Wert: 0
    • Zulassungsliste für Kategorien: leer
    • Sperrliste für Kategorien: leer
    result_callback Legt den Ergebnis-Listener fest, der die Klassifizierungsergebnisse asynchron empfängt, wenn sich der Gestenerkenner im Livestream-Modus befindet. Kann nur verwendet werden, wenn der Ausführungsmodus auf LIVE_STREAM gesetzt ist. ResultListener

    Modelle

    Der Gestenerkenner verwendet ein Modellbundle mit zwei vorgefertigten Modellbundles: ein Modellbundle für Handlandmarken und ein Modellbundle für die Gestenklassifizierung. Das Landmarkenmodell erkennt die Anwesenheit von Händen und die Handgeometrie. Das Modell zur Gestenerkennung erkennt Gesten anhand der Handgeometrie.

    Modellname Eingabeform Quantisierungstyp Modellkarte Versionen
    HandGestureClassifier 192 x 192, 224 x 224 float 16 info Neueste

    Diese Aufgabe unterstützt auch die Änderung des Modellbundles 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 den Gestenerkenner anpassen.

    Modellbundle für Handlandmarken

    Das Modellbundle für Handlandmarken erkennt die Keypoint-Lokalisierung von 21 Handknöchelkoordinaten in den erkannten Handbereichen. Das Modell wurde mit etwa 30.000 Bildern aus der realen Welt sowie mehreren gerenderten synthetischen Handmodellen trainiert, die auf verschiedene Hintergründe gelegt wurden. Hier die Definition der 21 Landmarken:

    Codes für bestimmte Hand-Landmark-Punkte

    Das Modellbundle für Handlandmarken enthält ein Modell zur Handflächenerkennung und ein Modell zur Erkennung von Handlandmarken. Das Modell zur Handflächenerkennung lokalisiert den Bereich der Hände im gesamten Eingabebild. Das Modell zur Erkennung von Handlandmarken findet die Landmarken auf dem zugeschnittenen Handbild, das vom Modell zur Handflächenerkennung definiert wurde.

    Da das Modell zur Handflächenerkennung viel zeitaufwendiger ist, verwendet der Gestenerkenner im Videomodus oder im Livestream-Modus den Begrenzungsrahmen, der durch die erkannten Handlandmarken im aktuellen Frame definiert wird, um den Bereich der Hände im nächsten Frame zu lokalisieren. Dadurch wird die Anzahl der Aufrufe des Modells zur Handflächenerkennung durch den Gestenerkenner reduziert. Nur wenn das Modell für Handlandmarken nicht mehr genügend Hände erkennen kann oder die Handverfolgung fehlschlägt, wird das Modell zur Handflächenerkennung aufgerufen, um die Hände neu zu lokalisieren.

    Modellbundle für die Gestenklassifizierung

    Das Modellbundle für die Gestenklassifizierung kann die folgenden gängigen Handgesten 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, gibt der Gestenerkenner das Ergebnis „None“ zurück. Wenn das Modell keine Hände erkennt, gibt der Gestenerkenner nichts zurück.

    Das Modellbundle für die Gestenklassifizierung enthält eine zweistufige Pipeline für neuronale Netze mit einem Modell für die Gesteneinbettung, gefolgt von einem Modell für die Gestenklassifizierung. Weitere Informationen finden Sie auf der Modellkarte für die Gestenklassifizierung.

    Das Modell für die Gesteneinbettung codiert die Bildmerkmale in einen Featurevektor. Das Klassifizierungsmodell ist ein einfacher Gestenklassifikator, der den Featurevektor als Eingabe verwendet. Das bereitgestellte Modellbundle für die Gestenklassifizierung enthält den Klassifikator für vordefinierte Gesten, der die oben genannten 7 gängigen Handgesten erkennt. Sie können das Modellbundle erweitern, um weitere Gesten zu erkennen, indem Sie einen eigenen benutzerdefinierten Gestenklassifikator trainieren. Weitere Informationen finden Sie im folgenden Abschnitt zu benutzerdefinierten Modellen.

    Wenn sowohl der Klassifikator für vordefinierte Gesten als auch der Klassifikator für benutzerdefinierte Gesten im Gestenerkenner dieselbe Geste in ihren Kategorien erkennen, wird die benutzerdefinierte Geste bevorzugt. Wenn nur ein Gestenklassifikator die Geste erkennt, gibt der Gestenerkenner die erkannte Geste direkt aus.

    Task-Benchmarks

    Hier sind die Task-Benchmarks für die gesamte Pipeline basierend auf den oben genannten vortrainierten Modellen. Das Ergebnis für die Latenz ist die durchschnittliche Latenz auf einem 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 Model Maker verwenden, um die vorhandenen Modelle zu ändern. Benutzerdefinierte Modelle, die mit MediaPipe verwendet werden, müssen das Format .task haben. Dabei handelt es sich um eine Modellbundle-Datei. Sie sollten Model Maker verwenden, 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 den Gestenerkenner anpassen.