Guide des tâches de reconnaissance des gestes

Main faisant un geste de pouce levé, identifié comme tel par le modèle avec un niveau de confiance de 63 %

La tâche de reconnaissance des gestes MediaPipe vous permet de reconnaître les gestes de la main en temps réel et fournit les résultats de la reconnaissance des gestes de la main, ainsi que les repères 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 produit des repères de main en coordonnées d'image, des repères de main en coordonnées mondiales, une latéralité (main gauche/droite) et les catégories de gestes de plusieurs mains.

Essayez !

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 manière basique cette tâche à l'aide d'un modèle recommandé et fournissent des exemples de code avec les options de configuration recommandées:

Détails de la tâche

Cette section décrit les fonctionnalité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 comprend la rotation, le redimensionnement, la normalisation et la conversion d'espaces colorimétriques des images.
  • Seuil de score : filtrez les résultats en fonction des scores de prédiction.
  • Étiquetter la liste d'autorisation et la liste de blocage : spécifiez les catégories de gestes reconnues par le modèle.
Entrées de tâche Sorties de tâche
Le détecteur de gestes accepte l'un des types de données suivants:
  • Images fixes
  • Images vidéo décodées
  • Flux vidéo en direct
Le détecteur de gestes génère les résultats suivants:
  • Catégories de gestes
  • Main dominante des mains détectées
  • Points de repère des mains détectées en coordonnées d'image
  • Points de repère des mains détectées en coordonnées mondiales

Options de configuration

Cette tâche propose 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'une seule image.

VIDEO: mode des images décodées d'une vidéo.

LIVE_STREAM: mode de 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 peut être détecté par le 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 de la main. 0.0 - 1.0 0.5
min_hand_presence_confidence Score de confiance minimal du score de présence de la main dans le modèle de détection des repères de la main. En mode Vidéo et en mode Diffusion en direct du service de reconnaissance des gestes, si le score de confiance de la présence de la main du modèle 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 de la ou des mains afin de détecter les repères par la suite. 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 d'IoU du cadre de délimitation entre les mains dans le frame actuel et le dernier frame. En mode Vidéo et en mode Flux du service de reconnaissance des gestes, si le suivi échoue, le service de reconnaissance des gestes déclenche la détection des mains. Sinon, la détection de la main est ignorée. 0.0 - 1.0 0.5
canned_gestures_classifier_options Options de configuration du 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"]
.
  • Locales des noms à afficher: éventuelles langues à utiliser pour les noms à afficher spécifiés dans les métadonnées du modèle TFLite.
  • Nombre maximal de résultats: nombre maximal de résultats de classification les plus élevés à renvoyer. Si la valeur est inférieure à 0, tous les résultats disponibles sont renvoyés.
  • Seuil de score: score en dessous duquel les résultats sont rejetés. Si cette valeur est définie sur 0, tous les résultats disponibles sont renvoyés.
  • Liste d'autorisation des catégories: liste d'autorisation des noms de catégories. Si cet ensemble n'est pas vide, les résultats de classification dont la catégorie ne figure pas dans cet ensemble seront filtrés. S'exclut mutuellement avec la liste de blocage.
  • Liste de blocage des catégories: liste de blocage des noms de catégories. Si cet ensemble n'est pas vide, les résultats de classification dont la catégorie figure dans cet ensemble seront filtrés. S'exclut mutuellement avec la liste d'autorisation.
    • Paramètre régional des noms à afficher: any string
    • Résultats max. : any integer
    • Seuil de score: 0.0-1.0
    • Liste d'autorisation de la catégorie: vector of strings
    • Liste de blocage des catégories: vector of strings
    • Paramètre régional des noms à afficher: "en"
    • Résultats max. : -1
    • Seuil de score: 0
    • Liste d'autorisation des catégories: vide
    • Liste de blocage des catégories: vide
    custom_gestures_classifier_options Options permettant de configurer le comportement du classificateur de gestes personnalisés.
  • Locales des noms à afficher: éventuelles langues à utiliser pour les noms à afficher spécifiés dans les métadonnées du modèle TFLite.
  • Nombre maximal de résultats: nombre maximal de résultats de classification les plus élevés à renvoyer. Si la valeur est inférieure à 0, tous les résultats disponibles sont renvoyés.
  • Seuil de score: score en dessous duquel les résultats sont rejetés. Si cette valeur est définie sur 0, tous les résultats disponibles sont renvoyés.
  • Liste d'autorisation des catégories: liste d'autorisation des noms de catégories. Si cet ensemble n'est pas vide, les résultats de classification dont la catégorie ne figure pas dans cet ensemble seront filtrés. S'exclut mutuellement avec la liste de blocage.
  • Liste de blocage des catégories: liste de blocage des noms de catégories. Si cet ensemble n'est pas vide, les résultats de classification dont la catégorie figure dans cet ensemble seront filtrés. S'exclut mutuellement avec la liste d'autorisation.
    • Paramètre régional des noms à afficher: any string
    • Résultats max. : any integer
    • Seuil de score: 0.0-1.0
    • Liste d'autorisation de la catégorie: vector of strings
    • Liste de blocage des catégories: vector of strings
    • Paramètre régional des noms à afficher: "en"
    • Résultats max. : -1
    • Seuil de score: 0
    • Liste d'autorisation des catégories: vide
    • Liste de blocage des catégories: vide
    result_callback Définit l'écouteur de résultats pour qu'il reçoive 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 détecteur de gestes utilise un bundle de modèles avec deux bundles de modèles préemballés: un bundle de modèles de repères manuels et un bundle de modèles de classification des gestes. Le modèle de repère détecte la présence de mains et la géométrie des mains, et 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 Nouveautés

    Cette tâche permet également de modifier le bundle de modèles à 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 le détecteur de gestes.

    Lot de modèles de repères manuels

    Le bundle de modèle de repère de la main détecte la localisation des points clés de 21 coordonnées de jointures 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 d'images synthétiques de mains superposés à différents arrière-plans. Consultez la définition des 21 points de repère ci-dessous:

    Codes pour des points de repère spécifiques de la main

    Le bundle de modèles de repères de la main contient le modèle de détection de la paume et le modèle de détection des repères de la main. Le modèle de détection de la paume localise la région des mains dans l'ensemble de l'image d'entrée, et le modèle de détection des repères de la main trouve les repères sur l'image recadrée de la main définie par le modèle de détection de la paume.

    Étant donné que le modèle de détection de la paume de la main est beaucoup plus long, en mode Vidéo ou en mode flux en direct, le service de reconnaissance des gestes utilise la zone de délimitation définie par les repères de la main détectés dans le frame actuel pour localiser la région des mains dans le frame suivant. Cela réduit le nombre de fois où le détecteur de gestes déclenche le modèle de détection de la paume de la main. Le modèle de détection de la paume de la main n'est appelé que lorsque le modèle de repères de la main ne parvient plus à identifier suffisamment de présences de mains ou que le suivi des mains échoue.

    Bundle de modèles de classification des gestes

    Le bundle de modèles 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 système de reconnaissance gestuelle renvoie le résultat "None". Si le modèle ne détecte pas de mains, le système 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'encapsulation 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'encapsulation 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 utilise 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 suivante.

    Le détecteur de gestes avec un classificateur de gestes prédéfini et un 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 service de reconnaissance des gestes génère directement le geste reconnu.

    Benchmarks des tâches

    Voici les benchmarks de tâche 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 le Pixel 6 à l'aide du processeur / 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 fonctionnalité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. Nous vous recommandons 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 la section Personnaliser des modèles pour le détecteur de gestes.