scieee AI-readable full text Open interactive document viewer

Repositorio Institucional de Documentos

Abstract

La divulgación científica, cuya finalidad es hacer accesible la ciencia al público en general, es una tarea que cada vez está tomando mayor relevancia. Este proyecto trata el estudio de dos campos de investigación atractivos para el público en general y con muchos resultados interesantes en los últimos años, como son la robótica y la visión por computador. En particular, el proyecto se centra en el uso del dispositivo Kinect como interfaz para la interacción con el robot RoboNova-1, y en el diseño de una actividad basada en ello para utilizar como taller de divulgación científica. La aparición del sensor Kinect ha supuesto una revolución en el campo de la visión por computador y de la robótica, por las posibilidades que ofrece el mapa de profundidad capturado (imagen aumentada con información de distancia a la cámara del elemento representado en cada píxel) y por su bajo coste. Gracias al mapa de profundidad que Kinect aporta en tiempo real, se facilita mucho el trabajo de reconocimiento y segmentación de objetos en 3D. Esta característica facilita la segmentación de las distintas partes de una persona enfrente de la cámara, convirtiendo la kinect en un dispositivo muy apto para crear interfaces con gestos. El objetivo general del proyecto es la implementación de un interfaz gestual, mediante cámaras RGB-d, con un robot humanoide y diseñar con ello una actividad orientada a la divulgación de la robótica y la inteligencia artificial para niños y jóvenes. En el proceso de desarrollo podemos distinguir dos partes importantes, que son el reconocimiento de los gestos y la comunicación con el robot humanoide. Para el reconocimiento de los gestos se usa la imagen con información 3D captada por la cámara RGB-d para identificar y segmentar donde esta el usuario de la aplicación. La figura de la persona nos sirve para crear una estructura de esqueleto que captará los movimientos de la persona y en los brazos se seleccionan las zonas que determinarán las manos en 3D. Posteriormente este subconjunto de puntos en 3D se proyecta en blanco sobre una imagen negra, obteniendo la mano en 2D. Tras el filtrado del ruido, estas imágenes serán utilizadas por los métodos de clasificación para determinar a que gesto pertenece cada captura. El robot RoboNova-1 dispone de un software propio para su programación desde Windows. Esta aplicación nos permitirá introducir programas y secuencias de movimiento en la memoria interna del robot utilizando el programa RoboBasic. La comunicación con el robot se realizará mediante un módulo diseñado para otro robot, por lo que hubo que adaptarlo a las especificaciones de protocolos de comunicación utilizados por el chip MR-C3024 del RoboNova-1. La aplicación desarrollada se divide en dos bloques. El primero contiene las aplicaciones que nos servirán para capturar los datos necesarios en el entrenamiento de los métodos de clasificación de gestos. En el segundo bloque encontramos la aplicación principal que hará uso del interfaz gestual y con la que se evaluará el rendimiento de los métodos de clasificación. Una vez desarrollado el interfaz se preparó un taller que se llevó a cabo durante la celebración de la “V Semana de la ingeniería y arquitectura”. En él participaron estudiantes desde 3º de ESO hasta 2º de Bachiller. Durante una demostración se les explicó el funcionamiento del sistema y posteriormente fue probado por los estudiantes. Se obtuvo un buen resultado en el funcionamiento y buena aceptación entre los asistentes. Parrilla Bel, Luis; Murillo Arnal, Ana Cristina

Full text

