Método Propuesto Índice de esta sección Introducción .................................................................................................................................... 1 Procesamiento de Imágenes ............................................................................................................ 2 Adquisición de la Imagen ................................................................................................................3 Características de la Captura ............................................................................................................ 4 Características de la Mano ............................................................................................................... 5 Compresión .......................................................................................................................................6 Segmentación....................................................................................................................................8 Reconocimiento de objetos .............................................................................................................12 Proceso general de reconocimiento de objetos .............................................................................. 12 Modelo de Red Neuronal Utilizado ............................................................................................... 13 Entrenamiento de la red neuronal .................................................................................................. 16 Post-Procesamiento ........................................................................................................................17 Reconocimientos de Gestos ........................................................................................................... 18 Bibliografía..................................................................................................................................... 19 Introducción En esta sección se describirá la solución propuesta hacia la problemática planteada en la sección anterior. En primer lugar se definirá el procesamiento de imágenes llevado a cabo, las distintas etapas que el mismo comprende y como se resolvió cada una de estas. En segundo lugar se explicará el proceso de reconocimiento de gestos, el cual tiene como entrada la información resultante del procesamiento de las imágenes obtenidas utilizando una WebCam. Procesamiento de Imágenes Como todo procesamiento, el procesamiento de imágenes se conforma de una serie de etapas fundamentales que pueden apreciarse en la siguiente figura. Cada procesamiento de imágenes que resolverá un problema específico ajusta el número de etapas de acuerdo al resultado que se pretende lograr. <<PONER UN EJEMPLO>> En el trabajo propuesto, las etapas coloreadas en la figura siguiente son las que se debieron implementar con el objetivo de alcanzar los resultados esperados: La figura anterior muestra la existencia de una “Base de Conocimiento” , la cual almacenará diferente información dependiendo de la existencia o no de algunas de las etapas y de sus respectivos requisitos para funcionar de la manera deseada. No existen, por lo tanto, restricciones generales para este componente ya que simplemente podría indicar el área de interés dentro de una imagen. En este trabajo, dicha base se utiliza como la unidad central que administrará el orden de las etapas, permitiendo, de esta manera, sincronizar la salida de cada una de estas con la entrada de su sucesora. A continuación se realizará una explicación al detalle de cada una de las etapas implementadas, describiendo como se llevaron a cabo y cuales técnicas o herramientas se utilizaron para esto. Adquisición de la Imagen Para poder llevar a cabo la captura de imágenes se utilizó la librería OpenCV1. Esta librería permite la interacción con un dispositivo de captura, como una webcam, mediante la invocación a funciones de alto nivel escritas en lenguaje C. Una de sus principales características ofrecidas es la capacidad de obtener imágenes provenientes de estos tipos de periféricos. 1 Open Computer Vision Library (BSD License, Intel) Básicamente el proceso de captura se basa en solicitar frames contínuamente cerciorándose previamente que el dispositivo de captura esté todavía disponible. Por lo tanto, antes de proceder a la solicitud de la próxima imagen, se verifica que la cámara se encuentre en ese estado. Mientras que este proceso puede parecer complejo, gracias al alto nivel de abstracción que provee la librería en cuestión se vuelve sumamente sencillo, tal como lo muestra el siguiente código: Si bien esta librería facilita la obtención de los frames provenientes de la cámara que se seleccione independizando al sistema de las características de los drivers correspondientes, hace falta definir las características de la captura, como son: Ubicación de la cámara respecto de la superficie en la que se desplazará la mano (Zona de Trackeo) Características de la zona de trackeo. Características de la mano a ser reconocida. Cada una de estas se describe en la siguiente sub-sección. Características de la Captura En primer lugar, la captura del stream de video debe realizarse respetando las siguientes restricciones: Resolución: 320 x 240 Pixels. Modelo de color: RGB (Red – Green – Blue). Frecuencia de captura: 25 fps (frames por segundo) En caso que la configuración de la cámara no respete estos parámetros, la aplicación forzará al dispositivo a responder según estos valores mientras la aplicación se encuentre en ejecución, sin necesidad de la intervención del usuario. En segundo lugar, se describen los requisitos necesarios para que la zona de trackeo sea la indicada: Espacio físico: Superficie plana. Color: Diferente al color piel. En lo posible, el que genere mayor contraste (Azul, blanco, entre otros). Posición: Vertical u horizontal. Se recomienda mesa o escritorio de trabajo, sin obstáculos o elementos que generen ruido para el proceso de reconocimiento de la mano. En tercer lugar, se detallan las recomendaciones en cuanto a la posición de la cámara web: Ubicación: Sobre el vector perpendicular a la zona de trackeo. Se recomienda sobre la superficie. Visión: Visualizar la zona de trackeo en su totalidad. La siguiente figura ilustra el escenario descrito anteriormente: (Figura de la cámara en vertical y bla bla bla) Cabe destacar que las restricciones planteadas son no mandatorias, ya que el método que se propone es capaz de trabajar correctamente ante variaciones en el ángulo generado entre la cámara y la zona de trackeo, así también como con variaciones en la distancia existente entre estas. Esta capacidad es una de las más interesantes de este trabajo y es descrita en mayor detalle más adelante en este capítulo. Características de la Mano Como en todo sistema de tracking, existen restricciones sobre el objeto a seguir. En este caso, dado que se trata de un proyecto basado en el seguimiento de la mano, las restricciones se aplican sobre la misma. <<EXPLICAR LOS TIPOS DE RESTRICCIONES EN EL ARCHIVO QUE PASÉ LA OTRA VEZ>> Tal como se ideó inicialmente, se desea evitar todo tipo de pre-condiciones que puedan incomodar la utilización del aplicativo. De todas maneras, si bien en este proyecto no existen limitaciones impuestas sobre el color de la mano y condiciones de luminosidad existente, la única restricción impuesta se refiere a situar la mano sobre la zona de trackeo y cubrir el resto del brazo, tal como se haría con una prenda de mangas largas. Esta situación se ilustra en la figura siguiente. <<IMAGEN DE ESTO>> Como se explicará más adelante en este capítulo, se utilizó una red neuronal artificial para el reconocimiento de la posición de la mano. Por lo tanto, la restricción mencionada anteriormente se acarrea desde el entrenamiento, donde se utilizaron imágenes en las cuales el brazo se encontraba cubierto. De esta manera, el único objeto de color piel aparente en la imagen debe ser la mano. Durante el entrenamiento se utilizó un filtro de piel con el objetivo de introducir a la red patrones bien distinguidos. Es por esto que si el usuario no procede a cubrir su brazo, la entrada a la red representará un patrón totalmente diferente a los del conjunto de entrenamiento, y no se podrá determinar correctamente la posición de la mano. Compresión Luego de obtener un frame desde la cámara web, surge la necesidad de reducirse su tamaño. Esta actividad debe desarrollarse en este momento ya que las etapas que restan, se encuentran limitadas respecto a la tasa de datos que pueden procesar y adicionalmente se asegura la no perdida de información. La principal limitación existe en la técnica utilizada en la etapa de segmentación y reconocimientos de objetos. Este paso tiene como restricción el tamaño de la entrada, es decir, la resolución del frame que procesará. Cabe aclarar que se persigue el propósito de ejecutar el procesamiento en tiempo real, y en este caso el tiempo de ejecución depende proporcionalmente del tamaño de la imagen trabajada. Para obtener una idea más precisa del problema, y de la relevancia de esta etapa, se deben tener en cuenta los siguientes valores: La adquisición de la imagen se realiza en una resolución de 320 * 240 pixeles, donde cada uno de estos se conforma de 3 valores entre 0 y 255 que se corresponden con los distintos canales RGB. De esta manera, se procesan 230400 (320 pixeles * 240 pixeles * 3 canales) elementos por frame. Evidentemente, este es un valor muy alto de elementos para procesar dados los resultados que se quieren obtener. De esta manera, se intenta obtener una imagen con una cantidad de pixeles que oscile alrededor de los 5000 y que aún posea las características buscadas por el procesamiento. Esta cantidad podrá ser procesada sin inconvenientes por las etapas siguientes. (CAPAZ QUE TENEMOS QUE PONER DE DONDE SACAMOS ESTE VALOR!!!<.ALGUNA TABLA CON VALORES DE TIEMPOS QUE TARDA LA RED EN PROCESAR) SISI VA UN PÁRRAFO Y UNA EXPLICACIÓN!!! (porque arriba se hace referencia). Analizando la resolución de la imagen de entrada, y teniendo en mente la cantidad de elementos que se busca, se optó por reducir proporcionalmente el tamaño del frame en un factor de 4. Por lo tanto la salida de esta etapa será una imagen de 80x60, determinando así 4800 pixeles. Para llevar a cabo esta reducción, denominada downsampling, se utilizo nuevamente la librería OpenCV y una de sus funciones de procesamiento de frames. Esta función recibe el nombre de cvPyrDown. La misma efectúa una reducción del frame excluyendo columnas y filas de la matriz que representa al frame. En la siguiente imagen se puede observar el comportamiento de esta función. Como se puede observar, el tamaño del frame resultante del proceso es 2 veces menor que el tamaño del frame original. Como se mencionó anteriormente, se busca reducir en un factor de 4 el tamaño del frame. Para lograr esto se aplica la función de downsampling dos veces consecutivas, logrando el factor de compresión deseado. Segmentación El procesamiento realizado requiere la distinción entre el color de la piel y el resto de la imagen, por lo que en esta etapa se busca obtener como salida una imagen en la que se distingan notoriamente los pixeles de color piel. Básicamente, la entrada de esta etapa es el frame en RGB obtenido de la etapa anterior, en donde se redujo el tamaño de la imagen original, mientras que la salida es una imagen con el mismo tamaño pero graficada en un espacio de color binario. Esto significa que los pixeles que corresponden al color piel en el frame de entrada serán representados con el color blanco, mientras que los pixeles restantes lo harán con el color negro. Esta idea se encuentra avalada por distintos conceptos acerca de detección de la piel. En el trabajo Skin Detection - a Short Tutorial [1] se detallan las ventajas y desventajas de utilizar diferentes estrategias para su resolución. De este mismo trabajo se conoce que la idea principal de un detector de piel se divide en dos etapas. En primer lugar se debe seleccionar un espacio de color adecuado convirtiendo cada pixel de la imagen original a ese espacio de color. Existen distintos tipos de espacio de color: YUV, YIQ, HSV, CIE-XYZ, RGB, entre otros. RGB es el espacio de color más conocido y utilizado en procesamiento de imágenes por su simplicidad. Sin embargo a la hora de intentar la detección de piel posee una gran desventaja: En RGB no se percibe uniformemente el color de piel. Esto significa que las distancias entre colores en el espacio de color RGB no se corresponden con distancias lineales en la percepción humana. Adicionalmente los componentes R, G y B se encuentran altamente correlacionados, lo que indica que no es posible obtener fácilmente la luminosidad de un pixel (componente que afectará la clasificación en gran medida). En segundo lugar, se utiliza un clasificador de piel para determinar por cada pixel si se trata de uno de color piel o no. Este clasificador hace uso de una base de entrenamiento para poder describir correctamente el contenido de un pixel. Dicha base, en general, se define como un conjunto de pixeles del color pretendido, graficados utilizando variados tonos de color y obtenidos bajo diferentes condiciones de luz. Luego, utilizando estos, se determinan las características de los pixeles y se obtiene una condición uniforme que será utilizada a la hora de clasificar las imágenes. Tal como es de esperar, el espacio de color seleccionado afecta directamente al clasificador, ya que se debe utilizar un modelo de color que permita la distinción de pixeles sin verse afectado por las distintas condiciones de luminosidad presentadas durante la captura de la imágen. Por lo tanto, se debe obtener un espacio de color que facilite la construcción de un clasificador. En el trabajo de Forsyth and Fleck [2] se afirma que el color de la piel humana se encuentra en un rango restringido de Hue2 y que a su vez no es saturada en profundidad. Esto puede determinarse debido a que la pigmentación de la piel se conforma de la sangre que fluye a través de ella y de su principal pigmento: La melanina, un pigmento de color pardo oscuro formado por células (melanocitos) distribuidas entre las demás células de la epidermis. Adicionalmente, y basado en el trabajo de Shin et al. [3] y Albiol et al. [4], se requiere poder discriminar la luminosidad fácilmente. Por estos motivos se ha seleccionado un espacio de color diferente: HSV. Este modelo posee tres componentes, H (Hue, Tonalidad), S (Saturation, Saturación) y V (Value, Brillo). El proceso desarrollado, lleva a descartar el tercero de los componentes V (Brillo) para reducir el efecto de la luminosidad y magnificar los restantes a fin de tener en cuenta solo los dos primeros a la hora de clasificar un pixel. En resumen, en esta etapa se realiza el siguiente proceso: Conversión de color: Transformación del frame original en RGB a imagen en HSV. Clasificación: Por cada pixel del frame se determina si los valores de Hue y Saturation se encuentran dentro del rango establecido para pixeles de color piel. 2 Tonalidad: Es uno de los canales principales, en el modelo de color HSV. Reducción a binario: Si el pixel es clasificado como piel, se asignará el color blanco en la posición correspondiente de la imagen resultante. De lo contrario, el color negro es asignado. El primero de los pasos mencionados se realiza mediante una transformación no lineal, ya que el espacio de color HSV y sus variantes (entre ellas HSI3) son deformaciones del Cubo de Color de Espacio RGB4. Para esta transformación se utilizo una de las funciones de la librería OpenCV mencionada anteriormente. En la siguiente imagen muestra la relación entre HSV y RGB, a modo de visualizar la transformación no lineal mencionada en el párrafo anterior.: <<IMAGEN Y ALGO QUE LA EXPLIQUEN>> Para poder encontrar los valores correctos de Tonalidad y Saturación es necesaria la utilización de una imagen que a partir de ahora se denominará Máscara de Piel. La Máscara de Piel que se ha utilizado para este proyecto se muestra en la siguiente figura: En esta imagen se pueden observar distintos tonos de piel, bajo diferentes condiciones de luz. Esta base se encuentra disponible en el sitio de internet donde se describe el trabajo de Jeremiah Still [5]. 3 Hue, Saturation, Intensity – Tonalidad, Saturación, Intensidad. 4 El espacio RGB se suele representar como un cubo en el que cada eje perpendicular corresponde a un canal. Dado que uno de los principales propósitos de este trabajo es que funcione correctamente en tiempo real, la clasificación de pixeles debe cumplir con esta imposición. Es por esto que los valores promedios de Tonalidad y Saturación de la base de entrenamiento se calculan al comienzo de la ejecución de la aplicación. Los valores de Hue y Saturation calculados en la máscara anterior son los siguientes: Adicionalmente se define un DeltaSkin ∆, que representa la zona considerada color piel alrededor de los valores promedios. Para esta aplicación se seleccionó un delta con valor 42, el cual fue obtenido mediante prueba y error, ya que no existe un método formal para su determinación. De esta manera el rango de Hue y Saturation para el cual se considera que un pixel es color piel es: La siguiente tabla muestra valores de DeltaSkin testeados junto con imágenes de color piel, que son rechazadas debido a que los valores de H y S no pertenecen a la región delimitada por el umbral en cuestión. <<TABLA>> Estos valores visualizados en la tabla anterior fueron los que permitieron determinar correctamente el valor de DeltaSkin. A modo de ejemplo, se muestran algunos frames segmentados por el proceso descrito anteriormente: Reconocimiento de objetos Conceptualmente, el objetivo de esta última etapa es: Dado un frame de 80 * 60 pixeles modelado en un espacio de color binario (pixeles blancos y negros), determinar las coordenadas del centro geométrico de la mano. Existen distintos tipos de técnicas de reconocimiento de objetos, entre ellas los métodos basados en decisiones teóricas y los métodos estructurales. En este trabajo se opto por la utilización de una Red Neuronal Artificial5, que se ubica entre los métodos basados en decisiones teóricas, para analizar el frame de entrada y determinar la posición de la mano en el mismo. La elección de utilizar una red neuronal para el reconocimiento de la mano se debió a la capacidad de este modelo para trabajar con patrones de entrada desconocidos. Más precisamente el modelo de red neuronal utilizado puede determinar la posición de la mano dentro de una imagen sin antes haber observado la mano en esa posición. Esto lleva a obtener un sistema 5 Ver Anexo A para más información sobre Redes Neuronales robusto, capaz de procesar distintos tipos de imágenes y determinar exitosamente la posición de la mano. Para organizar de manera correcta la lectura de esta sección, se describirá en primer lugar el proceso general de reconocimiento y los componentes que este involucra. En segundo lugar se detallará el componente principal: La red neuronal con sus características. Proceso general de reconocimiento de objetos El proceso de reconocimiento de objetos puede apreciarse en la siguiente figura: Como se observa, la entrada se transforma a un vector columna binario de 4800 elementos, que luego ingresará a la red neuronal para procesarla detectando la mano. Finalmente, la red dará como resultado las dos coordenadas del centro geométrico de la mano la imagen. Modelo de Red Neuronal Utilizado Existen variados modelos de redes neuronales: Asociadores de patrones, redes competitivas, entre otras. Las diferencias principales que existen entre ellas son los problemas que cada una puede resolver. Por ejemplo una red de tipo asociadora de patrones puede mapear patrones de entrada con otros de salida mediante un entrenamiento supervisado adecuado. Por otra parte, las redes de tipo competitivas intentan clasificar un patrón de entrada sin ningún tipo de supervisación durante la fase de entrenamiento. Adicionalmente, las redes se pueden clasificar según el patrón de conexión que presenta la red, el tipo de aprendizaje de la que pueden ser capaces o la naturaleza de los datos de entrada (contínuos o discretos). Cada tipo de red puede resolver un problema en concreto y se debe seleccionar la red que más se ajusta al problema que se intenta resolver. El reconocimiento de objetos en este trabajo se realizó utilizando una red Backpropagation, clasificada dentro de las redes asociadoras y con entrenamiento supervisado de dos fases6. En caso de necesitar una previa introducción a la técnica de redes neuronales, se recomienda consultar el apéndice A al final de este trabajo. Por lo pronto, en este capítulo, se detallarán los diferentes parámetros que se han utilizado para la configuración de la red. La topología de la red utilizada es de tipo multicapa. Esta clase de redes se conforma de una capa de entrada, una de salida y otras denominadas ocultas. Las capas de entrada y salida están definidas por el problema a resolver, por lo que el número de neuronas que poseerá cada una de ellas no requiere específicamente de un análisis profundo. En el caso de la primera de las capas, se tienen 4800 neuronas, correspondiéndose cada una de estas a un componente del vector columna creado al inicio de esta fase. Por otro lado la capa de salida posee solo dos neuronas, correspondientes a las coordenadas X e Y que representan la mano dentro del frame. Sin embargo, mientras que el número de neuronas de las capas de entrada y salida se pueden determinar fácilmente, las capas intermedias no corren la misma suerte. En este proyecto en particular, la capa intermedia es única. Tal como se demuestra en (PONER REFERENCIA) no existe un método formal para determinar el número de neuronas que debe contener una capa intermedia de un modelo neuronal. Por lo tanto, este valor debe ser obtenido mediante prueba y error. Una buena estrategia, que fue la que se utilizó en este trabajo, es analizar proyectos que resuelvan problemas similares y comenzar a realizar las pruebas desde un número promedio de neuronas. Algunos de los trabajos consultados son (PODEMOS PONER TRABAJOS SIMILARES!!!) Debido a los cálculos realizados, el número de neuronas con el que se efectuaron las pruebas fue en el rango (50,80), incrementando en cada prueba en 5 la cantidad de neuronas. Se configuraron distintas redes neuronales con esas cantidades, se entrenaron (con el mismo set de imágenes) y se compararon los errores obtenidos.La siguiente tabla resume los resultados obtenidos: <<TABLA!>> 6 Ver el anexo A para más información. Como se observa, el mejor resultado se obtuvo utilizando una red neuronal con una capa intermedia de 70 neuronas. Esta configuración obtuvo el menor de los errores y a su vez dentro del rango de errores aceptables por la problemática7. Por lo tanto el modelo a utilizar es el siguiente: Como en todo modelo neuronal de este tipo, existen otros parámetros a determinar: Las funciones de transferencia a utilizar en cada capa es uno de ellos. Por un lado, considerando que la red debe entregar dos valores, uno en el rango [0,80] correspondiente a la coordenada horizontal y el otro en entre [0,60] correspondiente a la coordenada vertical, debe albergar en cada neurona de salida una función lineal. Por otro lado, y considerando trabajos similares, se optó por una función sigmoidea para cada una de las neuronas de la capa intermedia. Esta función es la más utilizada y posee un buen nivel de convergencia8.. (PONER PORQUE ES ESTA FUNCION!!!! con algún gráfico y algo de eso). 7 El término “error aceptable” se definirá con más detalle en la sección de entrenamiento de la red 8 Descrito en mayor detalle en el anexo A. En conclusión, el modelo neuronal propuesto es de naturaleza sencilla, y posee las características adecuadas para cumplir la tarea de reconocimiento de la mano adecuadamente. Más aún, una de las ventajas de este modelo, la cual se estudiará en las secciones siguientes, es la velocidad de procesamiento de un frame. Esta cualidad es ideal para no alejarse del objetivo planteado acerca del procesamiento en tiempo real. Si bien un cuestionamiento válido es que el error que se logra puede ser mejorable, la velocidad con la que un frame es procesado permite un procesamiento en tiempo real. La implementación de la red neuronal artificial, se llevó a cabo utilizando una librería llamada FANN9, la cual provee la funcionalidad suficiente para la creación una red, su entrenamiento y ejecución. Más información acerca de esta librería puede encontrarse en el apéndice C. Entrenamiento de la red neuronal Existen dos etapas fundamentales a la hora de querer utilizar una red neuronal para resolver un problema en particular: El primero de ellos es el entrenamiento de la red, mientras que el segundo se refiere a la ejecución misma. El entrenamiento de la red se realiza fuera de línea (cuando el proyecto no está en ejecución), utilizando un conjunto de imágenes cuidadosamente seleccionado que debe cumplir con las siguientes características: <<CARACTERÍSTICAS>> Generalmente, solo se utiliza un 6/7 de ese conjunto para entrenar, mientras que el 1/7 restante es necesario para el testeo de la red. Durante este proceso supervisado la red se adapta al conjunto de entrenamiento autodeterminando los parámetros de cada una de sus neuronas. En cambio, mientras la red esté ejecutándose, no sufrirá modificaciones en su estructura. Se podría pensar que a mayor volumen de información utilizado para el entrenamiento, la salida de la red mejoraría notoriamente. Sin embargo, existe un problema importante durante este proceso que se denomina “Sobre-generalización”. Este fenómeno ocurre cuando el conjunto de entrenamiento es muy extenso y al entrenar la red, esta pierde la capacidad de generalizar nuevos 9 FANN – Fast Artificial Neuronal Network Library casos debido a que <<EXPLICAR>>. También sería un error considerar que poca información haría a la red funcinoar correctamente. Por el contrario, si el conjunto de entrenamiento es demasiado pequeño, la red no logrará adaptarse al problema, por lo que no generalizará ningún caso desconocido correctamente. Al entrenar una red, dos parámetros son importantes: El algoritmo de entrenamiento y la función que determinará si el entrenamiento puede darse como finalizado. En este trabajo, el algoritmo de entrenamiento que se utilizó fue QuickProp, el cual es una variabte mejorada del algoritmo BackPropagation. Ambos algoritmos se describen en el apéndice A. En cuanto a la elección de la función que determina si el entrenamiento debe detenerse, se optó por la función MSE10. La misma tiene como objetivo cuantificar que tan lejos se encuentra un valor calculado del real. LO QUE SIGUE Y HASTA POST-PROCESAMIENTO NO VA ACÁ IGUAL COMPLETAR Para realizar el entrenamiento de la red utilizada en este proyecto, se seleccionó un conjunto de 649 casos. De esta base, 556 fueron utilizados para la etapa de entrenamiento, mientras los 93 restantes lo fueron para realizar el testeo de la red. <<hablar algo de estos números, porque 649, si hubo pruebas fallidas>>. El entrenamiento de la red consumió un total de 1112 segundos (18,5 minutos) en un procesador dedicado. Durante este proceso, se utilizaron 1200 épocas11 y el error que se logró fue de 2,5 pixeles. Esto significa que cuando la red procesa un frame, la posición del centro geométrico de la mano puede estar desviada en 2,5 pixeles, ya sea de manera vertical u horizontal. El siguiente gráfico muestra, dada una imagen, el espacio donde la red informará que se encuentra la mano. <<Una foto de la mano con un círculo o algo donde podría estar la salida de la red>> 10 Medium Square Error 11 Época – es una iteración en la cual la red procesa todo el conjunto de entrenamiento y actualiza sus pesos El siguiente grafico detalla el error a través de las épocas. (GRAFICO!!!!!!!!!!) (ANALISIS DEL GRAFICO!!!!!!!!!!!!!!) Post-Procesamiento Luego del procesamiento descrito anteriormente, del cual se obtienen las coordenadas del centro de la mano, es necesario un proceso denominado Post-Procesamiento. Debido a que una de las aplicaciones principales de este proyecto es la simulación del movimiento del mouse mediante los desplazamientos de la mano, y considerando que la salida de la red es muy pequeña en comparación a la resolución que el usuario está utilizando en su ordenador, existe una limitación que debe ser tratada correctamente. Si se intentara mapear directamente la salida de la red neuronal a la posición en la pantalla correspondiente a ese punto, se observaría una vibración irregular donde el puntero debería mostrarse, lo cual dificultaría el uso esperado. La solución propuesta a este problema es realizar un procesamiento de suavizado de la salida. Para comprender mejor este problema, se muestran los siguientes gráficos donde se observa una secuencia de posiciones que describen un movimiento circular y las respectivas posiciones sin aplicar el algoritmo de suavizado y aplicándolo. (ANALISIS DEL GRAFICO!!!) Para poder obtener el efecto de suavizado, el cual permite una salida sin variaciones importantes, se utilizo un filtro pasa bajos. Este tipo de filtros eliminan los picos de frecuencia en una señal, logrando que la salida sea uniforme. Si bien existen distintas clases de estos filtros, en este trabajo se utilizo una variante conocida como “Exponential Smoothing”. Básicamente la salida de un tiempo t1 a un tiempo t2 es proporcional a la diferencia entre la salida previa y la entrada actual. La siguiente notación intenta aclarar este concepto. Como consecuencia, si el parámetro α es pequeño, la salida tendrá más inercia, lo que significa que dicha salida (Yi) responderá lentamente a un cambio en los valores de entrada (Xi), continuando con el movimiento que venían trayendo las coordenadas anteriores. Reconocimientos de Gestos ACA VA TU PARTE MAN!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Bibliografía [1] Skin Detection - a Short Tutorial. Elgammal et. Al [2] Finding naked people. In: Proceedings of the European Conference on Computer Vision (ECCV). (1996) 593–602. Fleck, M.M., Forsyth, D.A., Bregler, C [3] Does colorspace transformation make any difference on skin detection? In: WACV ’02: Proceedings of the Sixth IEEEWorkshop on Applications of Computer Vision, Washington, DC, USA, IEEE Computer Society (2002) 275. Shin, M.C., Chang, K.I., Tsap, L.V. [4] Optimum color spaces for skin detection. In: Proceedings of the International Conference on Image Processing (ICIP). (2001) I: 122–124. Albiol, A., Torres, L., Delp, E [5] Matlab Scripts - http://www.urwelcome.us/Jstill/Matlab/