Un ejemplo en Python para detectar las manos y los dedos en la imagen de vídeo de la WebCam del equipo. Esta app dibuja los puntos de referencia de las manos detectadas en la propia imagen de la WebCam en tiempo real y muestra las manos y el número de dedos levantados de cada una de ellas en la imagen.
- Requisitos para desarrollar una App en Python que detecta las manos y cuenta los dedos levantados.
- Funcionamiento del programa Detector de manos y contador de dedos levantados.
- Descarga del script Python que detecta las manos y los dedos levantados de una WebCam.
Requisitos para desarrollar una App en Python que detecta las manos y cuenta los dedos levantados
Como requisito únicamente necesitaremos disponer de Python instalado en el equipo, así como de un IDE de desarrollo, como puede ser Visual Studio Code. En el siguiente enlace explicamos cómo desarrollar una aplicación Python con Visual Studio Code:
Para el desarrollo de la app en Python que visualiza la imagen de la WebCam y detecta las manos y los dedos levantados necesitaremos dos librerías, que instalaremos con los comandos:
1 2 |
pip3 install opencv-python pip3 install mediapipe |
Código fuente de la App en Python que detecta las manos y dedos en tiempo real en imagen de vídeo de WebCam
Mostramos a continuación el código fuente en Python que abre una ventana con la imagen de vídeo capturada de la WebCam del equipo. En dicha imagen y en tiempo real detecta las manos y los dedos levantados y muestra el número. Dibuja los puntos de referencia de las manos detectadas en la imagen de la WebCam en tiempo real:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# ProyectoA - Detector de manos y dedos levantados en WebCam import cv2 import mediapipe as medP # Instanciamos la librería mediapipe con la IA para detectar los dedos levantados mpManos = medP.solutions.hands manos = mpManos.Hands(min_detection_confidence=0.5, min_tracking_confidence=0.5) mpDibujo = medP.solutions.drawing_utils # Método para contar los dedos levantados en la imagen def contarDedos(puntosReferencia, mano): puntaDedo = [mpManos.HandLandmark.THUMB_TIP, mpManos.HandLandmark.INDEX_FINGER_TIP, mpManos.HandLandmark.MIDDLE_FINGER_TIP, mpManos.HandLandmark.RING_FINGER_TIP, mpManos.HandLandmark.PINKY_TIP] puntoMedioDedo = [mpManos.HandLandmark.THUMB_IP, mpManos.HandLandmark.INDEX_FINGER_PIP, mpManos.HandLandmark.MIDDLE_FINGER_PIP, mpManos.HandLandmark.RING_FINGER_PIP, mpManos.HandLandmark.PINKY_PIP] dedosLevantados = 0 # Mano derecha if mano == 0: if puntosReferencia.landmark[puntaDedo[0]].x < puntosReferencia.landmark[puntoMedioDedo[0]].x: dedosLevantados += 1 else: # Mano izquierda if puntosReferencia.landmark[puntaDedo[0]].x > puntosReferencia.landmark[puntoMedioDedo[0]].x: dedosLevantados += 1 for i in range(1, 5): if puntosReferencia.landmark[puntaDedo[i]].y < puntosReferencia.landmark[puntoMedioDedo[i]].y: dedosLevantados += 1 return dedosLevantados # Abrimos ventana con captura de vídeo de webcam del equipo capturaVideo = cv2.VideoCapture(0) while capturaVideo.isOpened(): camaraIniciada, imagenCapturada = capturaVideo.read() if not camaraIniciada: print("No hay imagen en la webcam.") continue # Capturamos cada frame del vídeo para analizarlo imagenCapturada = cv2.cvtColor(cv2.flip(imagenCapturada, 1), cv2.COLOR_BGR2RGB) # Obtenemos las posibles manos detectadas resultado = manos.process(imagenCapturada) imagenCapturada = cv2.cvtColor(imagenCapturada, cv2.COLOR_RGB2BGR) # Si hay puntos de referencia (manos detectadas), los dibujamos en la imagen if resultado.multi_hand_landmarks: for idx, puntosReferencia in enumerate(resultado.multi_hand_landmarks): mano = idx % 2 # Dibujamos cada punto de referencia en la imagen capturada en vivo mpDibujo.draw_landmarks(imagenCapturada, puntosReferencia, mpManos.HAND_CONNECTIONS) dedosContados = contarDedos(puntosReferencia, mano) # Mostramos texto en la imagen con las manos y dedos detectados if mano == 0: mano = "der." else: mano = "izq." cv2.putText(imagenCapturada, f"Mano {mano}: {dedosContados}", (10, 50 + (30 * idx)), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2, cv2.LINE_AA) cv2.imshow("ProyectoA - Detector de manos y contador de dedos", imagenCapturada) # Si se pulsa la tecla "s" se cierra el programa if cv2.waitKey(5) & 0xFF == ord('s'): break # Liberamos los recursos cargados de la webcam capturaVideo.release() cv2.destroyAllWindows() |
Funcionamiento del programa Detector de manos y contador de dedos levantados
Conectaremos la WebCam al equipo y compilamos el script Python y, tras unos de carga, se mostrará la imagen de la WebCam en una ventana. Si mostramos una mano en la WebCam, nos dibujará los puntos de referencia de la mano en tiempo real. Si movemos la mano, se moverán los puntos de referencia. Además, el programa mostrará si es la mano derecha o la izquierda y el número de dedos levantados.
Si mostramos más manos, las detectará y mostrará el número de dedos levantado por cada mano:
Para cerrar la aplicación pulsaremos la tecla «s».
Descarga del script Python que detecta las manos y los dedos levantados de una WebCam
A continuación, mostramos enlace a la descarga del script Python: