Como usar MEDIAPIPE HANDS 🖐️ | Python - MediaPipe - OpenCV
Introducción a MediaPipe Hands
Resumen de la sección: En esta sección, se introduce el concepto de MediaPipe Hands, una solución que permite la detección y seguimiento de las manos en imágenes y videos. Se explican los modelos utilizados y cómo funcionan en conjunto para obtener resultados precisos.
Obtención de coordenadas de puntos de referencia en la mano
- MediaPipe Hands proporciona puntos de referencia en la palma de la mano y los dedos.
- Se pueden utilizar estos puntos de referencia tanto en imágenes como en vídeos.
- MediaPipe Hands utiliza machine learning para detectar 21 puntos de referencia 3D en la mano.
- El proceso implica un modelo para detectar la palma y otro modelo para ubicar los puntos de referencia.
Uso del seguimiento en vídeos
- En el caso de vídeos, se utiliza un método que realiza seguimiento del área donde se encuentra la mano.
- Esto reduce la latencia al no aplicar constantemente la detección de palmas.
- El detector solo se invoca cuando no se pueden identificar los 21 puntos.
Configuración y código
- Se muestra un ejemplo práctico utilizando Python y las bibliotecas OpenCV y MediaPipe.
- Se importan las librerías necesarias:
openCVcomocv2yMediaPipecomomp.
- Se importa también
mp.solutions.drawing_utilscomomp_drawingpara dibujar los resultados.
- Se exploran las opciones de configuración, como el modo estático y el número máximo de manos a detectar.
- Se configuran los valores según las necesidades del proyecto.
Configuración y Código
Resumen de la sección: En esta sección, se muestra cómo configurar y escribir el código para utilizar MediaPipe Hands en un proyecto. Se explican las opciones de configuración disponibles y se proporciona un ejemplo práctico.
Configuración de opciones
- Se exploran las opciones de configuración, como el modo estático y el número máximo de manos a detectar.
- Se configuran los valores según las necesidades del proyecto.
Escritura del código
- El código utiliza Python con las bibliotecas OpenCV y MediaPipe.
- Se importan las librerías necesarias:
openCVcomocv2yMediaPipecomomp.
- También se importa
mp.solutions.drawing_utilscomomp_drawingpara dibujar los resultados.
- Se crea un nuevo script llamado "manos_imagen_mediapipe.py".
- Se utilizan las funciones y métodos proporcionados por MediaPipe Hands para detectar y rastrear las manos en una imagen.
Introducción a MediaPipe Hands
Resumen de la sección: En esta sección, se introduce el concepto de MediaPipe Hands, una solución que permite la detección y seguimiento de las manos en imágenes y videos. Se explican los modelos utilizados y cómo funcionan en conjunto para obtener resultados precisos.
Obtención de coordenadas de puntos de referencia en la mano
- MediaPipe Hands proporciona puntos de referencia en la palma de la mano y los dedos.
- Se pueden utilizar estos puntos de referencia tanto en imágenes como en vídeos.
- MediaPipe Hands utiliza machine learning para detectar 21 puntos de referencia 3D en la mano.
- El proceso implica un modelo para detectar la palma y otro modelo para ubicar los puntos de referencia.
Uso del seguimiento en vídeos
- En el caso de vídeos, se utiliza un método que realiza seguimiento del área donde se encuentra la mano.
- Esto reduce la latencia al no aplicar constantemente la detección de palmas.
- El detector solo se invoca cuando no se pueden identificar los 21 puntos.
Configuración y código
- Se muestra un ejemplo práctico utilizando Python y las bibliotecas OpenCV y MediaPipe.
- Se importan las librerías necesarias:
openCVcomocv2yMediaPipecomomp.
- Se importa también
mp.solutions.drawing_utilscomomp_drawingpara dibujar los resultados.
- Se exploran las opciones de configuración, como el modo estático y el número máximo de manos a detectar.
- Se configuran los valores según las necesidades del proyecto.
Proceso de detección y orientación de la imagen
Resumen de la sección: En esta sección, se explica que al realizar el proceso de detección en una imagen reflejada, es necesario voltearla nuevamente para obtener su orientación original.
Detección y orientación de la imagen
- La imagen de entrada se asume como reflejada.
- Después del proceso de detección, es necesario voltear la imagen para restaurar su orientación original.
Activación del entorno virtual y visualización de la imagen
Resumen de la sección: Aquí se muestra cómo activar el entorno virtual y visualizar la imagen de entrada.
Activación del entorno virtual y visualización
- Se activa el entorno virtual donde está instalado MediaPipe.
- Se muestra la visualización de la imagen de entrada.
Conversión a RGB y obtención de las salidas
Resumen de la sección: En esta parte, se explica que es necesario convertir la imagen a formato RGB antes de realizar las detecciones. Luego, se obtienen dos salidas llamadas "multi hand ernest" y "multi hand landmark".
Conversión a RGB y obtención de salidas
- La imagen debe ser convertida a formato RGB.
- Se obtienen dos salidas: "multi hand ernest" y "multi hand landmark".
Datos obtenidos sobre las manos detectadas
Resumen de la sección: Aquí se muestra cómo obtener información sobre las manos detectadas en las salidas obtenidas.
Datos sobre las manos detectadas
- Se obtiene una colección de datos para cada mano detectada.
- Cada dato incluye la etiqueta que indica si es una mano izquierda o derecha, y la probabilidad estimada de la predicción.
Detección de múltiples manos
Resumen de la sección: En esta parte, se explica cómo detectar múltiples manos en una imagen y obtener los datos correspondientes.
Detección de múltiples manos
- Al cambiar el valor del parámetro "max nom hands" a 2, se pueden detectar y obtener los datos de ambas manos en la imagen.
Coordenadas decimales en los puntos de las manos
Resumen de la sección: Aquí se menciona que las coordenadas de los puntos en las manos están representadas por valores decimales, a diferencia de otros casos donde se trabajan con coordenadas enteras. Se indica que más adelante se verá cómo acceder a estas coordenadas en la imagen.
Coordenadas decimales en los puntos
- Las coordenadas de los puntos en las manos son valores decimales.
- Se explicará más adelante cómo acceder a estas coordenadas en la imagen.
Condición para procesamiento cuando no hay detecciones
Resumen de la sección: Aquí se añade una condición para realizar el procesamiento solo si hay detecciones disponibles. Además, se menciona que más adelante se verá otra forma para acceder a los puntos.
Condición para procesamiento sin detecciones
- Se añade una condición para realizar el procesamiento solo si hay detecciones disponibles.
- Se indica que más adelante se verá otra forma de acceder a los puntos.
Recorrido de los puntos en las manos detectadas
Resumen de la sección: Aquí se muestra cómo recorrer y acceder a los puntos en cada mano detectada.
Recorrido de los puntos en las manos
- Se utiliza un bucle "for" para recorrer cada grupo de 21 puntos por cada mano detectada.
- Se puede imprimir la información de los 21 puntos por cada mano en cada iteración.
Dibujo de los puntos y conexiones
Resumen de la sección: En esta parte, se explica cómo dibujar los 21 puntos y las conexiones entre ellos utilizando MediaPipe.
Dibujo de los puntos y conexiones
- Se utiliza MediaPipe para dibujar los 21 puntos y las conexiones entre ellos.
- Los puntos se muestran en rojo y las conexiones en verde por defecto.
Cambio del número máximo de manos detectadas
Resumen de la sección: Aquí se muestra cómo cambiar el número máximo de manos a detectar y verificar que ambas manos sean correctamente detectadas.
Cambio del número máximo de manos
- Al modificar el parámetro "max nom hands" a 2, ambas manos son correctamente detectadas.
- Se pueden visualizar sus respectivos datos tanto en la imagen como en la consola.
Personalización del color y tamaño de los puntos
Resumen de la sección: En esta parte, se explica cómo personalizar el color y tamaño de los puntos dibujados en la imagen.
Personalización del color y tamaño de los puntos
- Se puede cambiar el color y tamaño de los 21 puntos utilizando parámetros específicos.
- Los cambios se reflejan en la visualización de la imagen.
Cambio del color y grosor de las conexiones
Resumen de la sección: Aquí se muestra cómo cambiar el color y grosor de las conexiones entre los puntos dibujados.
Cambio del color y grosor de las conexiones
- Es posible modificar el color y grosor de las líneas que representan las conexiones entre los puntos.
- Los cambios se aplican a la visualización de la imagen.
Pruebas adicionales con modificaciones
Resumen de la sección: En esta parte, se menciona que se realizarán pruebas adicionales con modificaciones en el programa para seguir explorando funcionalidades.
Pruebas adicionales con modificaciones
- Se realizarán pruebas adicionales modificando ciertas líneas del programa.
- Estas líneas serán especificadas más adelante para continuar experimentando.
Obtención de coordenadas para usar en la imagen
Resumen de la sección: En esta sección, se explica cómo obtener las coordenadas de los dedos utilizando los "handler marks" proporcionados por MediaPipe. Se muestra cómo acceder a las puntas de cada dedo y se utilizan los nombres establecidos por MediaPipe para cada dedo.
Obtención de coordenadas del pulgar
- Utilizar
hand_landmarks.landmark[mp_hands.HandLandmark.THUMB_TIP].xpara obtener la coordenada x del pulgar.
- Multiplicar el valor obtenido por el ancho de la imagen para obtener un número más grande.
- Convertir el resultado a un número entero utilizando
int().
Obtención de coordenadas de los otros dedos
- Seguir el mismo procedimiento que con el pulgar, pero cambiar el nombre del dedo utilizado en
mp_hands.HandLandmark.
Dibujar círculos en las puntas de los dedos
- Utilizar las coordenadas obtenidas para dibujar un círculo azul en cada punta de los dedos utilizando OpenCV.
Detección de máximo dos manos
Resumen de la sección: En esta sección, se muestra cómo detectar un máximo de dos manos y dibujar círculos en las puntas de los dedos correspondientes.
Cambiar configuración para detectar máximo dos manos
- Configurar
max_num_handsen 2 para permitir la detección de hasta dos manos.
Obtener puntos usando índices
- Crear una lista con los índices correspondientes a las puntas de los dedos.
- Utilizar un bucle
forpara recorrer cada punto de cada mano y obtener las coordenadas x e y utilizando los índices.
- Dibujar círculos en las coordenadas obtenidas.
Prueba con imagen sin manos
Resumen de la sección: En esta sección, se realiza una prueba utilizando una imagen que no contiene manos para verificar que no se obtengan errores.
Verificación de detección
- Mostrar la imagen original sin círculos si no se detectan manos en la imagen.
Uso de MediaPipe Hands en un video stream
Resumen de la sección: En esta sección, se muestra cómo utilizar MediaPipe Hands en un video stream en tiempo real.
Configuración del video stream
- Utilizar
cv2.VideoCapturepara capturar el video desde la webcam.
- Configurar
max_num_handsymin_detection_confidencesegún sea necesario.
- Leer el video frame a frame y voltear horizontalmente para obtener una visualización tipo espejo.
Procesamiento del video stream
- Transformar los frames a RGB y pasarlos por el proceso de detección de manos.
- Utilizar un bucle
forpara obtener los puntos de interés y dibujar círculos en las puntas de los dedos.
Conclusiones
En este tutorial, aprendimos cómo obtener las coordenadas de las puntas de los dedos utilizando MediaPipe Hands. Se mostró cómo acceder a estas coordenadas tanto por nombres establecidos como por índices. También vimos cómo dibujar círculos en las puntas de los dedos y cómo utilizar MediaPipe Hands en un video stream en tiempo real.