
Hay algo muy satisfactorio en mover la mano delante de una cámara y ver que el ordenador hace algo por ello. Un pequeño movimiento se convierte en una instrucción. Tiene un poco de esa sensación de ciencia ficción, aunque el resultado sea simplemente escribir unos caracteres en un editor.
Mi nueva app, Minority, explora esa idea. Es una aplicación nativa para la barra de menús de macOS en la que grabas tus propios gestos, les asignas acciones y después usas las manos para ejecutarlas. Puedes usar una mano o 2, mantener una postura o grabar un movimiento.
El nombre y la idea vienen de Minority Report, la película en la que se mueven interfaces futuristas con las manos. Minority está muy lejos de eso: es una pequeña app que reconoce gestos con una cámara y los asocia a acciones prácticas. Pero la película hizo que me pareciera divertido imaginar este tipo de interacción, y quería explorar una versión más modesta.
Lo que me interesa es poder definir el gesto yo mismo. La app compara lo que ve la cámara con los ejemplos que he grabado, así que la interacción empieza con un movimiento que elijo yo.
Mejor verlo en acción
La demo muestra el seguimiento de las manos en directo y gestos asociados a acciones de texto. Ver cómo el esqueleto de colores sigue cada dedo ayuda a entenderlo mucho mejor que una descripción del código de reconocimiento.
Minority siguiendo gestos de las manos y ejecutando acciones de texto. La miniatura es una ilustración inspirada en la demo. Abrir el vídeo de la demo.
Enseñarle un gesto
El proceso es bastante sencillo. Abres Minority, eliges si el gesto usa una mano o 2 y empiezas a grabar. Una cuenta atrás de 3 segundos te da tiempo para colocarte. Puedes mantener una postura o realizar un movimiento y después terminar la grabación.
Cada gesto necesita al menos 3 grabaciones y una prueba de reconocimiento correcta antes de poder guardarlo. Durante la prueba, la app comprueba si reconoce el gesto sin enviar su acción a otra aplicación. Así puedes ver si los ejemplos son lo bastante claros antes de activarlo.
Después le pones un nombre y eliges qué debe hacer. Las acciones incluyen desplazar la página hacia arriba o abajo, volver atrás en el navegador, enviar un atajo de teclado y escribir texto. Los atajos dan bastante juego: el gesto puede ejecutar lo que esa combinación haga normalmente en la aplicación que la recibe.
El control por gestos empieza desactivado y se activa desde la barra de menús. Más adelante puedes editar los gestos guardados, desactivarlos o añadirles más ejemplos.
Qué ve realmente la cámara
Minority está hecha en Swift y utiliza el framework Vision de Apple para detectar puntos de referencia de las manos de forma local. Dibuja un esqueleto de 21 articulaciones por cada mano detectada, junto con información sobre cuánto se extienden los dedos.
Esos puntos se convierten en una descripción de la forma y el movimiento de la mano. Para los gestos en movimiento, el comparador utiliza dynamic time warping para comparar la secuencia en directo con los ejemplos guardados. En la práctica, permite cierta variación en el ritmo: repetir un movimiento un poco más rápido o más lento debería seguir siendo reconocible.
En los gestos con 2 manos, ambas comparten la misma alineación temporal. Importa su coordinación, además de que cada mano haya realizado un movimiento parecido. Si varios gestos guardados se parecen demasiado como para decidir, el comparador ignora el resultado ambiguo.
Añadir un gesto no requiere un paso separado de entrenamiento de un modelo. Cada grabación es otro ejemplo con el que comparar. La app guarda localmente datos normalizados de la forma y el movimiento de las manos; no almacena ni sube imágenes de la cámara ni vídeo.
Sigue siendo una cámara, con sus límites
La cámara necesita ver bien las manos y los gestos tienen que distinguirse lo suficiente entre sí. Ocultar dedos o hacer varios movimientos casi idénticos complica el reconocimiento. Añadir entre 3 y 5 ejemplos con variaciones naturales de velocidad y distancia ayuda, pero no hace que cualquier gesto sea fiable.
Eso también forma parte de lo interesante de construir algo así. Detectar una mano es solo el principio. Decidir cuándo un movimiento es lo bastante deliberado como para enviar una acción a otra app es lo que convierte esa detección en una interacción.
Probarlo
Minority es de código abierto: el código fuente y las instrucciones de compilación están disponibles en GitHub. El script genera Minority.app; la configuración actual necesita una identidad de firma de código válida. La primera vez hay que permitir el acceso a la cámara y conceder el permiso de Accesibilidad para que Minority pueda enviar acciones a otras apps. El README explica los pasos.
Minority es un proyecto demo: todavía quedan muchas mejoras por hacer, tanto en el reconocimiento de gestos como en la experiencia de uso. Esta versión sirve para explorar la idea y ver cómo funciona; seguiré iterando a partir de aquí.
Me gustan los proyectos en los que el resultado se ve enseguida. Mover una mano, ver el seguimiento, ejecutar una acción. Por debajo hay bastantes detalles, pero ese pequeño ciclo ya me da ganas de seguir jugando con ello.
Gracias por leerme, Hack the Planet!