Interfaz gestual para el control de un robot humanoide con una c´amara RGB-d PROYECTO FIN DE CARRERA Autor: Luis Parrilla Bel Director: Ana Cristina Murillo Arnal Ingenier´ıa en Inform´atica Curso 2012-2013 Departamento de Inform´atica e Ingenier´ıa de Sistemas Escuela de Ingenier´ıa y Arquitectura Universidad de Zaragoza Noviembre de 2012 Interfaz gestual para el control de un robot humanoide mediante c´amaras RGB-d RESUMEN La divulgaci´on cient´ıfica, cuya finalidad es hacer accesible la ciencia al p´ublico en general, es una tarea que cada vez est´a tomando mayor relevancia. Este proyecto trata el estudio de dos campos de investigaci´on atractivos para el p´ublico en general y con muchos resultados interesantes en los ´ultimos a˜nos, como son la rob´otica y la visi´on por computador. En particular, el proyecto se centra en el uso del dispositivo Kinect como interfaz para la interacci´on con el robot RoboNova-1, y en el dise˜no de una actividad basada en ello para utilizar como taller de divulgaci´on cient´ıfica. La aparici´on del sensor Kinect ha supuesto una revoluci´on en el campo de la visi´on por computador y de la rob´otica, por las posibilidades que ofrece el mapa de profundidad capturado (imagen aumentada con informaci´on de distancia a la c´amara del elemento representado en cada p´ıxel) y por su bajo coste. Gracias al mapa de profundidad que Kinect aporta en tiempo real, se facilita mucho el trabajo de reconocimiento y segmentaci´on de objetos en 3D. Esta caracter´ıstica facilita la segmentaci´on de las distintas partes de una persona enfrente de la c´amara, convirtiendo la kinect en un dispositivo muy apto para crear interfaces con gestos. El objetivo general del proyecto es la implementaci´on de un interfaz gestual, mediante c´amaras RGB-d, con un robot humanoide y dise˜nar con ello una actividad orientada a la divulgaci´on de la rob´otica y la inteligencia artificial para ni˜nos y j´ovenes. En el proceso de desarrollo podemos distinguir dos partes importantes, que son el reconocimien- to de los gestos y la comunicaci´on con el robot humanoide. Para el reconocimiento de los gestos se usa la imagen con informaci´on 3D captada por la c´amara RGB-d para identificar y segmentar donde esta el usuario de la aplicaci´on. La figura de la persona nos sirve para crear una estructura de esqueleto que captar´a los movimientos de la persona y en los brazos se seleccionan las zonas que determinar´an las manos en 3D. Posteriormente este subconjunto de puntos en 3D se proyecta en blanco sobre una imagen negra, obteniendo la mano en 2D. Tras el filtrado del ruido, estas im´agenes ser´an utilizadas por los m´etodos de clasificaci´on para determinar a que gesto pertenece cada captura. El robot RoboNova-1 dispone de un software propio para su programaci´on desde Windows. Esta aplicaci´on nos permitir´a introducir programas y secuencias de movimiento en la memoria interna del robot utilizando el programa RoboBasic. La comunicaci´on con el robot se realizar´a mediante un m´odulo dise˜nado para otro robot, por lo que hubo que adaptarlo a las especificaciones de protocolos de comunicaci´on utilizados por el chip MR-C3024 del RoboNova-1. La aplicaci´on desarrollada se divide en dos bloques. El primero contiene las aplicaciones que nos servir´an para capturar los datos necesarios en el entrenamiento de los m´etodos de clasificaci´on de gestos. En el segundo bloque encontramos la aplicaci´on principal que har´a uso del interfaz gestual y con la que se evaluar´a el rendimiento de los m´etodos de clasificaci´on. Una vez desarrollado el interfaz se prepar´o un taller que se llev´o a cabo durante la celebraci´on de la “V Semana de la ingenier´ıa y arquitectura”. En ´el participaron estudiantes desde 3 0 de ESO hasta 2 0 de Bachiller. Durante una demostraci´on se les explic´o el funcionamiento del sistema y posteriormente fue probado por los estudiantes. Se obtuvo un buen resultado en el funcionamiento y buena aceptaci´on entre los asistentes. i ´ Indice general 1. Introducci´on 1 1. Motivaci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 2. Objetivos y alcance del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 3. Herramientas y entorno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 4. Estructura del documento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 5. Planificaci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2. Reconocimiento de Gestos 5 1. Reconocimiento y segmentaci´on de las manos en datos 3D . . . . . . . . . . . . . . 5 2. Preprocesado de las im´agenes de las manos 2D . . . . . . . . . . . . . . . . . . . . 8 3. Algoritmos de clasificaci´on de las im´agenes 2D para reconocer las distintas posturas delamano ........................................ 11 4. Pruebas y an´alisis de resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3. Comunicaci´on con robot humanoide RoboNova-1 17 1. Robobuilder-ros-pkg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2. Programaci´on del RoboNova-1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 4. Aplicaci´on realizada 21 1. Entrenamiento del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2. Uso del clasificador y el interfaz gestual. . . . . . . . . . . . . . . . . . . . . . . . . 23 3. Taller realizado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 5. Conclusiones y trabajos futuros 29 1. Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 2. Trabajo futuro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3. Valoraci´on personal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Anexos 35 A. ROS 35 B. Sensor Kinect 37 C. RoboNova-1 39 D. Pruebas y resultados 41 1. Fase 1: Selecci´on de propiedades de las im´agenes . . . . . . . . . . . . . . . . . . . 41 2. Fase 2: Repetici´on de las pruebas con los mejores resultados . . . . . . . . . . . . . 54 3. Fase 3: Selecci´on de filtro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 4. Fase 4: Doble filtrado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 5. Fase 5: Inserci´on de m´as muestras para la calibraci´on . . . . . . . . . . . . . . . . . 75 iii iv Cap´ıtulo 1 Introducci´on 1. Motivaci´on La divulgaci´on cient´ıfica, cuya finalidad es hacer accesible la ciencia al p´ublico en general, es una tarea que cada vez est´a tomando mayor relevancia. Una manera de hacer llegar estos temas y trabajos al mayor n´umero posible de personas, y de manera m´as comprensible y amena, es present´andolo mediante talleres interactivos y con herramientas atractivas para ellos. Este proyecto trata el estudio y divulgaci´on de dos campos de investigaci´on atractivos para el p´ublico en general y con muchos resultados interesantes en los ´ultimos a˜nos, como son la rob´otica y la visi´on por computador. Recientemente, el campo de los videojuegos a acercado al p´ublico en general muchos sensores que tradicionalmente se utilizan en rob´otica, y ahora son m´as comunes, y tambi´en m´as asequibles debido a la mayor producci´on. Un ejemplo son las c´amaras RGB-d (c´amaras de visi´on y profundidad), como la utilizada en el sensor Kinect. Este proyecto se centra en el uso del dispositivo Kinect como interfaz para interacci´on con un robot (ver Figura 1.1). El sensor Kinect1es un producto de Microsoft comercializado para su uso con la Xbox 360 (Anexo B). Los sensores RGB-d est´an generando grandes avances en el campo del reconocimiento visual autom´atico [1, 7], ofreciendo un complemento muy valioso a los algoritmos de visi´on por computador que utilizan solamente sensores de visi´on [2, 10]. Por ejemplo, en el caso concreto que se estudia en este proyecto, reconocimiento de gestos, permiten una captura y segmentaci´on de las zonas de inter´es de la imagen (las manos) mucho m´as eficaz que si us´aramos solamente una c´amara convencional [3, 5, 9]. Figura 1.1: (1) El sensor Kinect captura al usuario. (2) Se reconoce el cuerpo del usuario y sus manos. (3) Las manos son analizadas. (4) Se transmite la orden al robot. 1http://www.xbox.com/es-ES/kinect 1 Aprovechando por tanto las ventajas de este sensor para crear interfaces con gestos [4, 5, 6, 8], se propone dise˜nar un interfaz para comunicar con un robot y dise˜nar una actividad orientada a la divulgaci´on de la rob´otica y la inteligencia artificial para estudiantes tanto de primaria, como de secundaria y bachiller. La idea de este proyecto es formar parte de una serie de actividades de divulgaci´on realizadas peri´odicamente por el grupo de Rob´otica, Percepci´on y Tiempo Real del DIIS. 2. Objetivos y alcance del proyecto El objetivo general del proyecto es la implementaci´on de un interfaz gestual mediante c´amaras RGB-d con un robot humanoide y dise˜nar con ello una actividad orientada a la divulgaci´on de rob´otica e inteligencia artificial para ni˜nos y j´ovenes. Las tareas m´as en detalle realizadas en este proyecto han sido las siguientes: Estudio, instalaci´on y familiarizaci´on con el entorno ROS [12], incluyendo drivers Openni para comunicaci´on con sensores Kinect y librer´ıas PCL [11] y OpenCv para facilitar las operaciones con im´agenes 3D y 2D respectivamente. Puesta en marcha de la plataforma rob´otica a utilizar. Estudio de las especificaciones, utilidades y posibilidades de comunicaci´on remota del robot humanoide disponible para el proyec- to, el robot Robonova-1. Estudio de algoritmos sencillos para detecci´on de gestos mediante sensores RGB-d. Implementaci´on o adaptaci´on/mejora de los m´etodos estudiados en la literatura, para que funcionen como interfaz del sensor Kinect con el robot disponible (a trav´es del sistema ROS instalado en un ordenador port´atil, donde se realizar´an todos los c´alculos relacionados con el reconocimiento de gestos). Dise˜no de una actividad/taller que haga uso de el interfaz/sistema de comunicaci´on dise˜nado. Realizaci´on de pruebas y documentaci´on de las actividades a realizar, para permitir el uso de los resultados de este proyecto en actividades pr´oximas de divulgaci´on cient´ıfica. 3. Herramientas y entorno La ejecuci´on del interfaz se ha realizado sobre ROS [12], un pseudo sistema operativo utilizado para gesti´on de plataformas rob´oticas y sensores relacionados. ROS provee los servicios est´andar de un sistema operativo tales como abstracci´on del hardware, control de dispositivos de bajo nivel, implementaci´on de funcionalidad de uso com´un, paso de mensajes entre procesos y mantenimiento de paquetes. Se ha utilizado la versi´on “ROS Electric”2, la calificada como estable. El proyecto se ha desarrollado bajo un sistema operativo Ubuntu 10.04 “Lucid Lynx”3, siendo ´este sobre el que “Willow Garage”, principal desarrollador del sistema ROS, nos ofrece soporte. El manejo del sensor Kinect se ha realizado mediante el driver Openni [22] y con las librer´ıas PCL[11] y OpenCv [23] tenemos lo necesario para el tratamiento de im´agenes en 3D y 2D. Estas librer´ıas las podemos encontrar dentro de “ros-pkg”, un repositorio de paquetes aportados por la contribuci´on de usuarios. Para la comunicaci´on con el robot RoboNova-1 se utiliza “Robobuilder- ROS-package”4. Un script de Python para integrar las plataformas Robobuilder en ROS. Las modificaciones en el c´odigo del RoboNova-1 se han realizado en el cap´ıtulo 2 con el software que el propio robot nos proporcionaba. Este software es un entorno de programaci´on de Windows basado en el lenguaje RoboBasic, especializado y orientado a robots. 2Robot Operating System: http://www.ros.org/wiki/ 3http://www.ubuntu.com/ 4https://code.google.com/p/robobuilder-ros-pkg/#Robobuilder ROS package written in Python 2 4. Estructura del documento En esta memoria se describe el proceso para la creaci´on de un interfaz gestual mediante c´amaras RGB-d con un robot humanoide. En el cap´ıtulo 2 se explicar´a el m´etodo utilizado para el reconocimiento y segmentaci´on de las manos, as´ı como el tratamiento de las im´agenes y los m´etodos de clasificaci´on probados. En el cap´ıtulo 3 se explicar´a el sistema de comunicaci´on con el robot RoboNova-1 y su programaci´on. En el cap´ıtulo 4 se detallar´a la aplicaci´on realizada. En el cap´ıtulo 5, las conclusiones recopilan el resultado del proyecto, l´ıneas de trabajos futuros y una valoraci´on personal del proyecto fin de carrera. Finalmente encontraremos varios anexos con informaci´on de inter´es sobre el sistema, dispositivos utilizados y los resultados completos de las pruebas realizadas. 5. Planificaci´on En el diagrama de Gantt que se muestra en la Figura 1.2 queda reflejada la gesti´on del tiempo utilizada para la realizaci´on de este proyecto. En el se detallan las tareas que se han realizado y el tiempo invertido en ellas. Entre las tareas realizadas hay tareas de estudio, documentaci´on, realizaci´on de tutoriales, prueba de programas de reconocimiento, implementaci´on del interfaz y presentaci´on de talleres durante la celebraci´on de la “V semana de la ingenier´ıa y arquitectura”5. 5http://www.semanaingenieriayarquitectura.com/ 3 - Grosor de la l´ınea en p´ıxeles = 2 Este resultado coincide con la imagen inferior izquierda de la Figura 2.8. Filtrado del ruido Tras una preselecci´on de varias combinaciones de tama˜no de imagen y de punto, se repitieron las pruebas incorporando pasos de filtrado a la imagen para suavizarla y evitar ruido, con la intenci´on de que mejorase el resultado del reconocimiento como se muestra en muchos ejemplos de la literatura [13]. Las siguientes pruebas se realizaron con filtro Gaussiano [14] y filtro de mediana [15]. El ´ındice utilizado para los filtros indicar´a el tama˜no del recuadro a tener en cuenta, centrado en el p´ıxel que se va a modificar, utilizado para obtener el nuevo valor. Filtro Gaussiano Un desenfoque Gaussiano es el resultado de una imagen difuminada por una funci´on Gaussiana. Es un efecto ampliamente utilizado para reducir el ruido de la imagen y reducir los detalles. El valor de cada p´ıxel sera el resultado del producto de la funci´on Gaussiana aplicada en cada una de las dimensiones [16]: G(x, y) = 1 2πσ2e− x2+y2 2σ2(2.1) En un filtro Gaussiano, el ´ındice utilizado nos determinara el valor de σ, la desviaci´on de la distribuci´on Gaussiana (Figura 2.9). El valor resultado ser´a una media ponderada, realizada mediante c´ırculos conc´entricos, de los valores del recuadro seleccionado. Figura 2.9: Imagen original (izquierda). Filtrado con Gaussian Blur con indice 7 (centro). Filtrado con Gaussian Blur con ndice 23 (derecha). Filtro de mediana El filtro de mediana es una t´ecnica de filtrado digital no lineal, a menudo utilizado para eliminar el ruido. Tal reducci´on de ruido es un t´ıpico paso de tratamiento previo para mejorar los resultados del procesamiento posterior, como la detecci´on de bordes en una imagen. El Filtrado de mediana es ampliamente utilizado en el procesamiento digital de la imagen, ya que, en determinadas condiciones, conserva los bordes mientras elimina ruido de la imagen [17]. Este filtro reemplaza cada p´ıxel con la mediana de sus p´ıxeles vecinos localizados en el cuadrado que rodea al p´ıxel en cuesti´on, como muestra el ejemplo de la Figura 2.10. En este caso, el ´ındice utilizado para los filtros indicar´a el tama˜no del recuadro a tener en cuenta, centrado en el p´ıxel que se va a modificar, utilizado para obtener el nuevo valor. 10 3 35 12 6 25 45 15 17 22 3 6 12 15 17 22 25 35 45 Figura 2.10: Ejemplo para la b´usqueda del valor que se asignar´a (en verde, abajo) al p´ıxel central (en verde, arriba) utilizando un filtro de mediana. Figura 2.11: Imagen original (izquierda). Filtrado con Median Blur con indice 7 (centro). Filtrado con Median Blur con ndice 23 (derecha). 3. Algoritmos de clasificaci´on de las im´agenes 2D para reconocer las distintas posturas de la mano Una vez obtenidas las imagenes binarizadas de la mano detectada, se realiza el ´ultimo paso de decidir a que gesto se asemeja m´as. En una primera versi´on se realiz´o la comparaci´on respecto a unas muestras de cada gesto comparando la cantidad de p´ıxeles que se diferenciaban respecto a cada muestra. El resultado fue bueno, pero con un n´umero reducido de gestos y muestras por gesto. Este sistema implica el comparar la nueva imagen capturada con todas las muestras y eso es un proceso costoso si utilizamos un n´umero elevado de muestras que nos permitan el reconocimiento variando el ´angulo o posici´on de la mano. Por el contrario, si se utilizan pocas muestras por gesto, supone el tener que hacer el gesto con una posici´on muy semejante a la de las muestras, ya que en caso contrario el resultado tenia una alta probabilidad de ser err´oneo. Para una segunda versi´on, se procedi´o a analizar los resultados obtenidos con otros dos m´etodos de clasificaci´on m´as complejos y eficientes. De los diferentes m´etodos de clasificaci´on descritos en la literatura [19] se decidi´o utilizar uno de los m´as populares de cada gran familia de clasificadores: un m´etodo de tipo generativo, K Nearest Neighbors, y otro de tipo discriminativo, Support Vector Machine. K Nearest Neighbors El m´etodo de clasificaci´on basado en K Nearest Neighbors[18], KNN, es un m´etodo de clasificaci´on “lazy learning” de tipo generativo, que estima, a partir de la informaci´on proporcionada por un conjunto de vectores de entrenamiento, el valor de la funci´on de densidad de probabilidad de que un elemento pertenezca a una clase determinada. Para el reconocimiento de patrones, el algoritmo KNN es un m´etodo de clasificaci´on de objetos basado en los ejemplos del entrenamiento m´as cercanos en el espacio de los elementos. El entrenamiento se realiza con vectores en un espacio multidimensional, asign´andole a cada uno una etiqueta de la clase a la que pertenece. Para el proceso de clasificaci´on se seleccionan los 11 kejemplos m´as cercanos y el nuevo vector es clasificado como la clase que m´as se repita entre los ejemplos seleccionados. Podemos ver un ejemplo en la Figura 2.12. Figura 2.12: Ejemplo del algoritmo KNN. Deseamos clasificar el interrogante verde como tri´angulo o cuadrado. Con k = 3, ´este es clasificado como la clase tri´angulo, ya que hay un cuadrado y 2 tri´angulos, dentro del c´ırculo que los contiene. Si k = 5, ´este es clasificado como la clase cuadrado, ya que hay 2 tri´angulos y 3 cuadrados, dentro del c´ırculo externo. Generalmente se utiliza la distancia eucl´ıdea para determinar quienes son los vecinos m´as cercanos: d(xi, xj) = � � � � p � r=1 (xir −xjr)2(2.2) Support Vector Machines El m´etodo de clasificaci´on basado en Support Vector Machines [20], al contrario del anterior, es un m´etodo de tipo discriminativo, que modela la dependencia de una variable no observada en una variable observada. Dentro de un marco estad´ıstico, esto se hace mediante el modelado de la distribuci´on de probabilidad condicional[21] P(y|x), que se puede utilizar para predecir ya partir de x.´ Este m´etodo realiza la clasificaci´on mediante la construcci´on de uno o varios hiperplanos N-dimensionales que separan los datos de manera ´optima en dos categor´ıas. En la Figura 2.13 vemos un ejemplo en 2D . 4. Pruebas y an´alisis de resultados Para buscar los par´ametros en los que se obtuviesen los mejores resultados se ha realizado una bater´ıa de pruebas evaluando los diferentes par´ametros y almacenando su mejor o peor comportamiento en la clasificaci´on deseada. Para la evaluaci´on se han utilizado las medidas est´andar utilizadas en problemas de clasificaci´on, precision-recall2, que resumen lo obtenido en cada prueba para su posterior comparaci´on. Las pruebas se han realizado mediante secuencias grabadas anteriormente para poder realizar una evaluaci´on exhaustiva sobre los mismos datos con distintas opciones. La grabaci´on de estos datos se realizaba siguiendo unos patrones para obtener una cantidad lo m´as similar posible de muestras por cada gesto, y as´ı realizar comparaciones m´as equitativas. Mediante el programa analiza se obtienen unas tablas con los resultados de las clasificaciones de ambas manos para los dos sistemas de clasificaci´on a comparar. 2http://en.wikipedia.org/wiki/Precision and recall 12 Figura 2.13: Ejemplo en 2D de la separaci´on entre dos clases con el m´aximo margen posible. El programa analiza se invoca de la siguiente manera: rosrun interfaz analiza nombre calibracion resolucion radio punto grosor linea tipo linea filtro indice filtro video nombre calibracion: nombre del directorio donde se encuentra las im´agenes utilizadas para la calibraci´on resolucion: dimensi´on del lado de la imagen en p´ıxeles radio punto: radio del c´ırculo utilizado para cada punto al proyectarlos en la imagen grosor linea: grosor de la l´ınea utilizada en los c´ırculos de cada l´ınea tipo linea: tipo de l´ınea utilizado para el dibujo de cada punto - 1= 8-connected line - 2 = 4-connected line - 3 = CV AA: antialiased line filtro: - 0 = sin filtro - 2 = Gaussian Blur - 3 = Median Blur indice filtro: ´ındice para el filtro que se utilizar´a. Este valor debe ser n´umero impar. video: Nombre del v´ıdeo del cual se desean obtener los resultados del an´alisis Para cada uno de los experimentos se muestran dos tablas con los resultados obtenidos con cada uno de los m´etodos de clasificaci´on, como podemos observar en la Tabla 2.1. En cada una de ellas la parte izquierda y derecha de la tabla corresponde a los resultados de reconocimiento de la mano izquierda y derecha respectivamente. Cada tabla muestra el resultado de reconocer los gestos 1 y 2 (ejemplos en Figura 2.14), y el 0 se utiliza como caso “nulo” cuando el clasificador decide que la imagen no corresponde con 13 ninguno de los gestos. Las columnas muestran cuantos tests correspondientes a esa clase han sido clasificados como cada una de las clases posibles. Es decir, el resultado ´optimo seria obteniendo una diagonal, con todos los tests en las casillas 1-1 y 2-2. El criterio que buscamos es el clasificador con mayor porcentaje de aciertos obtenido. Observando los resultados obtenidos de las pruebas, los cuales podemos encontrar en el anexo D, se observa que dependiendo del m´etodo de b´usqueda que se utilice los resultados var´ıan. En ambos casos coincide la configuraci´on de la imagen que da resultados mejores, es decir, el tama˜no de la imagen, radio y grosor del c´ırculo. Sin embargo, la mejor elecci´on para el filtro utilizado var´ıa seg´un el m´etodo de clasificaci´on. Si realizamos la b´usqueda por k nearest neighbor el mejor resultado lo obtenemos si utilizamos un filtro Gaussiano con ´ındice 19, como vemos en la tabla 2.1, y, en cambio, si utilizamos Support Vector Machine el mejor resultado lo obtenemos con un filtro Median Blur con ´ındice 5, que se encuentran en la tabla 2.2. Los resultados han sido los siguientes: Para la clasificaci´on con KNN: - rosrun interfaz analiza dos2-100-0-2-2-19 100 0 2 3 2 19 luisPalmOk2 ◦tama˜no en p´ıxeles del lado = 100 ◦radio del c´ırculo = 0 ◦grosor de la l´ınea = 2 ◦tipo de l´ınea = CV AA ◦filtro = Gaussian Blur ◦´ındice para el filtro = 19 Figura 2.14: Capturas de los gestos: a la izquierda el gesto 1, Palma abierta, y a la derecha el gesto 2, dedo ”ok”. Para la clasificaci´on con SVM: - rosrun interfaz analiza dos2-100-0-2-3-5 100 0 2 3 3 5 luisPalmOk2 ◦tama˜no en p´ıxeles del lado = 100 ◦radio del c´ırculo = 0 ◦grosor de la l´ınea = 2 ◦tipo de l´ınea = CV AA ◦filtro = Median Blur ◦´ındice para el filtro = 5 Tras realizar las pruebas y seleccionar el formato de imagen con el que se obtiene mejores resultados, se ha realizado un nuevo an´alisis tras la inserci´on de m´as muestras para la calibraci´on del sistema. En las pruebas anteriores se analizaba partiendo de 50-60 muestras por gesto. En esta ocasi´on se realizar´a el an´alisis con aproximadamente 300 muestras por gesto. Con los datos de la 14 LEFT 0 1 2 0 0 3 0 1 0 54 10 2 0 12 59 RIGHT 0 1 2 0 0 3 0 1 0 52 11 2 0 15 57 Precisi´on obtenida mediante KNN = 0.78 LEFT 0 1 2 0 0 2 1 1 0 59 5 2 0 56 15 RIGHT 0 1 2 0 0 0 3 1 0 13 50 2 0 56 16 Precisi´on obtenida mediante SVM = 0.37 Tabla 2.1: Resultados de las pruebas Figura 2.15: Capturas de los gestos: a la izquierda el gesto 1, Palma abierta, y a la derecha el gesto 2, dedo ”ok”. LEFT 0 1 2 0 1 1 1 1 1 40 22 2 0 10 62 RIGHT 0 1 2 0 0 2 1 1 0 28 35 2 0 6 66 Precisi´on obtenida mediante KNN = 0.71 LEFT 0 1 2 0 0 2 1 1 1 53 9 2 0 11 61 RIGHT 0 1 2 0 0 0 3 1 0 39 24 2 9 46 26 Precisi´on obtenida mediante SVM = 0.65 Tabla 2.2: Resultados de las pruebas utilizando un filtro de mediana tabla 2.3 podemos observar que en el caso de KNN el resultado no var´ıa, en cambio en el de SVM mejora notablemente. Estos resultados muestran que si se disponen de pocas muestras para el entrenamiento el uso del m´etodo de clasificaci´on “k-nearest neighbor” es m´as eficiente que con “Suport Vector Machine”. En cambio, si aumentamos el n´umero de muestras el resultado es similar con ambos m´etodos. 15 LEFT 0 1 2 0 0 4 0 1 0 48 8 2 0 8 34 RIGHT 0 1 2 0 0 4 0 1 0 46 9 2 0 8 34 Precisi´on obtenida mediante KNN = 0.79 LEFT 0 1 2 0 0 4 0 1 0 47 9 2 0 6 36 RIGHT 0 1 2 0 0 4 0 1 0 46 9 2 0 7 35 Precisi´on obtenida mediante SVM = 0.8 Tabla 2.3: Resultados de las pruebas utilizando un filtro de mediana 16 Cap´ıtulo 3 Comunicaci´on con robot humanoide RoboNova-1 Como ya se ha indicado anteriormente, para el desarrollo de este proyecto se ha utilizado el robot RoboNova-1(figura 3.1). El RoboNova-1 es un robot humanoide que lleva incorporados 16 servos digitales. A pesar de que tambi´en cuenta con un sensor de infrarrojos para su control desde un mando a distancia, la comunicaci´on se realizar´a por medio de una conexi´on l´ınea serie con el ordenador. Si nos dirigimos al anexo C encontraremos informaci´on m´as detallada sobre el robot RoboNova-1. Figura 3.1: Robot humanoide RoboNova-1 1. Robobuilder-ros-pkg Para el control del robot he utilizado el paquete Robobuilder-ros-pkg incorporado en el repositorio de ROS por RoboSavvy[24]. En ´el encontramos un controlador para la plataforma“Robobuilder”, la cual lleva un sistema de comunicaci´on, por l´ınea serie, con algunas similitudes al que utiliza el “RoboNova-1”. El controlador es un script Python1.´ Este realiza una subscripci´on a“robobuilder motion”, por donde se le mandar´an las ordenes de las acciones a realizar entre las que tiene programadas en el programa interno. 1Se necesita una versi´on de Python igual o superior a la 2.7 17 Debido a las diferencias entre los protocolos de comunicaci´on entre estos dos modelos, hubo que realizar algunas modificaciones en este script: Modificar la velocidad de conexi´on a 9600 bits/seg. Desactivar el modo de control directo. Realizar comprobaci´on del puerto al que esta conectado el robot. Robobuilder utiliza una conexi´on a 11520 bits/seg y para el control directo utiliza otros protocolos de comunicaci´on diferentes a los de RoboNova-1. Por otro lado, el script est´a preparado para realizar la conexi´on en el puerto USB0. Pero utiliz´andolo de manera simultanea con el sensor Kinect, ´este puede ser reconocido f´acilmente en alg´un otro puerto y se debe comprobar el puerto al que se encuentra conectado nuestro robot. Para la comunicaci´on con la memoria interna del robot, donde se encuentran las secuencias de movimiento preprogramados, ´este script es v´alido para este proyecto. En el modo de control directo, comunicaci´on inmediata con los motores del robot, debemos realizarla de manera independiente a este script siguiendo las especificaciones de protocolo del chip “Hitec MR-C3024”23. Para realizar una acci´on de la memoria interna del robot deberemos incluir el fichero robobuilder/Motion.h en el que tenemos definida la variable que utiliza la comunicaci´on con el robot y publicarlo ROS para que el robot reciba la instrucci´on: ros::Publisher motion ; motion = n.advertise<robobuilder::Motion>(”robobuilder motion”, 1); robobuilder::Motion m; m.motion = (int8 t)7; motion .publish(m); Figura 3.2: Robot humanoide RoboNova-1 ejecutando la acci´on 7 programada en su memoria interna. 2http://www.ceautomatica.es/sites/default/files/upload/10/CEABOT/recursos/C3024 Serial Protocol.pdf 3http://www.ceautomatica.es/sites/default/files/upload/10/CEABOT/recursos/controller %20serial %20interface.pdf 18 En el caso de control directo nos comunicaremos mandando las instrucciones directamente al robot por medio de l´ınea serie: std::vector<unsigned char>command; command.push back(0xE6); command.push back(0x07); command.push back(0xB4); sendCommand(command); El valor “0xE6”indica la instrucci´on de cambiar la posici´on de un servo, el byte segundo indica el servo a controlar y por ultimo la posici´on a la que debe trasladarse. En este caso el resultado ser´ıa el que muestra la Figura 3.3. Figura 3.3: Robot humanoide RoboNova-1 2. Programaci´on del RoboNova-1 El robot posee un software propio basado en el lenguaje RoboBasic, que como su nombre indica es un lenguaje del tipo Basic pero especializado y orientado a robots(Figura 3.4). Con la siguiente rutina como ejemplo, el robot proceder´ıa a sentarse y, tras esperar un segundo, volver´ıa a levantarse a la velocidad indicada, en este caso 8: SPEED 8 GOSUB sit down pose DELAY 1000 GOSUB standard pose GOTO main exit sit down pose ystandard pose son rutinas en las que se especifican los diferentes movimientos que deben realizar cada uno de los motores del robot: 19 rosmake hand interaction rosmake interfaz Si es el primer uso, ser´a necesario realizar la captura de gestos para el entrenamiento del sistema. para ello ejecuta el m´odulo “calibrar” introduciendo tu nombre en el campo nombreCalibraci´on: rosrun interfaz calibrar ’nombreCalibracion’ 100 0 2 3 2 19 Para lanzar el interfaz utilizaremos dos terminales, en la primera escribiremos: roscd interfaz python nodes/connector.py y en la segunda: rosrun interfaz interfaz ’nombreCalibracion’ Una vez lanzada la aplicaci´on: Sit´uese delante del sensor Kinect y mu´evase para ser reconocido. Levante los brazos situando las palmas abiertas a los lados de la cabeza hasta que sus manos sean reconocidas ¡¡¡Comience a mandar instrucciones al robot!!! 3. Taller realizado Durante la celebraci´on de la “V semana de la ingenier´ıa y arquitectura” celebrada en la Escuela de Ingenier´ıa y Arquitectura de la Universidad de Zaragoza, se realiz´o un taller durante las visitas realizadas por distintos grupos de secundaria y bachiller al laboratorio del grupo de Rob´otica, Percepci´on y Tiempo Real del DIIS. En el taller se les explic´o el funcionamiento del interfaz durante una demostraci´on y posteriormente fueron los alumnos los que probaron la aplicaci´on (Figura 4.5). Los resultados obtenidos fueron satisfactorios. La aplicaci´on reconoci´o correctamente las instrucciones realizadas por los alumnos que probaron el interfaz. Adem´as tuvo muy buena aceptaci´on entre los asistentes. 26 Figura 4.5: Talleres realizados durante la “V semana de la ingenier´ıa y arquitectura”. 27 28 Cap´ıtulo 5 Conclusiones y trabajos futuros 1. Conclusiones La aparici´on del sensor Kinect ha supuesto una revoluci´on en el campo de la visi´on por computador y de la rob´otica por las posibilidades que ofrece el sensor de profundidad y su bajo coste. Gracias al mapa de profundidad que Kinect aporta en tiempo real, se facilita mucho el trabajo de reconocimiento y segmentaci´on de objetos. Los objetivos de este proyecto fin de carrera eran la creaci´on de un interfaz gestual para el control de un robot humanoide mediante c´amaras RGB-d y su uso en la creaci´on de un taller de divulgaci´on orientado a estudiantes de secundaria y bachiller, objetivos que se han cumplido de manera satisfactoria. Este interfaz se ha implementado utilizando el pseudo sistema operativo ROS. Su dise˜no para el desarrollo de aplicaciones para robots fue muy ´util en la implementaci´on del interfaz. Aunque el uso de ROS no es complejo fue necesario documentarse sobre ´este y realizar los tutoriales que se ofrecen en su pagina web para conocer las posibilidades que nos ofrece. Para el desarrollo del interfaz, se ha utilizado el sensor Kinect en el reconocimiento de personas y la segmentaci´on de sus manos. Ha sido necesaria una intensa b´usqueda de informaci´on y aplicaciones desarrolladas para tal fin, ya que hay muchos ejemplos en Internet, pero no siempre la documentaci´on es exacta o resulta f´acil ponerlos en marcha. En muchos de los ejemplos encontrados, no fue posible su instalaci´on por incompatibilidades de software o por falta de documentaci´on. Respecto a los m´etodos estudiados para la clasificaci´on de las im´agenes de las manos, uno de tipo generativo, K Nearest Neighbors, y otro de tipo discriminativo, Support Vector Machine, los resultados muestran que con pocos gestos y pocas muestras es m´as efectivo el modelo generativo, pero si aumentamos el n´umero de muestras, el modelo discriminativo consigue unos resultados semejantes. El robot utilizado para el desarrollo del proyecto ha sido RoboNova-1. Al utilizar una plataforma de hardware real (frente a un simulador), permite resultados m´as interesantes, pero tambi´en problemas pr´acticos. Por ejemplo, surgieron problemas a la hora de realizar la comunicaci´on con el robot por l´ınea serie desde las aplicaciones, ya que RoboNova-1 no posee drivers en ROS. Partiendo del driver creado para el robot Robobuilder y tras realizar algunas modificaciones se consigui´o la conexi´on con nuestro robot, pero fue necesario el estudio de los protocolos de comunicaci´on, a trav´es de l´ınea serie, utilizados por RoboNova-1 y el estudio del lenguaje Python, lenguaje en el que est´a implementado el driver utilizado. Con el interfaz gestual en funcionamiento se realiz´o un taller, en el laboratorio de rob´otica del I3A, durante la semana de la ingenier´ıa. En ellos, participaron estudiantes de diversos grupos, desde 3 0 de la ESO hasta 2 0 de Bachiller. El resultado fue muy positivo ya que se comprob´o el correcto funcionamiento de la aplicaci´on y obtuvo buena aceptaci´on entre los estudiantes. 29 2. Trabajo futuro Tras la realizaci´on de este proyecto, se proponen algunas l´ıneas de trabajo futuro: Insertar m´as gestos a reconocer por el sistema. Se podr´ıan insertar m´as gestos que implicar´ıan m´as instrucciones para la comunicaci´on con el robot. Para ello se debe hacer un estudio de diferentes posturas de mano que los sistemas de clasificaci´on puedan separar claramente en clases diferenciadas e insertar muestras suficientes para su correcta clasificaci´on. Durante la calibraci´on existen muestras que son etiquetadas en un determinado gesto pero, por error en la captura de puntos de la Kinect o por error humano, son muestras que pueden perjudicar en el posterior reconocimiento de manos. Para ello se puede mejorar la calibraci´on retirando todas aquellas muestras no deseadas. Completar el driver para RoboNova-1 mediante la adaptaci´on completa del script de Robobuilder utilizado. Incorporar sensores a RoboNova-1. El robot solo dispone de un sensor de infrarrojos que comunica con un mando a distancia. El chip del robot posee varios conectores libres para incorporar sensores que podr´ıan ser muy ´utiles. Un sensor de posici´on nos ser´ıa de mucha utilidad debido a la poca estabilidad de este robot. Con este sensor instalado el robot podr´ıa incorporarse de nuevo al caer. Por otro lado una conex´ıon inal´ambrica para la comunicaci´on con el robot dar´ıa m´as libertad de movimientos a este. Utilizar el interfaz gestual para el control de otro tipo de robots o dispositivos. La aplicaci´on se podr´ıa adaptar para su uso con brazos de robots, para el control de robots dom´esticos o como rat´on del ordenador. 3. Valoraci´on personal La elecci´on de este proyecto de fin de carrera fue por el inter´es personal que ten´ıa en los campos de la rob´otica y la inteligencia artificial. Mi desconocimiento, tanto en el campo de la rob´otica como en el de visi´on por computador, ha supuesto la dedicaci´on de mucho tiempo al estudio de las herramientas a utilizar, sus librer´ıas y sus posibilidades, as´ı como de diferentes m´etodos de clasificaci´on para el reconocimiento de los gestos. Tras la realizaci´on de los talleres durante la semana de la ingenier´ıa comprob´e el resultado de mi proyecto. Considero que es un buen m´etodo para que la gente aprenda algunos conocimientos sobre rob´otica y visi´on por computador de manera comprensible y amena. Este proyecto me ha supuesto una gran satisfacci´on personal, por la cantidad de conocimientos obtenidos sobre temas que me parecen de gran inter´es, por el uso de software libre en el desarrollo de la aplicaci´on, por la buena aceptaci´on que obtuvo por parte de los estudiantes en los talleres realizados y por la motivaci´on que me ha dado a seguir“trasteando”con la rob´otica y la inteligencia artificial. 30 Bibliograf´ıa [1] K. Lai, L. Bo, X. Ren, D. Fox. “RGB-D Object Recognition: Features, Algorithms, and a Large Scale Benchmark”. Consumer Depth Cameras for Computer Vision: Research Topics and Applications, 2013. 1 [2] M. Krainin, K. Konolige, D. Fox. “Exploiting Segmentation for Robust 3D Object Matching”. ICRA, 2012. 1 [3] L Xia, CC Chen, JK Aggarwal. “Human detection using depth information by Kinect”. Computer Vision and Pattern Recognition Workshops (CVPRW), IEEE Computer Society Conference, 2011. 1 [4] Z Ren, J Meng, J Yuan, Z Zhang. “Robust hand gesture recognition with kinect sensor”. Proceeding MM ’11 Proceedings of the 19th ACM international conference on Multimedia. Pages 759-760. 2011. 1 [5] Z Ren, J Yuan, Z Zhang “Robust hand gesture recognition based on finger-earth mover’s distance with a commodity depth camera”. Proceeding MM ’11 Proceedings of the 19th ACM international conference on Multimedia. Pages 1093-1096. 2011. 1, 1 [6] JP Wachs, M K¨ olsch, H Stern, Y Edan.“Vision-based hand-gesture applications”.Magazine Communications of the ACM CACM Homepage archive Volume 54 Issue 2. Pages 60-71. 2011. 1 [7] P. Henry, M. Krainin, E. Herbst, X. Ren, D. Fox. “RGB-D mapping: Using Kinect-style depth cameras for dense 3D modeling of indoor environments”. International Journal of Robotics. Research 31:5, 2012. 1 [8] MNK Boulos, BJ Blanchard, C Walke. “Web GIS in practice X: a Microsoft Kinect natural user interface for Google Earth navigation”. International Journal of Health Geographics. 2011 1 [9] W. Choi,C. Pantofaru, S. Savarese. “Detecting and Tracking People using an RGB-D Camera via Multiple Detector Fusion”. Workshop on Challenges and Opportunities in Robot Perception, at the International Conference on Computer Vision (ICCV). 2011 1 [10] David Bueno Monge , “Reconocimiento de Objetos en 3D Utilizando Sensores de Visi´on y Profundidad de Bajo Coste”, 2012. Proyecto fin de carrera. 1 [11] Radu Bogdan Rusu and Steve Cousins, “3D is here: Point Cloud Library (PCL)”. In IEEE International Conference on Robotics and Automation (ICRA), 2011. 2, 3 [12] Morgan Quigley, Brian Gerkey, Ken Conley, Josh Faust, Tully Foote, Jeremy Leibs, Eric Berger, Rob Wheeler, Andrew Ng. ”ROS: an open-source Robot Operating System”. Retrieved 3 April 2010. 2, 3 [13] Gonz´alez, R.C., Wintz, P. “Procesamiento digital de im´agenes”. Addison-Wesley. 1996 2 31 [14] Shapiro, L. G. & Stockman, G. C: ”Computer Vision”, page 137, 150. Prentence Hall, 2001 2 [15] G.R. Arce, ”Nonlinear Signal Processing: A Statistical Approach”, Wiley:New Jersey, USA, 2005. 2 [16] N. Hagen and E. L. Dereniak, ”Gaussian profile estimation in two dimensions,” Appl. Opt. 47:6842-6851, 2008 2 [17] E. Arias-Castro and D.L. Donoho, ”Does median filtering truly preserve edges better than linear filtering?”, Annals of Statistics, vol. 37, no. 3, pp. 1172–2009. 2 [18] Stuart Russell and Peter Norvig.“Artificial Intelligence: A Modern Approach”, second edition, p. 733. Prentice Hall 2003 3 [19] Richard O. Duda, Peter E. Hart, David G. Stork. “Pattern classification ”. 2001. 3 [20] Cortes, Corinna; and Vapnik, Vladimir N.; ”Support-Vector Networks”, Machine Learning, 20, 1995 3 [21] Papoulis, A. ”Conditional Probabilities and Independent Sets.” §2-3 in Probability, Random Variables, and Stochastic Processes, 2nd ed. New York: McGraw-Hill, pp. 33-45, 1984. 3 [22] http://www.ros.org/wiki/openni 3 [23] http://opencv.willowgarage.com/documentation/cpp/index.html 3 [24] Robosavvy: http://robosavvy.com/site/ 1 32 Anexos 33 Anexo A ROS Figura A.1: Diagrama de sistema de comunicaci´on utilizado en ROS. ROS, cuyas siglas significan “Robot Operating System”, es un pseudo sistema operativo que nos proporciona librer´ıas y herramientas para el desarrollo de software para robots. ROS provee los servicios est´andar de un sistema operativo tales como abstracci´on del hardware, control de dispositivos de bajo nivel, implementaci´on de funcionalidad de uso com´un, paso de mensajes entre procesos y mantenimiento de paquetes. Est´a basado en una arquitectura de grafos donde el procesamiento toma lugar en los nodos, que pueden recibir, mandar y multiplexar: sensores, control, estado, planificaci´on y otros mensajes. ROS implementa varios estilos diferentes de comunicaci´on, incluyendo un sistema s´ıncrono de estilo RPC1de comunicaci´on a trav´es de los servicios, la transmisi´on as´ıncrona de datos a trav´es de “topics”, y el almacenamiento de datos en un servidor de par´ametros. Los diferentes nodos que se ejecutan en ROS pod´an publicar los nuevos valores de los “topics” y subscribirse a ´estos para consultarlos. A pesar de que ROS no trabaja en un marco de tiempo real, si que es posible el integrar en ROS c´odigo en tiempo real. Podr´ıamos describir el grafo del tiempo de ejecuci´on como una red peer-to-peer de procesos que est´an d´ebilmente acoplados utilizando la infraestructura de comunicaci´on ROS. La librer´ıa est´a orientada para un sistema UNIX, siendo Ubuntu el sistema en el que ofrecen soporte. Para el desarrollo de este proyecto se utiliza ROS Electric por ser la versi´on con soporte m´as estable del momento. Dicha versi´on funciona bajo el sistema operativo “Ubuntu 10.04 Lucid Lynx2”. 1Remote Procedure Call 2http://releases.ubuntu.com/lucid/ 35 PRUEBA RESOLUCI´ ON RADIO GROSOR LINEA KNN SVM 2 100 0 2 0.56 0.07 3 100 0 3 0.57 0.07 4 150 0 2 0.56 0.27 5 150 0 3 0.56 0.21 7 150 1 2 0.57 0.10 8 150 1 3 0.58 0.09 12 200 1 2 0.48 0.10 13 200 1 3 0.57 0.11 Tabla D.2: Pruebas seleccionadas y resultados de la precisi´on. Prueba 1: P´ıxeles de lado: 100 Radio del c´ırculo: 0 Grosor de l´ınea: 1 Figura D.1: Capturas de los gestos: a la izquierda el gesto 1, Palma abierta, y a la derecha el gesto 2, dedo ”ok”. LEFT 0 1 2 0 0 0 4 1 0 13 43 2 0 9 33 RIGHT 0 1 2 0 0 1 3 1 0 6 48 2 0 2 41 Precisi´on obtenida mediante KNN = 0.45 LEFT 0 1 2 0 0 4 0 1 1 51 4 2 0 34 8 RIGHT 0 1 2 0 0 4 0 1 0 54 0 2 0 42 1 Precisi´on obtenida mediante SVM = 0.55 Tabla D.3: Resultados de la prueba 1 Prueba 2: P´ıxeles de lado: 100 Radio del c´ırculo: 0 42 Grosor de l´ınea: 2 Figura D.2: Capturas de los gestos: a la izquierda el gesto 1, Palma abierta, y a la derecha el gesto 2, dedo ”ok”. LEFT 0 1 2 0 0 4 0 1 0 46 9 2 0 7 36 RIGHT 0 1 2 0 4 0 0 1 45 1 9 2 8 1 33 Precisi´on obtenida mediante KNN = 0.56 LEFT 0 1 2 0 3 1 0 1 47 8 0 2 22 21 0 RIGHT 0 1 2 0 3 1 0 1 48 7 0 2 23 19 0 Precisi´on obtenida mediante SVM = 0.07 Tabla D.4: Resultados de la prueba 2 Prueba 3: P´ıxeles de lado: 100 Radio del c´ırculo: 0 Grosor de l´ınea: 3 Figura D.3: Capturas de los gestos: a la izquierda el gesto 1, Palma abierta, y a la derecha el gesto 2, dedo ”ok”. 43 LEFT 0 1 2 0 0 4 0 1 0 46 9 2 0 7 36 RIGHT 0 1 2 0 4 0 0 1 45 1 8 2 8 1 34 Precisi´on obtenida mediante KNN = 0.57 LEFT 0 1 2 0 3 1 0 1 48 7 0 2 22 21 0 RIGHT 0 1 2 0 3 1 0 1 47 7 0 2 19 23 1 Precisi´on obtenida mediante SVM = 0.07 Tabla D.5: Resultados de la prueba 3 Prueba 4: P´ıxeles de lado: 150 Radio del c´ırculo: 0 Grosor de l´ınea: 2 Figura D.4: Capturas de los gestos: a la izquierda el gesto 1, Palma abierta, y a la derecha el gesto 2, dedo ”ok”. 44 LEFT 0 1 2 0 0 4 0 1 1 46 9 2 0 7 35 RIGHT 0 1 2 0 4 0 0 1 46 1 8 2 7 1 34 Precisi´on obtenida mediante KNN = 0.56 LEFT 0 1 2 0 3 1 0 1 37 19 0 2 7 1 34 RIGHT 0 1 2 0 3 1 0 1 52 3 0 2 32 10 0 Precisi´on obtenida mediante SVM = 0.27 Tabla D.6: Resultados de la prueba 4 Prueba 5: P´ıxeles de lado: 150 Radio del c´ırculo: 0 Grosor de l´ınea: 3 Figura D.5: Capturas de los gestos: a la izquierda el gesto 1, Palma abierta, y a la derecha el gesto 2, dedo ”ok”. 45 LEFT 0 1 2 0 0 4 0 1 3 44 9 2 0 6 36 RIGHT 0 1 2 0 4 0 0 1 45 1 8 2 8 1 34 Precisi´on obtenida mediante KNN = 0.56 LEFT 0 1 2 0 3 1 0 1 47 9 0 2 16 24 2 RIGHT 0 1 2 0 3 1 0 1 45 1 8 2 12 1 30 Precisi´on obtenida mediante SVM = 0.21 Tabla D.7: Resultados de la prueba 5 Prueba 6: P´ıxeles de lado: 150 Radio del c´ırculo: 1 Grosor de l´ınea: 1 Figura D.6: Capturas de los gestos: a la izquierda el gesto 1, Palma abierta, y a la derecha el gesto 2, dedo ”ok”. 46 LEFT 0 1 2 0 0 4 0 1 14 11 31 2 0 3 39 RIGHT 0 1 2 0 4 0 0 1 41 1 12 2 8 1 34 Precisi´on obtenida mediante KNN = 0.41 LEFT 0 1 2 0 3 1 0 1 22 33 1 2 2 35 5 RIGHT 0 1 2 0 3 1 0 1 47 6 1 2 20 15 8 Precisi´on obtenida mediante SVM = 0.25 Tabla D.8: Resultados de la prueba 6 Prueba 7: P´ıxeles de lado: 150 Radio del c´ırculo: 1 Grosor de l´ınea: 2 Figura D.7: Capturas de los gestos: a la izquierda el gesto 1, Palma abierta, y a la derecha el gesto 2, dedo ”ok”. 47 LEFT 0 1 2 0 0 4 0 1 0 47 9 2 0 6 36 RIGHT 0 1 2 0 4 0 0 1 45 1 8 2 8 1 34 Precisi´on obtenida mediante KNN = 0.57 LEFT 0 1 2 0 3 1 0 1 47 9 0 2 18 24 0 RIGHT 0 1 2 0 3 1 0 1 47 6 1 2 23 15 5 Precisi´on obtenida mediante SVM = 0.10 Tabla D.9: Resultados de la prueba 7 Prueba 8: P´ıxeles de lado: 150 Radio del c´ırculo: 1 Grosor de l´ınea: 3 Figura D.8: Capturas de los gestos: a la izquierda el gesto 1, Palma abierta, y a la derecha el gesto 2, dedo ”ok”. 48 LEFT 0 1 2 0 0 4 0 1 0 47 9 2 0 6 36 RIGHT 0 1 2 0 3 1 0 1 45 1 8 2 8 1 34 Precisi´on obtenida mediante KNN = 0.58 LEFT 0 1 2 0 3 1 0 1 45 11 0 2 25 17 0 RIGHT 0 1 2 0 3 1 0 1 47 7 0 2 21 22 0 Precisi´on obtenida mediante SVM = 0.09 Tabla D.10: Resultados de la prueba 8 Prueba 9: P´ıxeles de lado: 200 Radio del c´ırculo: 0 Grosor de l´ınea: 2 Figura D.9: Capturas de los gestos: a la izquierda el gesto 1, Palma abierta, y a la derecha el gesto 2, dedo ”ok”. 49 LEFT 0 1 2 0 0 4 0 1 14 29 13 2 0 7 35 RIGHT 0 1 2 0 2 1 1 1 38 6 10 2 8 1 34 Precisi´on obtenida mediante KNN = 0.51 LEFT 0 1 2 0 3 1 0 1 19 37 0 2 1 41 0 RIGHT 0 1 2 0 3 1 0 1 45 5 4 2 19 14 10 Precisi´on obtenida mediante SVM = 0.25 Tabla D.11: Resultados de la prueba 9 Prueba 10: P´ıxeles de lado: 200 Radio del c´ırculo: 0 Grosor de l´ınea: 3 Figura D.10: Capturas de los gestos: a la izquierda el gesto 1, Palma abierta, y a la derecha el gesto 2, dedo ”ok”. 50 LEFT 0 1 2 0 0 4 0 1 6 38 11 2 0 6 37 RIGHT 0 1 2 0 4 0 0 1 45 1 8 2 8 1 34 Precisi´on obtenida mediante KNN = 0.53 LEFT 0 1 2 0 3 1 0 1 28 27 0 2 4 39 0 RIGHT 0 1 2 0 4 0 0 1 46 8 0 2 21 22 0 Precisi´on obtenida mediante SVM = 0.17 Tabla D.12: Resultados de la prueba 10 Prueba 11: P´ıxeles de lado: 200 Radio del c´ırculo: 1 Grosor de l´ınea: 1 Figura D.11: Capturas de los gestos: a la izquierda el gesto 1, Palma abierta, y a la derecha el gesto 2, dedo ”ok”. 51 LEFT 0 1 2 0 1 1 1 1 1 49 14 2 0 11 60 RIGHT 0 1 2 0 0 3 0 1 0 30 33 2 0 7 65 Precisi´on obtenida mediante KNN = 0.73 LEFT 0 1 2 0 0 2 1 1 0 50 14 2 0 25 46 RIGHT 0 1 2 0 0 1 2 1 0 58 5 2 0 67 5 Precisi´on obtenida mediante SVM = 0.58 Tabla D.21: Resultados de la prueba 5 Prueba 6: P´ıxeles de lado: 150 Radio del c´ırculo: 1 Grosor de l´ınea: 3 Figura D.19: Capturas de los gestos: a la izquierda el gesto 1, Palma abierta, y a la derecha el gesto 2, dedo ”ok”. 58 LEFT 0 1 2 0 0 2 1 1 1 52 11 2 0 11 60 RIGHT 0 1 2 0 0 3 0 1 0 37 28 2 0 9 61 Precisi´on obtenida mediante KNN = 0.76 LEFT 0 1 2 0 1 0 2 1 6 40 18 2 1 9 61 RIGHT 0 1 2 0 0 1 2 1 0 42 23 2 0 57 13 Precisi´on obtenida mediante SVM = 0.56 Tabla D.22: Resultados de la prueba 6 rueba 7: P´ıxeles de lado: 200 Radio del c´ırculo: 1 Grosor de l´ınea: 2 Figura D.20: Capturas de los gestos: a la izquierda el gesto 1, Palma abierta, y a la derecha el gesto 2, dedo ”ok”. 59 LEFT 0 1 2 0 1 1 1 1 1 31 32 2 0 7 64 RIGHT 0 1 2 0 0 1 2 1 0 22 44 2 0 4 65 Precisi´on obtenida mediante KNN = 0.66 LEFT 0 1 2 0 0 2 1 1 0 56 8 2 0 31 40 RIGHT 0 1 2 0 0 1 2 1 0 43 23 2 0 60 9 Precisi´on obtenida mediante SVM = 0.53 Tabla D.23: Resultados de la prueba 7 Prueba 8: P´ıxeles de lado: 200 Radio del c´ırculo: 1 Grosor de l´ınea: 3 Figura D.21: Capturas de los gestos: a la izquierda el gesto 1, Palma abierta, y a la derecha el gesto 2, dedo ”ok”. 60 LEFT 0 1 2 0 1 1 1 1 2 48 14 2 0 11 60 RIGHT 0 1 2 0 0 1 2 1 0 23 40 2 0 4 68 Precisi´on obtenida mediante KNN = 0.72 LEFT 0 1 2 0 0 2 1 1 0 47 17 2 0 12 59 RIGHT 0 1 2 0 0 3 0 1 0 63 0 2 0 72 0 Precisi´on obtenida mediante SVM = 0.61 Tabla D.24: Resultados de la prueba 8 3. Fase 3: Selecci´on de filtro A partir de los resultados obtenidos, se han realizado de nuevo las pruebas pasando las im´agenes por filtros que mejoren la imagen a reconocer. Se han utilizado los filtros“Median Blur”y“Gaussian Blur” de las librer´ıas de OpenCv. Tras estos experimentos se decidi´o que la mejor configuraci´on a utilizar en la versi´on final de la aplicaci´on, para cada m´etodo, es: En el caso de b´usqueda por KNN utilizaremos: - P´ıxeles de lado: 100 - Radio del c´ırculo:0 - Grosor de l´ınea: 2 - Filtro: Gaussian Blur Para la b´usqueda mediante SVM el mejor resultado lo obtenemos con: - Pixeles de lado: 100 - Radio del c´ırculo:0 - Grosor de l´ınea: 2 - Filtro: Median Blur Prueba 1: P´ıxeles de lado: 100 Radio del c´ırculo: 0 Grosor de l´ınea: 2 Filtro: ninguno 61 Figura D.22: Capturas de los gestos: a la izquierda el gesto 1, Palma abierta, y a la derecha el gesto 2, dedo ”ok”. LEFT 0 1 2 0 0 2 1 1 1 44 18 2 0 10 62 RIGHT 0 1 2 0 0 2 1 1 0 30 33 2 0 6 66 Precisi´on obtenida mediante KNN = 0.73 LEFT 0 1 2 0 0 1 2 1 0 22 41 2 0 3 69 RIGHT 0 1 2 0 0 0 3 1 0 7 56 2 0 1 71 Precisi´on obtenida mediante SVM = 0.61 Tabla D.25: Resultados de la prueba 1 Prueba 2: P´ıxeles de lado: 100 Radio del c´ırculo: 0 Grosor de l´ınea: 2 Filtro: Gaussian Blur Figura D.23: Capturas de los gestos: a la izquierda el gesto 1, Palma abierta, y a la derecha el gesto 2, dedo ”ok”. 62 LEFT 0 1 2 0 0 3 0 1 0 54 10 2 0 12 59 RIGHT 0 1 2 0 0 3 0 1 0 52 11 2 0 15 57 Precisi´on obtenida mediante KNN = 0.80 LEFT 0 1 2 0 0 2 1 1 0 59 5 2 0 56 15 RIGHT 0 1 2 0 0 0 3 1 0 13 50 2 0 56 16 Precisi´on obtenida mediante SVM = 0.37 Tabla D.26: Resultados de la prueba 2 Prueba 3: P´ıxeles de lado: 100 Radio del c´ırculo: 0 Grosor de l´ınea: 2 Filtro: Median Blur Figura D.24: Capturas de los gestos: a la izquierda el gesto 1, Palma abierta, y a la derecha el gesto 2, dedo ”ok”. LEFT 0 1 2 0 1 1 1 1 1 40 22 2 0 10 62 RIGHT 0 1 2 0 0 2 1 1 0 28 35 2 0 6 66 Precisi´on obtenida mediante KNN = 0.71 LEFT 0 1 2 0 0 2 1 1 1 53 9 2 0 11 61 RIGHT 0 1 2 0 0 0 3 1 0 39 24 2 9 46 26 Precisi´on obtenida mediante SVM = 0.65 Tabla D.27: Resultados de la prueba 3 63 Prueba 4: P´ıxeles de lado: 100 Radio del c´ırculo: 0 Grosor de l´ınea: 3 Filtro: Ninguno Figura D.25: Capturas de los gestos: a la izquierda el gesto 1, Palma abierta, y a la derecha el gesto 2, dedo ”ok”. LEFT 0 1 2 0 0 2 1 1 1 49 14 2 0 11 60 RIGHT 0 1 2 0 0 1 2 1 0 30 34 2 0 5 66 Precisi´on obtenida mediante KNN = 0.74 LEFT 0 1 2 0 0 2 1 1 2 52 10 2 0 13 58 RIGHT 0 1 2 0 0 1 2 1 0 48 16 2 0 59 12 Precisi´on obtenida mediante SVM = 0.61 Tabla D.28: Resultados de la prueba 4 Prueba 5: P´ıxeles de lado: 100 Radio del c´ırculo: 0 Grosor de l´ınea: 3 Filtro: Gaussian Blur Figura D.26: Capturas de los gestos: a la izquierda el gesto 1, Palma abierta, y a la derecha el gesto 2, dedo ”ok”. 64 LEFT 0 1 2 0 0 3 0 1 1 59 10 2 0 12 59 RIGHT 0 1 2 0 0 3 0 1 0 52 11 2 0 15 57 Precisi´on obtenida mediante KNN = 0.82 LEFT 0 1 2 0 0 3 0 1 1 63 0 2 0 70 1 RIGHT 0 1 2 0 0 3 0 1 0 63 0 2 0 72 0 Precisi´on obtenida mediante SVM = 0.46 Tabla D.29: Resultados de la prueba 5 Prueba 6: P´ıxeles de lado: 100 Radio del c´ırculo: 0 Grosor de l´ınea: 3 Filtro: Median Blur Figura D.27: Capturas de los gestos: a la izquierda el gesto 1, Palma abierta, y a la derecha el gesto 2, dedo ”ok”. LEFT 0 1 2 0 1 1 1 1 2 35 27 2 0 7 64 RIGHT 0 1 2 0 0 3 0 1 0 39 26 2 0 9 61 Precisi´on obtenida mediante KNN = 0.72 LEFT 0 1 2 0 0 2 1 1 0 44 20 2 0 9 61 RIGHT 0 1 2 0 0 3 0 1 0 65 0 2 0 70 0 Precisi´on obtenida mediante SVM = 0.61 Tabla D.30: Resultados de la prueba 6 65 Prueba 7: P´ıxeles de lado: 150 Radio del c´ırculo: 1 Grosor de l´ınea: 2 Filtro: Ninguno Figura D.28: Capturas de los gestos: a la izquierda el gesto 1, Palma abierta, y a la derecha el gesto 2, dedo ”ok”. LEFT 0 1 2 0 1 1 1 1 1 49 14 2 0 11 60 RIGHT 0 1 2 0 0 3 0 1 0 30 33 2 0 7 65 Precisi´on obtenida mediante KNN = 0.73 LEFT 0 1 2 0 0 2 1 1 0 50 14 2 0 25 46 RIGHT 0 1 2 0 0 1 2 1 0 58 5 2 0 67 5 Precisi´on obtenida mediante SVM = 0.57 Tabla D.31: Resultados de la prueba 7 Prueba 8: P´ıxeles de lado: 150 Radio del c´ırculo: 1 Grosor de l´ınea: 2 Filtro: Gaussian Blur 66 Figura D.29: Capturas de los gestos: a la izquierda el gesto 1, Palma abierta, y a la derecha el gesto 2, dedo ”ok”. LEFT 0 1 2 0 1 2 0 1 2 52 9 2 0 11 61 RIGHT 0 1 2 0 0 3 0 1 0 53 11 2 0 14 57 Precisi´on obtenida mediante KNN = 0.81 LEFT 0 1 2 0 0 0 3 1 3 0 60 2 0 0 72 RIGHT 0 1 2 0 0 3 0 1 0 64 0 2 0 71 0 Precisi´on obtenida mediante SVM = 0.49 Tabla D.32: Resultados de la prueba 8 Prueba 9: P´ıxeles de lado: 150 Radio del c´ırculo: 1 Grosor de l´ınea: 2 Filtro: Median Blur Figura D.30: Capturas de los gestos: a la izquierda el gesto 1, Palma abierta, y a la derecha el gesto 2, dedo ”ok”. 67 LEFT 0 1 2 0 1 1 1 1 2 49 12 2 0 11 61 RIGHT 0 1 2 0 0 2 1 1 0 23 41 2 0 4 67 Precisi´on obtenida mediante KNN = 0.72 LEFT 0 1 2 0 0 2 1 1 1 54 8 2 0 12 60 RIGHT 0 1 2 0 0 1 2 1 0 50 14 2 0 64 7 Precisi´on obtenida mediante SVM = 0.61 Tabla D.39: Resultados de la prueba 15 4. Fase 4: Doble filtrado En esta prueba he utilizado las propiedades que mejor resultado han dado, es decir: P´ıxeles de lado: 100 Radio del c´ırculo: 0 Grosor de l´ınea: 2 y le he pasado en primer lugar un filtro Gaussiano y posteriormente un filtro de mediana obteniendo en este caso los mejores resultados para el caso de clasificaci´on mediante SVM. Figura D.37: Capturas de los gestos: a la izquierda el gesto 1, Palma abierta, y a la derecha el gesto 2, dedo ”ok”. 74 LEFT 0 1 2 0 0 2 1 1 1 43 20 2 0 11 60 RIGHT 0 1 2 0 0 2 1 1 0 28 35 2 0 5 67 Precisi´on obtenida mediante KNN = 0.71 LEFT 0 1 2 0 0 1 2 1 1 35 28 2 0 8 63 RIGHT 0 1 2 0 0 1 2 1 0 42 21 2 0 12 60 Precisi´on obtenida mediante SVM = 0.72 Tabla D.40: Resultados de la prueba de doble filtrado Con los resultados obtenidos en esta cuarta fase de experimentos, se ha decidido el continuar con la misma configuraci´on para el m´etodo KNN: Configuraci´on para el m´etodo KNN: - P´ıxeles de lado: 100 - Radio del c´ırculo:0 - Grosor de l´ınea: 2 - Filtro: Gaussian Blur En cambio, para el m´etodo SVM se han obtenido mejores resultados, por lo que la nueva configuraci´on ser´a: Configuraci´on para el m´etodo SVM: - Pixeles de lado: 100 - Radio del c´ırculo:0 - Grosor de l´ınea: 2 - Filtro: Gaussian Blur - Median Blur 5. Fase 5: Inserci´on de m´as muestras para la calibraci´on Tras realizar las pruebas anteriores y seleccionar el formato de imagen que nos da mejor resultado, se ha procedido a la inserci´on de m´as muestras para la calibraci´on del sistema. En las pruebas anteriores se analizaba partiendo de 50-60 muestras por gesto. En esta ocasi´on se realizar´a el an´alisis con aproximadamente 300 muestras por gesto. En la tabla D.41 observaremos que en el caso de KNN el resultado no var´ıa, en cambio en el de SVM los resultado mejoran notablemente. Estos resultados muestran que si se disponen de pocas muestras para el entrenamiento el uso del m´etodo de clasificaci´on “k-nearest neighbor” es m´as eficiente que con “Suport Vector Machine”. En cambio, si aumentamos el n´umero de muestras el resultado es similar con ambos m´etodos. 75 Figura D.38: Gestos reconocidos por el sistema: a la izquierda el gesto 1, Palma abierta, y a la derecha el gesto 2, dedo ”ok”. LEFT 0 1 2 0 0 4 0 1 0 48 8 2 0 8 34 RIGHT 0 1 2 0 0 4 0 1 0 46 9 2 0 8 34 Precisi´on obtenida mediante KNN = 0.79 LEFT 0 1 2 0 0 4 0 1 0 47 9 2 0 6 36 RIGHT 0 1 2 0 0 4 0 1 0 46 9 2 0 7 35 Precisi´on obtenida mediante SVM = 0.8 Tabla D.41: Resultados de las pruebas con 300 muestras por gesto. 76