Aufgabenanleitung zur Gestenerkennung

Eine Hand, die einen Daumen nach oben zeigt, wird vom Modell mit einer Wahrscheinlichkeit von 63% als Daumen-hoch-Geste erkannt.

Mit der MediaPipe-Gestenerkennungsaufgabe können Sie Handgesten in Echtzeit erkennen. Sie erhalten die erkannten Handgestenergebnisse zusammen mit den Markierungen der erkannten Hände. Mit dieser Aufgabe können Sie bestimmte Handgesten eines Nutzers erkennen und Anwendungsfunktionen aufrufen, die diesen Gesten entsprechen.

Bei dieser Aufgabe werden Bilddaten mit einem ML-Modell verarbeitet. Es werden entweder statische Daten oder ein kontinuierlicher Stream akzeptiert. Die Aufgabe gibt Handmarkierungen in Bildkoordinaten, Handmarkierungen in Weltkoordinaten, die Händigkeit (links/rechts) und die Kategorien der Handgesten 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 veranschaulicht. Außerdem finden Sie 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ößenänderung, Normalisierung und Farbraumkonvertierung.
  • Grenzwert für die Bewertung: Ergebnisse nach Bewertungen filtern.
  • Zulassungs- und Sperrliste für Labels: Hier können Sie die Gestekategorien angeben, die vom Modell erkannt werden sollen.
Aufgabeneingaben Aufgabenausgaben
Der Gestenerkennungsdienst akzeptiert eine Eingabe eines der folgenden Datentypen:
  • Standbilder
  • Decodierte Videoframes
  • Live-Videofeed
Der Gestenerkennungsdienst gibt die folgenden Ergebnisse aus:
  • Kategorien von Handgesten
  • Links-/Rechtshänder der erkannten Hände
  • Markierungen der erkannten Hände in Bildkoordinaten
  • Markierungen der erkannten Hände in Weltkoordinaten

Konfigurationsoptionen

