La tarea Gesture Recognizer de MediaPipe te permite reconocer gestos con la mano en tiempo real y proporciona los resultados del gesto con la mano reconocido junto con los puntos de referencia de las manos detectadas. Puedes usar esta tarea para reconocer gestos específicos de la mano de un usuario y, luego, invocar las funciones de la aplicación que corresponden a esos gestos.
Esta tarea opera sobre datos de imágenes con un modelo de aprendizaje automático (AA) y acepta datos estáticos o un flujo continuo. La tarea genera puntos de referencia de la mano en coordenadas de la imagen, puntos de referencia de la mano en coordenadas mundiales, lateralidad (mano izquierda o derecha) y las categorías de gestos con la mano de varias manos.
Comenzar
Para comenzar a usar esta tarea, sigue una de estas guías de implementación para tu plataforma de destino. En estas guías específicas para cada plataforma, se explica cómo implementar esta tarea de forma básica con un modelo recomendado y se proporcionan ejemplos de código con las opciones de configuración recomendadas:
- Android: Ejemplo de código
- Python: Ejemplo de código
- Web: [Ejemplo de código](https://github.com/google-ai-edge/mediapipe-samples-web/blob/main/src/tasks/gesture-recognizer.ts - Guía
Detalles de la tarea
En esta sección, se describen las capacidades, las entradas, las salidas y las opciones de configuración de esta tarea.
Funciones
- Procesamiento de imágenes de entrada: El procesamiento incluye la rotación, el cambio de tamaño, la normalización y la conversión del espacio de color de la imagen.
- Umbral de puntuación: Filtra los resultados según las puntuaciones de predicción.
- Lista de bloqueo y lista de entidades permitidas de etiquetas: Especifica las categorías de gestos que reconoce el modelo.
| Entradas de la tarea | Resultados de la tarea |
|---|---|
El Reconocedor de gestos acepta una entrada de uno de los siguientes tipos de datos:
|
El Reconocedor de gestos genera los siguientes resultados:
|
Opciones de configuración
Esta tarea tiene las siguientes opciones de configuración:
| Nombre de la opción | Descripción | Rango de valores | Valor predeterminado | |
|---|---|---|---|---|
running_mode |
Establece el modo de ejecución de la tarea. Existen tres modos: IMAGE: Es el modo para las entradas de una sola imagen. VIDEO: Es el modo para los fotogramas decodificados de un video. LIVE_STREAM: Es el modo para una transmisión en vivo de datos de entrada, como los de una cámara. En este modo, se debe llamar a resultListener para configurar un objeto de escucha que reciba resultados de forma asíncrona. |
{IMAGE, VIDEO, LIVE_STREAM} |
IMAGE |
|
num_hands |
El GestureRecognizer puede detectar una cantidad máxima de manos.
|
Any integer > 0 |
1 |
|
min_hand_detection_confidence |
Es la puntuación de confianza mínima para que la detección de manos se considere exitosa en el modelo de detección de palmas. | 0.0 - 1.0 |
0.5 |
|
min_hand_presence_confidence |
Es la puntuación de confianza mínima de la puntuación de presencia de la mano en el modelo de detección de puntos de referencia de la mano. En el modo de video y el modo de transmisión en vivo del Reconocedor de gestos, si la puntuación de confianza de presencia de la mano del modelo de puntos de referencia de la mano está por debajo de este umbral, se activa el modelo de detección de palmas. De lo contrario, se usa un algoritmo de monitoreo de manos ligero para determinar la ubicación de las manos para la detección de puntos de referencia posterior. | 0.0 - 1.0 |
0.5 |
|
min_tracking_confidence |
Es la puntuación de confianza mínima para que el monitoreo de manos se considere exitoso. Es el umbral de IoU del cuadro delimitador entre las manos en el fotograma actual y el último. En los modos Video y Stream del Reconocedor de gestos, si falla el seguimiento, el Reconocedor de gestos activa la detección de manos. De lo contrario, se omite la detección de manos. | 0.0 - 1.0 |
0.5 |
|
canned_gestures_classifier_options |
Opciones para configurar el comportamiento del clasificador de gestos predefinidos. Los gestos predeterminados son ["None", "Closed_Fist", "Open_Palm", "Pointing_Up", "Thumb_Down", "Thumb_Up", "Victory", "ILoveYou"]. |
|
|
|
custom_gestures_classifier_options |
Opciones para configurar el comportamiento del clasificador de gestos personalizados. |
|
|
|
result_callback |
Establece el objeto de escucha de resultados para recibir los resultados de clasificación de forma asíncrona cuando el reconocedor de gestos está en el modo de transmisión en vivo.
Solo se puede usar cuando el modo de ejecución está establecido en LIVE_STREAM. |
ResultListener |
N/A | N/A |
Modelos
El Reconocedor de gestos usa un paquete de modelos con dos paquetes de modelos preempaquetados: un paquete de modelos de puntos de referencia de la mano y un paquete de modelos de clasificación de gestos. El modelo de puntos de referencia detecta la presencia de manos y la geometría de las manos, y el modelo de reconocimiento de gestos reconoce los gestos según la geometría de las manos.
| Nombre del modelo | Forma de entrada | Tipo de cuantización | Tarjeta de modelo | Versiones |
|---|---|---|---|---|
| HandGestureClassifier | 192 x 192, 224 x 224 | Flotante de 16 | info | Más reciente |
Esta tarea también admite la modificación del paquete del modelo con Model Maker. Para obtener más información sobre el uso de Model Maker para personalizar modelos para esta tarea, consulta la página Personaliza modelos para Gesture Recognizer.
Paquete del modelo de marcas de referencia de la mano
El paquete del modelo de puntos de referencia de la mano detecta la ubicación de los puntos clave de 21 coordenadas de los nudillos de la mano dentro de las regiones de la mano detectadas. El modelo se entrenó con aproximadamente 30,000 imágenes del mundo real, así como varios modelos sintéticos de manos renderizados que se superpusieron en diversos fondos. Consulta la definición de los 21 puntos de referencia a continuación:

El paquete del modelo de detección de puntos de referencia de la mano contiene el modelo de detección de palmas y el modelo de detección de puntos de referencia de la mano. El modelo de detección de palmas localiza la región de las manos en toda la imagen de entrada, y el modelo de detección de puntos de referencia de la mano encuentra los puntos de referencia en la imagen de la mano recortada que define el modelo de detección de palmas.
Dado que el modelo de detección de la palma de la mano requiere mucho más tiempo, en el modo de video o de transmisión en vivo, el Reconocedor de gestos usa el cuadro delimitador definido por los puntos de referencia de la mano detectada en el fotograma actual para localizar la región de las manos en el siguiente fotograma. Esto reduce las veces que el Reconocedor de gestos activa el modelo de detección de la palma. Solo cuando el modelo de marcas de la mano ya no puede identificar la presencia de una cantidad suficiente de manos requeridas, o cuando falla el monitoreo de manos, se invoca el modelo de detección de la palma para volver a localizar las manos.
Paquete del modelo de clasificación de gestos
El paquete del modelo de clasificación de gestos puede reconocer los siguientes gestos comunes con las manos:
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 el modelo detecta manos, pero no reconoce un gesto, el reconocedor de gestos devuelve un resultado de "None". Si el modelo no detecta manos, el reconocedor de gestos devuelve un valor vacío.
El paquete del modelo de clasificación de gestos contiene una canalización de red neuronal de dos pasos con un modelo de incorporación de gestos seguido de un modelo de clasificación de gestos. Consulta más detalles en la tarjeta del modelo de clasificación de gestos.
El modelo de incorporación de gestos codifica los atributos de la imagen en un vector de atributos, y el modelo de clasificación es un clasificador de gestos liviano que toma el vector de atributos como entrada. El paquete del modelo de clasificación de gestos proporcionado contiene el clasificador de gestos predefinidos, que detecta los 7 gestos de mano comunes que se mencionaron anteriormente. Puedes extender el paquete del modelo para reconocer más gestos entrenando tu propio clasificador de gestos personalizado. Consulta más detalles en la siguiente sección Modelos personalizados.
El Reconocedor de gestos con un clasificador de gestos predefinidos y un clasificador de gestos personalizados prefiere el gesto personalizado si ambos clasificadores reconocen el mismo gesto en sus categorías. Si solo un clasificador de gestos reconoce el gesto, el Reconocedor de gestos genera el gesto reconocido directamente.
Comparativas de tareas
Aquí se encuentran las comparativas de tareas para toda la canalización basadas en los modelos preentrenados anteriores. El resultado de latencia es la latencia promedio en el Pixel 6 con CPU o GPU.
| Nombre del modelo | Latencia de CPU | Latencia de GPU |
|---|---|---|
| GestureRecognizer | 16.76 ms | 20.87 ms |
Modelos personalizados
Si deseas mejorar o alterar las capacidades de los modelos proporcionados en esta tarea, puedes usar Model Maker para modificar los modelos existentes. Los modelos personalizados que se usan con MediaPipe deben estar en formato .task, que es un archivo de paquete de modelos. Te recomendamos que uses Model Maker para modificar los modelos proporcionados para esta tarea antes de compilar los tuyos.
Para obtener más información sobre cómo personalizar un modelo para esta tarea, consulta Personaliza modelos para Gesture Recognizer.