Como usar MEDIAPIPE HANDS 🖐️ | Python - MediaPipe - OpenCV

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: openCV como cv2 y MediaPipe como mp.
  • Se importa también mp.solutions.drawing_utils como mp_drawing para 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: openCV como cv2 y MediaPipe como mp.
  • También se importa mp.solutions.drawing_utils como mp_drawing para 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: openCV como cv2 y MediaPipe como mp.
  • Se importa también mp.solutions.drawing_utils como mp_drawing para 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].x para 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_hands en 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 for para 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.VideoCapture para capturar el video desde la webcam.
  • Configurar max_num_hands y min_detection_confidence segú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 for para 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.

Video description

En este video te muestro como puedes usar MediaPipe Hands 🖐️, para detectar las manos e identificar si se trata de izquierda o derecha. Además veremos como dibujar los 21 puntos clave de la mano en la imagen, y como acceder a ellos para que puedas emplearlos en disntintos proyectos 🤩. ¡Lo veremos tanto para imágenes como para video stream!. CONVIÉRTETE EN MIEMBRO DEL CANAL ❤️: https://www.youtube.com/channel/UCCDvMED1sysAbF5qOfmEw3A/join TUTORIAL ESCRITO: https://omes-va.com/mediapipe-hands-python/ 👨‍💻 VERSIONES DE MEDIAPIPE CON LAS QUE SE HA PROBADO EL CÓDIGO DE ESTE VIDEO 👩‍💻: - 0.8.3 - 0.8.3.1 - 0.8.4 - 0.8.4.1 - 0.8.4.2 - 0.8.5 - 0.8.6 - 0.8.6.1 - 0.8.6.2 - 0.8.7 - 0.8.7.1 CONTENIDO: 0:00 - Introducción 0:56 - ¿Cómo funciona MediaPipe Hands? 3:04 - Imágenes de entrada 3:24 - MediaPipe Hands en imágenes 4:07 - Opciones de configuración 6:56 - Salidas de MediaPipeHands 9:28 - Visualizando los 21 puntos y sus conexiones 12:12 - Accediendo a los hand landmarks por sus nombres 15:33 - Accediendo a los hand landmarks por sus índices 17:13 - Prueba con una imagen sin manos 17:30 - MediaPipe Hands en video en directo LINKS - REFERENCIAS: - https://google.github.io/mediapipe/solutions/hands#mediapipe-hands - https://github.com/google/mediapipe MI WEB: 💜👩‍💻 www.omes-va.com MIS REDES SOCIALES: ☑️INSTAGRAM: @gaby_omes 🔗https://www.instagram.com/gaby_omes/ ☑️FACEBOOK: @GabyOmes 🔗https://www.facebook.com/GabyOmes/