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 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:
- Android - Code beispiel
- Python - Code Beispiel
- Web - [Codebeispiel](https://github.com/google-ai-edge/mediapipe-samples-web/blob/main/src/tasks/gesture-recognizer.ts - Leitfaden
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:
|
Der Gestenerkenner gibt die folgenden Ergebnisse aus:
|
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"] |
|
|
|
custom_gestures_classifier_options |
Optionen zum Konfigurieren des Verhaltens des Klassifikators für benutzerdefinierte Gesten. |
|
|
|
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:

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.