IA y Visión ArtificialIngeniero

Controla luces con gestos de la mano usando MediaPipe

Cuenta los dedos levantados en tiempo real y conviértelos en comandos: brillo, colores o escenas de la casa.

NivelIngeniero
Tiempo1.5 h
Costo est.~$149
Pasos5

El modelo de puntos de la mano de MediaPipe encuentra 21 puntos en cada mano. Comparar la punta y los nudillos de cada dedo dice cuáles están arriba: un control remoto sin tocar.

Video tutorial

▶ Paul McWhorter · Video in English — turn on auto-translated subtitlesVer en YouTube ↗

Video de Paul McWhorter, insertado desde YouTube. Los pasos escritos abajo son nuestros y coinciden con la lista de piezas.

Pasos de la misión

  1. Prepara Python

    Crea un entorno virtual con paquetes del sistema e instala mediapipe con pip (se necesita Raspberry Pi OS de 64 bits).

  2. Captura imágenes

    Usa Picamera2 a 640×480; MediaPipe espera imágenes RGB.

  3. Cuenta los dedos

    Para cada dedo, compara la coordenada y de la punta con la articulación de abajo.

  4. Asigna gestos

    1 dedo = encender, 2 = blanco cálido, 5 = arcoíris, puño = apagar. Mantén el gesto medio segundo antes de actuar.

  5. Conecta la casa

    En lugar de LEDs, publica el gesto por MQTT y deja que Home Assistant active escenas.

Código

import cv2, mediapipe as mp
from picamera2 import Picamera2

cam = Picamera2(); cam.configure(cam.create_video_configuration(main={"format": "RGB888", "size": (640, 480)})); cam.start()
hands = mp.solutions.hands.Hands(max_num_hands=1, min_detection_confidence=0.6)
TIPS, PIPS = [8, 12, 16, 20], [6, 10, 14, 18]

while True:
    rgb = cv2.cvtColor(cam.capture_array(), cv2.COLOR_BGR2RGB)
    res = hands.process(rgb)
    if res.multi_hand_landmarks:
        lm = res.multi_hand_landmarks[0].landmark
        up = sum(lm[t].y < lm[p].y for t, p in zip(TIPS, PIPS))
        print('fingers up:', up)

Code comments are in English, like most libraries and docs — a good habit for makers.

Preguntas

pip install mediapipe falla

Confirma que usas Raspberry Pi OS de 64 bits y una versión de Python para la que MediaPipe publique paquetes ARM64; si no, usa una versión compatible en un entorno virtual.