La tâche MediaPipe Gesture Recognizer vous permet de reconnaître les gestes de la main en temps réel et fournit les résultats des gestes de la main reconnus ainsi que les points de repère des mains détectées. Vous pouvez utiliser cette tâche pour reconnaître des gestes de la main spécifiques d'un utilisateur et appeler les fonctionnalités de l'application qui correspondent à ces gestes.
Cette tâche fonctionne sur des données d'image avec un modèle de machine learning (ML) et accepte des données statiques ou un flux continu. La tâche génère des points de repère de la main dans les coordonnées de l'image, des points de repère de la main dans les coordonnées du monde, la latéralité (main gauche/droite) et les catégories de gestes de la main pour plusieurs mains.
Premiers pas
Pour commencer à utiliser cette tâche, suivez l'un de ces guides d'implémentation pour votre plate-forme cible. Ces guides spécifiques à la plate-forme vous expliquent comment implémenter de base cette tâche à l'aide d'un modèle recommandé. Ils fournissent également des exemples de code avec les options de configuration recommandées :
- Android – exemple de code
- Python – exemple de code
- Web : [exemple de code](https://github.com/google-ai-edge/mediapipe-samples-web/blob/main/src/tasks/gesture-recognizer.ts) – guide
Détails de la tâche
Cette section décrit les capacités, les entrées, les sorties et les options de configuration de cette tâche.
Fonctionnalités
- Traitement des images d'entrée : le traitement inclut la rotation, le redimensionnement, la normalisation et la conversion de l'espace colorimétrique des images.
- Seuil de score : filtrez les résultats en fonction des scores de prédiction.
- Liste d'autorisation et liste de blocage des libellés : spécifiez les catégories de gestes reconnues par le modèle.
| Entrées de tâches | Sorties de tâches |
|---|---|
Le Gesture Recognizer accepte une entrée de l'un des types de données suivants :
|
Le Gesture Recognizer génère les résultats suivants :
|
Options de configuration
Cette tâche comporte les options de configuration suivantes :
| Nom de l'option | Description | Plage de valeurs | Valeur par défaut | |
|---|---|---|---|---|
running_mode |
Définit le mode d'exécution de la tâche. Il existe trois modes : IMAGE : mode pour les entrées d'image unique. VIDEO : mode pour les frames décodés d'une vidéo. LIVE_STREAM : mode pour une diffusion en direct des données d'entrée, par exemple à partir d'une caméra. Dans ce mode, resultListener doit être appelé pour configurer un écouteur afin de recevoir les résultats de manière asynchrone. |
{IMAGE, VIDEO, LIVE_STREAM} |
IMAGE |
|
num_hands |
Le nombre maximal de mains pouvant être détectées par GestureRecognizer.
|
Any integer > 0 |
1 |
|
min_hand_detection_confidence |
Score de confiance minimal pour que la détection de la main soit considérée comme réussie dans le modèle de détection de la paume. | 0.0 - 1.0 |
0.5 |
|
min_hand_presence_confidence |
Score de confiance minimal de la présence de la main dans le modèle de détection des points de repère de la main. En mode vidéo et en mode diffusion en direct du Gesture Recognizer, si le score de confiance de présence de la main du modèle de points de repère de la main est inférieur à ce seuil, le modèle de détection de la paume est déclenché. Sinon, un algorithme de suivi des mains léger est utilisé pour déterminer l'emplacement des mains en vue de la détection ultérieure des points de repère. | 0.0 - 1.0 |
0.5 |
|
min_tracking_confidence |
Score de confiance minimal pour que le suivi des mains soit considéré comme réussi. Il s'agit du seuil IoU du cadre de sélection entre les mains dans le frame actuel et le dernier frame. En mode vidéo et en mode flux du Gesture Recognizer, si le suivi échoue, le Gesture Recognizer déclenche la détection de la main. Sinon, la détection de la main est ignorée. | 0.0 - 1.0 |
0.5 |
|
canned_gestures_classifier_options |
Options permettant de configurer le comportement du classificateur de gestes prédéfinis. Les gestes prédéfinis sont ["None", "Closed_Fist", "Open_Palm", "Pointing_Up", "Thumb_Down", "Thumb_Up", "Victory", "ILoveYou"]. |
|
|
|
custom_gestures_classifier_options |
Options permettant de configurer le comportement du classificateur de gestes personnalisés. |
|
|
|
result_callback |
Définit l'écouteur de résultat pour recevoir les résultats de classification de manière asynchrone lorsque le détecteur de gestes est en mode flux en direct.
Ne peut être utilisé que lorsque le mode d'exécution est défini sur LIVE_STREAM |
ResultListener |
N/A | N/A |
Modèles
Le module de reconnaissance des gestes utilise un bundle de modèles avec deux bundles de modèles pré-emballés : un bundle de modèles de points de repère de la main et un bundle de modèles de classification des gestes. Le modèle de points de repère détecte la présence des mains et leur géométrie, tandis que le modèle de reconnaissance des gestes reconnaît les gestes en fonction de la géométrie des mains.
| Nom du modèle | Forme d'entrée | Type de quantification | Fiche de modèle | Versions |
|---|---|---|---|---|
| HandGestureClassifier | 192 x 192, 224 x 224 | float 16 | info | Dernières |
Cette tâche permet également de modifier le bundle de modèle à l'aide de Model Maker. Pour en savoir plus sur l'utilisation de Model Maker pour personnaliser des modèles pour cette tâche, consultez la page Personnaliser des modèles pour Gesture Recognizer.
Bundle de modèles de points de repère de la main
Le bundle de modèles de points de repère de la main détecte la localisation des points clés de 21 coordonnées des articulations de la main dans les régions de la main détectées. Le modèle a été entraîné sur environ 30 000 images réelles, ainsi que sur plusieurs modèles de mains synthétiques rendues et superposées sur différents arrière-plans. Consultez la définition des 21 points de repère ci-dessous :

Le bundle de modèles de points de repère de la main contient un modèle de détection de la paume et un modèle de détection des points de repère de la main. Le modèle de détection de la paume localise la région des mains à partir de l'image d'entrée complète, et le modèle de détection des points de repère de la main trouve les points de repère sur l'image de la main recadrée définie par le modèle de détection de la paume.
Étant donné que le modèle de détection de la paume prend beaucoup plus de temps, en mode vidéo ou en mode diffusion en direct, Gesture Recognizer utilise le cadre de sélection défini par les points de repère de la main détectée dans le frame actuel pour localiser la région des mains dans le frame suivant. Cela réduit le nombre de fois où le modèle de détection de la paume de la main est déclenché par le module Gesture Recognizer. Le modèle de détection de la paume n'est appelé à relocaliser les mains que lorsque le modèle de points de repère de la main ne parvient plus à identifier le nombre de mains requis ou que le suivi des mains échoue.
Bundle de modèle de classification des gestes
Le bundle de modèle de classification des gestes peut reconnaître les gestes de la main courants suivants :
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
Si le modèle détecte des mains, mais ne reconnaît pas de geste, le module de reconnaissance des gestes renvoie un résultat "None" (Aucun). Si le modèle ne détecte pas de mains, le module de reconnaissance des gestes renvoie une valeur vide.
Le bundle de modèles de classification des gestes contient un pipeline de réseau de neurones en deux étapes avec un modèle d'intégration des gestes suivi d'un modèle de classification des gestes. Pour en savoir plus, consultez la fiche du modèle de classification des gestes.
Le modèle d'intégration de gestes encode les caractéristiques de l'image dans un vecteur de caractéristiques, et le modèle de classification est un classificateur de gestes léger qui prend le vecteur de caractéristiques comme entrée. Le bundle de modèle de classification des gestes fourni contient le classificateur de gestes prédéfinis, qui détecte les sept gestes de la main courants présentés ci-dessus. Vous pouvez étendre le bundle de modèles pour reconnaître davantage de gestes en entraînant votre propre classificateur de gestes personnalisé. Pour en savoir plus, consultez la section Modèles personnalisés ci-dessous.
Le module Gesture Recognizer avec classificateur de gestes prédéfini et classificateur de gestes personnalisé préfère le geste personnalisé si les deux classificateurs reconnaissent le même geste dans leurs catégories. Si un seul classificateur de gestes reconnaît le geste, le Gesture Recognizer génère directement le geste reconnu.
Benchmarks des tâches
Voici les benchmarks de tâches pour l'ensemble du pipeline, basés sur les modèles préentraînés ci-dessus. Le résultat de la latence correspond à la latence moyenne sur Pixel 6 à l'aide du CPU / GPU.
| Nom du modèle | Latence du processeur | Latence du GPU |
|---|---|---|
| GestureRecognizer | 16,76 ms | 20,87 ms |
Modèles personnalisés
Si vous souhaitez améliorer ou modifier les capacités des modèles fournis dans cette tâche, vous pouvez utiliser Model Maker pour modifier les modèles existants. Les modèles personnalisés utilisés avec MediaPipe doivent être au format .task, qui est un fichier de bundle de modèle. Vous devriez envisager d'utiliser Model Maker pour modifier les modèles fournis pour cette tâche avant de créer les vôtres.
Pour en savoir plus sur la personnalisation d'un modèle pour cette tâche, consultez Personnaliser des modèles pour Gesture Recognizer.