domingo 20 de septiembre de 2009

PuSePu (debo cambiarle el nombre)

Implementando a poco.
Figura 1. (si eso soy yo, guarden sus comentario, gracias :P)


Como se puede ver en la figura 1, la implementación llega hasta la fase de pre-procesado, aunque faltan ajustar algunos parámetros de los filtros.
En la imagen más grande se puede ver como el modulo de OpenCV detecta el rostro, marcado en rojo. Esto determina un primer ROI (Area de interes) que es refinado , el rostro se divide en 4 partes, y se toma el segundo cuarto que representan los ojos y las cejas (figura 2.).



Figura 2. ROI ajustado.

Luego esa imagen es filtrada con un filtro de difuminado gausiano y se pasa a escala de grises (figura 3.)

Figura 3. Filtro smoothing y escala de grises.

En el ultimo paso se aplica un filtro para la detección de bordes, en este caso Canny, y se obtiene la imagen de la figura 4.
Figura 4. bordes con filtro Canny.

Como se puede apreciar en esta última imagen, todavía falta reducir aún más el ruido que tiene la imagen ya que el ROI quedo perfectamente determinado en todas las pruebas.

El próximo paso es la detección de los círculos (el iris y la pupila).



miércoles 16 de septiembre de 2009

Puntero Por Seguimieno de Pupila (PuSePu)

Diseñando el software.

Luego de una fase de experimentación y de repasar conceptos, esto es lo que hay que hacer para lograr mover el mouse con los ojos (o al menos eso parece).

0 - Pre-adquisición: Preparar la cámara web, obtener una iluminación mínima, y localizar al usuario a una distancia razonable. Los parámetros reales de a que distancia, cual es la iluminación óptima etc... se conocerán al finalizar el proyecto, y luego de una ardua tarea de depuración.

1: Adquisición de la imagen. Obetner la imagen desde la cámara web hacia el programa. Si bien son dos o tres lineas de código, conceptualmente es importante destacarlo.

2: Determinar el área de interés: Aprovechando un algoritmo que provee openCV para la detección de rostros, se puede reducir el ROI (Área de interés) a la cabeza, y luego de sacar algunas medidas determinar aún mejor en proporción al tamaño de la cabeza la seccion de la cara donde estan los ojos, para reducir más la ROI y al mismo tiempo reducir falsos positivos en la detección de circulos, como pueden ser los orificios nasales.

3: Preprocesado: En esta fase se prepara la imagen con la que se va a trabajar. Se debe convertir la imagen a escala de grises para facilitar la implementación. Se debe suavizar la imagen adquirida para reducir el nivel de ruido de la imagen, y detectar bordes para reducir la cantidad de puntos que deberá verificar la transformada de Hough.

4: Procesado: Se aplica la transformada de Hough y se obtienen los círculos. Posteriormente se realizará un trakcing para determinar el movimiento del cursor.

5: A partir de la posición anterior y otros cálculos aún no definidos se actualiza la posición del cursor.

Todavía quedan algunos cabos sueltos en el diseño, pero se irán refinando a medida de se adquiera conocimientos sobre el tema y el proyecto en sí.

Los mantendré al tanto, estas entradas tiene un doble objetivo: obligarme a documentar el proyecto, y obtener feedback de parte de ustedes, y en lo posible ayudar a alguien en un futuro que se encuentre en fase de experimentación con este apasionante mundo de Procesado de imágenes digitales.

Un saludo.

Mouse ocular (Proyecto de OpenCV)


Proyecto de DIP (digital image procesing)

Para el final de Procesamiento de Imagen y Sonido tenia que idear algún proyecto... primero y sin mucha idea de como manejarme con OpenCV pensaba en crear un sistema que reconozca rostros y que reconozca de quien es el rostro, pero rápidamente vi los inconvenientes:
  • Reconocimiento de rostro es una tarea compleja y ya estaba hecha ya al alcance.
  • Para reconocer un rostro por correlación tendría un costo computacional que no era aceptable para tiempo real, ya que tendría que leer varios bmp. La solución a esto era crear descriptores, pero no es viable para el tiempo que me queda para realizar el proyecto.
Un tiempo en stand by, y por casualidades de la vida vi la película: La escafandra y la mariposa.
Esta trata de un escritor/periodista que sufre repentinamente de un ataque de embolia masiva, lo que deja por resultado que él no se pueda mover, y lo unico que tiene control de su cuerpo es sobre uno de sus ojos. Una doctora le enseña un desesperante pero eficaz metodo de comunicacion por el medio del cual el protagonista puede dictarle a travez de giños.

El sistema en si es el siguiente, una persona dice en voz alta y mirando atentamente al usuario (vayamoslo pasando a terminos de sistemas) todo el abecedario ordenado bajo un cirterio que pone primero las letras más utilizadas. El usuario cierra el/los ojos en la letra que desea y tres guiños para un espacio.

Como pueden ver, este método es totalmente desesperante ya que requiere de mucha paciencia de las dos partes, más aún si se considera que el protagonista escribe un libro.

Esto no termina aca, sino que la pelicula esta basada en una novela autobiográfica del mismo Jean Dominique Bauby.

Ya podrán ver a donde apunta esto, sería altamente deseable un sistema automatizado que reemplaze al sistema ya mencionado.

A primer momento se podría pensar en toda una aplicación integrada que ayude a escribir pero... sería aún mejor desarrollar un sistema que permita mover el puntero del mouse con la vista, ya que le permitira al usuario no solo escribir, sino tambien, navegar por internet y hasta incluso jugar un videojuego (para notar el extremo de interactividad que se podría lograr)

Dadas las características de openCV, y de la tecnología que tengo disponible este proyecto resulta altamente viable, y se puede lograr sin necesidad de hardware especial. Es decir necesitamos solo una webcam, y de una PC.

Este proyecto no resulta solamente viable para mi final de PIyS sino tambíen para implementarlo en situaciones reales y con un presupuesto muy bajo.

Eso es todo por ahora, las proximas entradas trataran sobre aspectos tecnicos del desarrollo del mismo sistema que recibe por ahora el improvisado y horrible nombre de Mouse Ocular.

Espero les resulte interesante, Un saludo.