Für diese Aufgabe gibt es 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 Eingaben mit einem einzelnen Bild.

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 für den asynchronen Empfang von Ergebnissen einzurichten.
{IMAGE, VIDEO, LIVE_STREAM} IMAGE
num_hands Die maximale Anzahl von Händen, die vom GestureRecognizer erkannt werden kann. Any integer > 0 1
min_hand_detection_confidence Die Mindestpunktzahl für die Handerkennung, die im Modell für die Handflächenerkennung als erfolgreich gilt. 0.0 - 1.0 0.5
min_hand_presence_confidence Der Mindestwert der Konfidenz der Handpräsenz im Modell zur Erkennung von Handmarkierungen. Wenn der Konfidenzwert für die Präsenz einer Hand aus dem Modell für Handmarkierungen im Video- und Livestream-Modus der Gestenerkennung unter diesem Schwellenwert liegt, wird das Modell zur Handflächenerkennung ausgelöst. Andernfalls wird ein einfacher Algorithmus zur Handerkennung verwendet, um die Position der Hand(en) für die anschließende Markierungserkennung zu bestimmen. 0.0 - 1.0 0.5
min_tracking_confidence Der Mindestwert für die Konfidenz, damit die Handerkennung als erfolgreich gilt. Dies ist der IoU-Grenzwert des Begrenzungsrahmens zwischen den Händen im aktuellen und im letzten Frame. Wenn die Erkennung im Video- und Streammodus der Gestenererkennung fehlschlägt, löst die Gestenererkennung die Handerkennung aus. Andernfalls wird die Handerkennung übersprungen. 0.0 - 1.0 0.5
canned_gestures_classifier_options Optionen zum Konfigurieren des Klassifikators für vordefinierte Gesten. Die vordefinierten Touch-Gesten sind ["None", "Closed_Fist", "Open_Palm", "Pointing_Up", "Thumb_Down", "Thumb_Up", "Victory", "ILoveYou"]
.
  • Sprache für Anzeigenamen: Die Sprache, die für die über die TFLite-Modellmetadaten angegebenen Anzeigenamen verwendet werden soll (falls vorhanden).
  • Max. Ergebnisse: Die maximale Anzahl der Klassifizierungsergebnisse mit der höchsten Punktzahl, die zurückgegeben werden sollen. Wenn der Wert kleiner als 0 ist, werden alle verfügbaren Ergebnisse zurückgegeben.
  • Grenzwert für die Punktzahl: Die Punktzahl, unter der Ergebnisse abgelehnt werden. Wenn der Wert auf „0“ festgelegt ist, werden alle verfügbaren Ergebnisse zurückgegeben.
  • Zulassungsliste für Kategorien: die Zulassungsliste für Kategorienamen. Wenn die Liste nicht leer ist, werden Klassifizierungsergebnisse, deren Kategorie nicht in dieser Liste enthalten ist, herausgefiltert. Schließt sich mit „denylist“ aus.
  • Kategorie-Sperreliste: Die Sperrliste der Kategorienamen. Wenn die Liste nicht leer ist, werden Klassifizierungsergebnisse herausgefiltert, deren Kategorie zu dieser Liste gehört. Schließt „Zulassungsliste“ aus.
    • Sprache für Anzeigenamen: any string
    • Maximale Ergebnisse: any integer
    • Bewertungsgrenzwert: 0.0-1.0
    • Zulassungsliste für Kategorien: vector of strings
    • Sperrliste für Kategorien: vector of strings
    • Sprache für Anzeigenamen: "en"
    • Maximale Ergebnisse: -1
    • Bewertungsgrenzwert: 0
    • Zulassungsliste für Kategorien: leer
    • Kategorie-Sperliste: leer
    custom_gestures_classifier_options Optionen zum Konfigurieren des Verhaltens des Klassifikators für benutzerdefinierte Touch-Gesten.
  • Sprache für Anzeigenamen: Die Sprache, die für die über die TFLite-Modellmetadaten angegebenen Anzeigenamen verwendet werden soll (falls vorhanden).
  • Max. Ergebnisse: Die maximale Anzahl der Klassifizierungsergebnisse mit der höchsten Punktzahl, die zurückgegeben werden sollen. Wenn der Wert kleiner als 0 ist, werden alle verfügbaren Ergebnisse zurückgegeben.
  • Grenzwert für die Punktzahl: Die Punktzahl, unter der Ergebnisse abgelehnt werden. Wenn der Wert auf „0“ festgelegt ist, werden alle verfügbaren Ergebnisse zurückgegeben.
  • Zulassungsliste für Kategorien: die Zulassungsliste für Kategorienamen. Wenn die Liste nicht leer ist, werden Klassifizierungsergebnisse, deren Kategorie nicht in dieser Liste enthalten ist, herausgefiltert. Schließt sich mit „denylist“ aus.
  • Kategorie-Sperreliste: Die Sperrliste der Kategorienamen. Wenn die Liste nicht leer ist, werden Klassifizierungsergebnisse herausgefiltert, deren Kategorie zu dieser Liste gehört. Schließt „Zulassungsliste“ aus.
    • Sprache für Anzeigenamen: any string
    • Maximale Ergebnisse: any integer
    • Bewertungsgrenzwert: 0.0-1.0
    • Zulassungsliste für Kategorien: vector of strings
    • Sperrliste für Kategorien: vector of strings
    • Sprache für Anzeigenamen: "en"
    • Maximale Ergebnisse: -1
    • Bewertungsgrenzwert: 0
    • Zulassungsliste für Kategorien: leer
    • Kategorie-Sperliste: leer
    result_callback Legt fest, dass der Ergebnisempfänger die Klassifizierungsergebnisse asynchron empfängt, wenn sich die Gesterkenner im Livestream-Modus befindet. Kann nur verwendet werden, wenn der Ausführungsmodus auf LIVE_STREAM festgelegt ist. ResultListener

    Modelle

    Der Gestenerkennungsdienst verwendet ein Modellpaket mit zwei vorkonfigurierten Modellpaketen: ein Modellpaket für Handmarkierungen und ein Modellpaket für die Gestenklassifizierung. Das Landmark-Modell 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 × 192, 224 × 224 float 16 info Neueste

    Bei dieser Aufgabe ist auch die Änderung des Modellpakets mit Model Maker möglich. Weitere Informationen zur Anpassung von Modellen für diese Aufgabe mit Model Maker finden Sie auf der Seite Modelle für den Gestenerkennungsalgorithmus anpassen.

    Set mit Modellen für Handmarkierungen

    Das Modellpaket für Handmarkierungen erkennt die Punktlokalisierung von 21 Knochenkoordinaten innerhalb der erkannten Handregionen. Das Modell wurde mit etwa 30.000 echten Bildern sowie mehreren gerenderten synthetischen Handmodellen trainiert, die auf verschiedene Hintergründe gelegt wurden. Die Definition der 21 Meilensteine finden Sie unten:

    Codes für bestimmte Landmarken an der Hand

    Das Modellpaket für Handmarkierungen enthält ein Modell zur Erkennung von Handflächen und ein Modell zur Erkennung von Handmarkierungen. Das Modell zur Handflächenerkennung lokalisiert die Region der Hände im gesamten Eingabebild und das Modell zur Erkennung von Handmerkmalen findet die vom Modell zur Handflächenerkennung definierten Markierungen auf dem zugeschnittenen Handbild.

    Da das Modell zur Handflächenerkennung viel zeitaufwendiger ist, verwendet der Gestenherkenner im Videomodus oder im Livestream-Modus den Begrenzungsrahmen, der durch die erkannten Handmarkierungen im aktuellen Frame definiert ist, um den Bereich der Hände im nächsten Frame zu lokalisieren. Dadurch wird die Häufigkeit reduziert, mit der der Touch-Gesten-Erkennungsdienst das Modell zur Handflächenerkennung auslöst. Nur wenn das Modell für Handmarkierungen nicht mehr die erforderliche Anzahl von Händen erkennen kann oder die Handerkennung fehlschlägt, wird das Modell zur Handflächenerkennung aufgerufen, um die Hände neu zu lokalisieren.

    Paket mit Modellen zur Gestenklassifizierung

    Das Paket mit dem Gestenklassifizierungsmodell kann diese 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 die Gesterkenner ein Ergebnis von „Kein“ zurück. Wenn das Modell keine Hände erkennt, gibt die Gestenerkennung eine leere Zeichenfolge zurück.

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

    Das Modell für die Gesteneinbettung codiert die Bildmerkmale in einen Merkmalsvektor. Das Klassifizierungsmodell ist ein schlanker Gestenklassifikator, der den Merkmalsvektor als Eingabe nimmt. Das bereitgestellte Modellpaket zur Gestenklassifizierung enthält den Klassifikator für vordefinierte Gesten, der die oben genannten sieben gängigen Handbewegungen erkennt. Sie können das Modellpaket erweitern, um mehr Gesten zu erkennen, indem Sie Ihren eigenen benutzerdefinierten Gestenklassifikator trainieren. Weitere Informationen finden Sie im folgenden Abschnitt Benutzerdefinierte Modelle.

    Wenn der Gestenerkennungsalgorithmus sowohl einen vordefinierten Gestenklassifikator als auch einen benutzerdefinierten Gestenklassifikator enthält, wird die benutzerdefinierte Geste bevorzugt, wenn beide Klassifikatoren dieselbe Geste in ihren Kategorien erkennen. Wenn nur ein Gestenklassifikator die Geste erkennt, gibt der Gesten-Erkennungsdienst die erkannte Geste direkt aus.

    Benchmarks für Aufgaben

    Hier sind die Aufgaben-Benchmarks für die gesamte Pipeline basierend auf den oben genannten vorab trainierten Modellen. 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 mit dem Model Maker ändern. Benutzerdefinierte Modelle, die mit MediaPipe verwendet werden, müssen im .task-Format vorliegen. Das ist eine Modell-Bundle-Datei. Sie sollten die bereitgestellten Modelle für diese Aufgabe mit dem Model Maker anpassen, bevor Sie eigene erstellen.

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