martes, 3 de abril de 2012

Determinando el alfabeto de gestos

Es una parte importante de nuestra práctica el determinar el alfabeto de gestos a los que podrá recurrir el usuario para interactuar con el sistema. Inicialmente el objetivo de nuestra práctica era poder escribir un texto por pantalla a base de hacer gestos con la mano, para lo cual serían necesarios 27 gestos diferentes (uno por cada letra del alfabeto), mas opcionalmente otros 10 para los dígitos del 0 al 9.

Por ser demasiados gestos diferentes, pronto comenzamos a considerar la posibilidad de reducir el alfabeto para hacerlo más abordable para el usuario; una primera opción fue limitarlo a sonidos y no a letras en sí: por ejemplo, que no haya h, hacer equivalentes la qu y la k, etc. Pero más adelante reconsideramos la orientación de nuestra práctica; en lugar de escribir textos mediante gestos, un proyecto complejo y vistoso pero poco útil, decidimos orientarnos a control domótico.

Así, los gestos que sean identificados por el sistema servirán para encender y apagar luces, variar luminosidad, encender una televisión, o similares según el material disponible del laboratorio. Esto requiere un set de gestos mucho más reducido, lo que tiene dos ventajas: es más fácil para el usuario aprenderlos y más sencillo para el sistema diferenciarlos si están bien escogidos.

Debido a la forma en la que capturamos la entrada de vídeo ("Captura de vídeo"), la imagen sufre una compresión horizontal (la imagen tiene una relación de aspecto 4/3 y la capturamos cuadrada), lo que hace que los gestos sean más difíciles de distinguir los unos de los otros si colocamos la mano en vertical frente a la cámara. Teniendo esto en cuenta hemos definido los gestos en horizontal.

Determinamos una serie de gestos básicos simples que pudieran sernos útiles para el control del sistema (números del 1 al 5 con la mano, palma cerrada, signo de OK...), y reunimos a conocidos y familiares para probar con ellos lo intuitivos que les resultaban, así como para obtener una base de datos de gestos de diferentes personas. La dividimos en set de entrenamiento y set de test y la utilizamos para entrenar la red neuronal; comprobamos en MATLAB los porcentajes de acierto en el set de test para cada uno de los gestos después de tan sólo 50 ciclos de entrenamiento.


Ejemplo de porcentajes de acierto en el set de test obtenidos para cada gesto, después de 50 ciclos de entrenamiento.

En la imagen anterior puede observarse cómo algunos gestos son reconocidos prácticamente siempre, mientras que otros tienden a ser confundidos sistemáticamente con otros. En este ejemplo vemos cómo ha confundido un puño cerrado (gesto tipo 1) con un dos (gesto 3). Esto puede deberse también a una base de datos o a un entrenamiento insuficiente.


Estas pruebas nos permitieron modificar o sustituir algunos de los 12 gestos que teníamos pensados inicialmente. Un ejemplo es el del número 3: Inesperadamente encontramos gente incapaz de hacer este gesto correctamente y sin forzar la mano con los dedos índice, corazón y anular. Además, la red neuronal tenía una tendencia elevada a confundirlo con el 2, el 4, u otros gestos. En este caso hemos resuelto el problema definiendo que el gesto para el 3 se haga con lo dedos pulgar, índice y corazón.

Los gestos actualmente definidos se recogen a continuación:


Set actual de gestos del usuario

No hay comentarios:

Publicar un comentario