MediaPipe y hand tracking: detectar manos en tiempo real con una webcam, gratis
Salgo un momento de la serie sobre cómo se entrenan los modelos de lenguaje para recopilar aquí algo que llevo tiempo queriendo apuntar: una herramienta que me parece fascinante por su simplicidad de uso. Se llama MediaPipe y permite hacer cosas que hace una década requerían un laboratorio entero: detectar caras, posturas, manos u objetos en tiempo real, desde la webcam de un portátil normal, gratis y en pocas líneas de código.
En esta entrada me centro en una de sus capacidades más vistosas: el hand tracking (seguimiento de manos). Vemos qué es, cómo funciona a alto nivel, para qué sirve y qué limitaciones tiene. Más adelante, en otro post, haré un caso práctico con un proyecto propio.
¿Qué es MediaPipe?
MediaPipe es un framework de visión por computador desarrollado por Google. Es open source, gratuito, multiplataforma (Python, Web, Android, iOS) y está pensado desde el inicio para correr en tiempo real, incluso en hardware modesto.
Lo interesante de MediaPipe no es que sea «un modelo» concreto, sino que es una colección de soluciones pre-entrenadas y listas para usar: detección de caras, malla facial detallada, postura corporal, manos, segmentación de la persona respecto al fondo, detección de objetos… cada una optimizada y empaquetada para que puedas integrarla en una aplicación con muy poco esfuerzo.
Tres ganchos clave:
- Funciona en tu portátil. No necesita GPU, ni servidor, ni cámaras especiales. Una webcam corriente y tu CPU bastan.
- Tiempo real. La mayoría de las soluciones corren a 30 fotogramas por segundo o más, incluso en CPU.
- Gratis y abierto. Lo publica Google bajo licencia Apache 2.0, así que se puede usar en proyectos personales, comerciales o académicos sin pedir permiso.
Qué es hand tracking en concreto
Hand tracking («seguimiento de manos») es la capacidad de detectar dónde hay manos en una imagen y, una vez detectadas, identificar la posición precisa de 21 puntos clave por mano. A esos puntos se les llama landmarks en la jerga del campo.
Esos 21 puntos no son aleatorios: son los más informativos para describir la postura de una mano. Se reparten así:
- 1 punto en la muñeca.
- 4 puntos por dedo: la base, dos articulaciones intermedias y la punta. Como hay cinco dedos, eso suma 20.
En total, 21. La imagen mental que conviene tener es la de una «mano-esqueleto» sobreimpresa sobre la mano real, donde cada articulación es un nodo iluminado y los huesos son líneas conectándolos.
A partir de esos 21 puntos puedes deducir prácticamente cualquier cosa relacionada con gestos: si los dedos están extendidos o cerrados, si la palma mira hacia ti o hacia fuera, si la mano se mueve hacia la derecha, si dos dedos se tocan, si la mano forma una «L»… Todo se reduce a hacer matemáticas sencillas con las coordenadas de esos 21 puntos.
Cómo funciona por dentro, a grandes rasgos
MediaPipe encadena dos modelos:
- Detector de palmas. Lo primero es localizar dónde hay manos en la imagen. Esto se hace con un modelo entrenado para detectar palmas (no manos enteras), porque la palma es relativamente rígida y tiene un aspecto bastante reconocible. Devuelve una caja delimitadora alrededor de cada mano detectada.
- Detector de landmarks. Una vez recortada la región donde hay una mano, un segundo modelo —más pequeño y especializado— calcula las coordenadas de los 21 puntos dentro de esa región.
Esa arquitectura en dos pasos —»primero detecto la caja, luego detallo dentro»— es muy típica en visión por computador. Funciona porque el modelo de landmarks no necesita escanear toda la imagen: solo trabaja sobre el recorte que le pasa el primero, lo que abarata mucho el cómputo.
Y hay un truco más para mantener el tiempo real: una vez detectada una mano en un fotograma, MediaPipe no la vuelve a buscar desde cero en el fotograma siguiente. Asume que la mano sigue cerca de donde estaba y aplica directamente el segundo modelo en esa zona. Solo redetecta desde cero cuando pierde la mano (sale del cuadro, oclusión fuerte, gesto muy brusco). Eso permite sostener los 30 fps o más sin despeinarse.
Para qué se usa
Esto es lo que más me llama la atención del tema: MediaPipe lleva años abriendo la puerta a aplicaciones que hace nada eran ciencia ficción. Algunas de las más interesantes:
- Lengua de signos. Reconocimiento de signos en tiempo real para subtitulado o traducción. Hay varios proyectos académicos y comerciales que lo usan como base.
- Realidad aumentada. Filtros de redes sociales, probadores virtuales de joyería o relojes, manos virtuales en aplicaciones de realidad aumentada.
- Control gestual. Pasar diapositivas con un movimiento, controlar un reproductor de música, navegar por menús sin tocar nada. Útil en quirófanos, cocinas, talleres y cualquier entorno donde tener las manos limpias o libres es una ventaja.
- Mouse virtual y accesibilidad. Personas con dificultades motoras pueden controlar el cursor moviendo solo un dedo. Es una vía interesante de accesibilidad sin hardware adicional.
- Fitness y rehabilitación. Verificación automática de posturas o ejercicios, conteo de repeticiones, análisis de movilidad articular.
- Música y arte interactivo. Instrumentos virtuales que responden al movimiento de las manos, instalaciones artísticas, visualizaciones generativas.
- Videojuegos. Cualquier juego donde la cámara reemplaza al mando.
Todas estas aplicaciones tienen algo en común: lo difícil no es detectar la mano (eso lo regala MediaPipe), sino interpretar lo que la mano está haciendo. La detección es el ladrillo; el muro lo construyes tú encima.
Cómo se empieza
La barrera de entrada es muy baja. En Python, instalas el paquete con un comando, abres la webcam, le pasas cada fotograma a MediaPipe, y a cambio obtienes los 21 puntos por mano. En menos de 20 líneas ya tienes una ventana mostrando tus manos con los landmarks dibujados encima, en tiempo real.
A partir de ahí, todo lo que hagas es matemática vectorial con esos puntos: ¿está la mano cerrada? Compara la distancia de las puntas de los dedos a la palma. ¿Está señalando? El índice está extendido y los demás recogidos. ¿Se está moviendo a la derecha? La posición de la muñeca cambia entre fotogramas.
Todo lo «inteligente» que quieras añadir encima ya es problema tuyo —o de otro modelo que entrenes—, pero el suelo, el reconocimiento puro y duro de la mano, lo tienes resuelto y gratis.
Lo que conviene saber antes de meterse
Aunque MediaPipe funciona muy bien, no es magia. Hay varias cosas que conviene tener en cuenta:
- Iluminación. Como cualquier sistema de visión, sufre con luz muy baja, luces parpadeantes o contraluces fuertes. Una iluminación frontal y estable da los mejores resultados.
- Oclusiones. Si parte de la mano queda tapada (por la otra mano, por un objeto, por el propio cuerpo), los landmarks ocultos se «inventan» en función de la postura habitual de una mano. A veces aciertan, a veces fallan visiblemente.
- Fondos complicados. Fondos con muchas cosas parecidas a manos (cables, tubos, otras personas, otra cara que aparece en cuadro) pueden generar falsos positivos.
- Ambigüedad de gesto. Detectar la mano es una cosa; interpretar un gesto concreto es otra. Distinguir un «OK» de un puño es trivial; distinguir veinte signos de una lengua de signos requiere otro modelo entrenado encima.
- Privacidad. Aunque MediaPipe corre en local, si lo integras en una app que envía vídeo a un servidor, eso es otra historia. Conviene ser explícito con el usuario sobre qué se procesa y dónde.
Cierre
MediaPipe es uno de esos casos en los que una pieza de IA bien empaquetada cambia lo que es razonable construir como proyecto personal. Hace diez años, un sistema fiable de hand tracking en tiempo real era un tema de tesis doctoral. Hoy son veinte líneas de Python sobre tu webcam.
En un próximo post sobre el tema iremos a un caso práctico: tomaré un proyecto donde he usado MediaPipe y lo iré desgranando paso a paso, con vídeo, para que se vea no solo lo que hace la herramienta sino también cómo se construye encima de ella algo útil.
