El reconocimiento automático del gesto de la mano basado en la visión ha sido un tema de investigación muy activo en los últimos años con aplicaciones motivadoras como la interacción con la computadora humana (HCI), el control del robot y la interpretación del lenguaje de señas.
El problema general es bastante desafiante debido a una serie de problemas, incluida la naturaleza complicada de los gestos de mano estáticos y dinámicos, fondos complejos y oclusiones.
Resolver este problema requiere algoritmos elaborados que necesitan recursos informáticos avanzados.
Lo que nos ha motivado para realizar esta práctica es poder crear un sistema de operaciones matemáticas simplemente usando los gestos de las manos como números (contadores). De esta manera podremos trabajar con los alumnos más pequeños las soluciones en tiempo real de sumas, restas y multiplicaciones usando los gestos.
Las primeras ideas para resolver el reconocimiento de gestos de la mano en un contexto de control mediante una cámara implicaron el uso de marcadores en las puntas de los dedos . Un algoritmo asociado se usa para detectar la presencia y el color de los marcadores, a través de los cuales se puede identificar qué dedos están activos en el gesto. Esta primera practica se puede realizar incluso con tecnología robótica de Arduino, usando sus propios sensores.
El inconveniencia de colocar marcadores en la mano de los alumnos o profesores hace que esto sea un enfoque inviable en la práctica por el despliegue de hardware y la usabilidad en alumnos pequeños.
Hoy en día se usan técnicas de visión por computadora más avanzadas y no requieren marcadores. El reconocimiento del gesto de la mano se realiza mediante un método de espacio de curvatura que implica encontrar los contornos de los límites de la mano. Este es un enfoque robusto que es la escala, la traducción y la rotación invariable en la postura de la mano, sin embargo, es computacionalmente muy avanzado e imposible llevarlo a las aulas.
Por lo tanto después de estudiar diferentes opciones , proponemos una técnica de reconocimiento de la postura de la mano basada en la visión que utiliza imágenes esqueléticas, en la que se utiliza una cámara multisistema (webcam) para seleccionar el centro de gravedad de la mano y puntos con las distancias más alejadas del centro, proporcionando las ubicaciones de las puntas de los dedos, que luego se utilizan para obtener una imagen de esqueleto, y finalmente para el reconocimiento de gestos.
Queremos conseguir un algoritmo que permita identificar un signo de pose de mano en la imagen de entrada, como uno de cinco comandos posibles (o recuentos). El comando identificado se usará luego como una entrada de control para realizar una suma u otra operación. Ese gesto que reconoce un número será guardado como una variable numérica.
Vamos a explicar las diferentes etapas por las cuales somos capaces de reconocer el gesto de la mano e identificar el número.
- Localización de regiones similares a las manos según las estadísticas de color de piel aprendidas, que producen una salida de imagen en Blanco y Negro.
- Realizar la segmentación basada en la región de la mano, eliminando las pequeñas regiones de “falsa alarma” que se declararon como «parecidas a las manos», en función de sus estadísticas de color.
- Cálculo del centro de gravedad de la región de la mano, así como la distancia más lejana en la región de la mano desde el centro de gravedad.
- Construir un círculo centrado en el centro de gravedad que intersecta todos los dedos que están activos en el conteo.
- Extracción de una señal binaria siguiendo el círculo y clasificando el gesto de la mano según el número de regiones activas (dedos) en la señal.
En los siguientes puntos vamos a explicar de una manera más detallada como hemos realizado los puntos más complejos de la practica.
Supongamos que la parte de la escena alrededor de la mano ya se ha extraído. Entonces, nuestra primera tarea es segmentar la mano en la imagen desde el fondo. Vamos a lograr ese objetivo en dos pasos.
Primero, encontramos los píxeles en la escena que probablemente pertenezcan a la región de la mano, que describimos en esta sección. Luego, refinamos ese resultado, como describimos a continuación.
Un dato importante que debemos saber es que la relación rojo / verde (R / G) es un rasgo característico discriminativo del color de la piel humana.
Vamos a explicarlo de una manera practica!!.
Mostramos unas imágenes que hemos hecho, cada una con un gesto de la mano, junto con diagramas de dispersión de los componentes “Rojo & Verde” de las intensidades de píxeles para las regiones de piel y sin piel en las imágenes.
Vemos que la relación Rojo / Verde se mantiene dentro de una banda estrecha de valores para los píxeles de la piel, mientras que es mucho más variable para los píxeles que no son de la piel. Por lo tanto, podríamos usar esta relación para decidir si un píxel es probable que pertenezca a la región de la mano o no.
Pues vamos a usar este esquema de “umbralización”, para establecer todos los píxeles con intensidades de color dentro de los umbrales en uno, y todo el resto en cero; lo que resulta en una salida de imagen en blanco y negro.
Por supuesto, este esquema simple podría producir muchas decisiones erróneas, por ejemplo, muchos píxeles de fondo con colores parecidos a los de la piel podrían clasificarse como «similares a las manos».
Vamos a intentar afinar un poco esta salida en los siguientes pasos:
2.2. Segmentación y eliminación de falsa región
Para afinar estos resultados vamos a suponer que la región blanca conectada más grande corresponde a la mano. Entonces usamos un umbral de tamaño de región relativo para eliminar las regiones no deseadas.
En particular, eliminamos las regiones que contienen un número de píxeles menor que un valor de umbral.
El valor umbral se elige como el 20% del número total de píxeles en las partes blancas.
¿Cómo encontramos el centro y la distancia más lejana?
Dada la región de la mano segmentada, calculamos su centro de gravedad (COG), (x, y), de la siguiente manera:
Donde xi y yi son coordenadas x e y del ith pixel en la región de la mano, y k denota el número de píxeles en la región.
Después de obtener el COG, calculamos la distancia desde el punto más extremo de la mano hasta el centro; normalmente, esta distancia más lejana es la distancia desde el centro de gravedad a la punta del dedo activo más largo en el gesto.
2.4. Construyendo un Círculo
Dibujamos un círculo cuyo radio es 0,7 de la distancia más alejada del COG.
Es probable que ese círculo corte todos los dedos activos en un gesto.
2.5. Extrayendo una señal para poder clasificar el gesto
Ahora extraemos una señal binaria siguiendo el círculo construido en el paso anterior.
Idealmente, las partes ininterrumpidas «blancas» de esta señal corresponden a los dedos o la muñeca. Contando el número de transiciones de cero a uno (negro a blanco) en esta señal, y restando uno (para la muñeca) lleva al número estimado de dedos activos en el gesto.
Saber el número de dedos conduce al reconocimiento del gesto.
Una aspecto importante que hemos conseguido con este algoritmo es que solo cuenta el número de dedos activos sin importar qué dedos particulares están activos.
Por ejemplo, vamos a explicarlo con estas imágenes:
La imagen muestra tres formas diferentes en que nuestro algoritmo reconocería un conteo de tres dedos; la rotación, la orientación o cualquier otra combinación de tres dedos también daría el mismo resultado.
Por lo tanto, el programa no tiene que recordar qué tres dedos necesita usar para expresar el «tres» como número.
2.6. La escala o rotación no es un problema
Otro factor importante que nos permite este algoritmo es que es invariante de escala en el reconocimiento de los gestos, es decir, podríamos colocar diferentes tamaños de manos en los cuadros de reconocimiento y tendríamos el mismo resultado. Incluso acercar o alejar la cámara para jugar con mejores ángulos dentro del aula.
Resultados
Esta foto muestra un resultado de una imagen de mano que muestra 2 dedos. Mostramos el resultado de varias etapas de nuestro algoritmo, obtenemos las transiciones de cero a uno en la señal. El número de estas transiciones menos uno (para la muñeca) produce el conteo estimado.
Algunas Limitaciones.
Especialmente con la cámara web han llevado a resultados incorrectos. En estos casos, el fallo se debe principalmente a la segmentación errónea de algunas partes de fondo como la región de la mano. Nuestro algoritmo parece funcionar bien con fondos algo complicados, siempre y cuando no haya demasiados píxeles en el fondo con colores parecidos a los de la piel.
Referencias:
- [1] J. Davis and M. Shah «Visual Gesture Recognition», IEE Proc.-Vis. Image Signal Process., Vol. 141, No.2, April 1994.
- [2] C.-C. Chang, I.-Y Chen, and Y.-S. Huang, «Hand Pose Recognition Using Curvature Scale Space», IEEE International Conference on Pattern Recognition, 2002.
- [3] A. Utsumi, T. Miyasato and F. Kishino, «Multi-Camera Hand Pose Recognition System Using Skeleton Image», IEEE International Workshop on Robot and Human Communication, pp. 219-224, 1995.
- [4] Y. Aoki, S. Tanahashi, and J. Xu, «Sign Language Image Processing for Intelligent Communication by Communication Satellite», IEEE International Conf. On Acoustics, Speech, and Signal Processing, 1994.
- [5] R. Rosales, V. Athitsos, L. Sigal, and S. Sclaroff, «3D Hand Pose Reconstruction Using Specialized Mappings», IEEE International Con. on Computer Vision, pp. 378- 385, 2001.
- [6] C. Tomasi, S. Petrov, and A. Sastry, «3D = Classification + Interpolation», IEEE International Conf. on Computer Vision, 2003.
- [7] W. T. Freeman and M. Roth, «Orientation Histograms for Hand Gesture Recognition», IEEE International Conf. on Automatic Face and Gesture Recognition, 1995.
- [8] L. Bretzner, I. Laptev, and T. Lindberg, «Hand Gesture Recognition using Multi-Scale Color Features, Hierarchical Models and Particle Filtering», IEEE International Conf. on Automatic Face and Gesture Recognition, 2002.
- [9] J. Brand and J. Mason, «A Comparative Assessment of Three Approaches to Pixel-level Human Skin Detection», IEEE International Conference on Pattern Recognition, 2000.
- [10] R. C. Gonzalez and R. E. Woods, Digital Image Processing, Prentice-Hall, 2nd edition, 2002.
- [11] https://gogul09.github.io/software/hand-gesture-recognition-p2