jueves 15 de octubre de 2009

Pusepu (Nuevo enfoque)

Mostrando los avances.

Luego de un periodo de experimentación con las herramientas y con el proyecto mismo surgieron unas complicaciones algo obvias.

1º: Nunca abrimos totalmente el ojo, por lo tanto la pupila rara vez se adquiere como un circulo.
2º: El ruido en la imagen hace que se detecten falsos positivos. (Ver figura 1)
Figura 1. Falsos positivos.

La solución a este dilema es rediseñar algunas cosas en la aplicación.


Luego de adquirir la imagen, si no se determina el ROI entonces se vuelve a adquirir otra subimagen, si se detecta el ROI entonces se pasa al procesado.
Hasta ahora todo igual, pero lo que cambia es el procesado que actua como una maquina de estados finitos muy simple.


Si el estado es buscar ojo hace lo siguiente:
Se usa la transformada de Hough para reconocer círculos si se detectan se compara con el circulo que fue detectado anteriormente (Ver figura 2.). Si no se detecta un círculo o el círculo anterior no coincide con el actual se poner el timer en 0 (cero) .
Si el círculo se detecto se suma uno al timer.
Si el timer supera un tiempo máximo, entonces quiere decir que se detectó el ojo, y su tamaño y posición están determinados por el promedio de las "x","y", y radio de los círculos detectados que fueron similares.

Figura 2. Ojo detectado.

En el momento en que el timer llega al tiempo de espera se toma una "fotografía" del ojo.

En el estado de Reconocer ojo se hace un matching entre la fotografía y el ROI. Si se encuentra se procede a actualizar la posición del cursor, sino se vuelve al estado de buscando ojo.

Todavía hay que ajustar unos cuantos parámetros y optimizar el código, pero el proyecto esa cada vez más sólido.

Espero les siga siendo interesante, en cuanto lo termine publico la aplicación para que la prueben un poco.

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.

lunes 3 de agosto de 2009

Telekinetic Jazz Coreographer

Mi juego para el mini-concurso en crecimiento de CGM.

¿Bueno de que demonios trata este juego?
A partir de la siguiente historia creada al azar:

Telekinetic Jazz Coreographer

El protagonista es Michael Jackson
y su objetivo es crear

caos y confusión
en un mundo lleno de

bailarinas exóticas y hip hoppers
hay un héroe al que le gusta el jazz.

El protagonista difícilmente
puede concentrarse en sus actividades.

Los personajes son muy torpes
y son ciegos.

Había que crear un juego en el transcurso de una semana, el engendro de la naturaleza que salio fue este juego.

Si también es de plataformas (es hora de que cambie de genero no? jeje), la novedad en este juego es que como el personaje es ciego, no podes ver nada hasta que no lo toques con el jugador o con un baston para ciegos.


A la hora de incluir enemigos opté por hacerlos como minijuegos para agregarle un plus al juego, y siguiendo con esta lógica la final es un minijuego al estilo GuitarHero. Para mi sorpresa programar este nivel no fueron más que unos minutos, ya que el editor salió enseguida (aunque era muy rustico), lo que note que es muy complejo es hacer coordinar las "notas" con la música.


Como extra hay que destacar que el juego puede que no funcione correctamente segun las características de hardware y/o sorftware de la computadora. Si no funciona correctamente aparecerá un bug como el siguiente en el primer nivel:
(imagen cortesía de J-Kun):



Descarga.

Eso es todo, espero que puedan jugarlo.



GDD: El juego.

Mi pequeño juego para al concurso de adva.

Y aquí esta, GDD: El juego. ¿Pero como?¿Porque?. Cuando?

Bueno la cosa es que el 8 de junio del 2009, termine este juego para el concurso Mashup Games de adva (Recordaran la correspondiente entrada al blog Mashup games).
El genero de este juego es de puzzle-plataformas, donde el jugador deberá utilizar sus conocimientos sobre algunos juegos clásicos para poder pasar los niveles.



No es muy extenso creo que son como 5 o 6 niveles, pero lo especial de este juego era la estética particular, esta constaba de que todo gráfico incluido,incluso el icono, fue escaneado (aunque es cierto que hay dos cosas que no lo están, el que lo jugó ya sabe y el que no que lo descubra :P).

Contó con composiciones originales de Agustina Montero Dip, y la supervision musical de Christian Fernando Perucchi.

Estuve muy conforme con el resultado, y recibió algunas críticas que me gustaría destacar:

Nitram Cero (de Adva), me mando un Mp con algunos comentarios me que gustaron mucho:

# Aprovecha la dinámica de los diferentes juegos de una manera creativa para
resolver puzzles (en vez de solo usarla "porque si")
# La cantidad de niveles es la justa. Buena duración (estuve como una hora jugandolo, quizás un poco menos)
# No es tedioso de jugar, siempre te dan ganas de seguir y seguir.
# Es divertido y gracioso (tendrías que hacer bonus por comer todos los pajaritos :D)
# Tiene excelentísima música.
# Es el mas cercano a los objetivos del concurso


Frogger (de CGM):
Cita de: Pacman
"come come, come come xD"

La verdad es que cuando probe este juego me parecio genial por su concepto y estilo grafico. Ademas su diseño de niveles era variado y no se hacia repetitivo. Es una lastima que no haya ganado, pero alguno de los demás juegos participantes eran excelentes (no se aun quien habra ganado).
Lo malo es que era muuuuy corto y el final era abrupto. No creo que ya lo vayas a modificar, pero con unos cuantos niveles mas hubiera estado estupendo .



J-Kun (de CGM):

[...]
Es un poco corto, pero hubo algunos niveles que tuve que repetiar varias veces, asi que creo que eso lo compensa, algo que si me parecio raro fue el uso de la tecla ALT, ¿se te acabaron las otras teclas? no entiendo, yo le tome miedo a ALT porque antes cuando jugaba y tenia que usar ALT, eso a veces interferia con windows, como ALT+espacio, ALT+Enter, etc, y el juego se bloqueaba.... pero bueno, no paso nada.

Otro detallito muy pequeño es que cuando se pinta el nivel, se alcanza a ver el nivel completo o una parte antes, después se borra y despues se empieza a pintar ,bueno, eso pasaba al principio, despues no... seguramente se tardaba leyendo el nivel, o no se, otra cosa es que a veces mario salta doble si dejas presionado salto, es decir el sonido suena dos veces y te baja el doble la barra..... y no se pero esa sombra detrás de las cosas como que no me gusto, yo lo veia un poco raro, tal vez sin la sombra se vería mejor pero eso si es gusto personal.

Aunque todo eso son detalles, pero en general muy bueno y muy original.
[...]


Como moraleja, tambien llamado post-mortem:

  • Si eliges una estética, hay que cuidarla bien, cualquier detalle fuera se va a notar ( ej: la sombra).
  • Las teclas de la viaja escuela, ya no son bien recibidas porque están en desuso, no hay que olvidarse de ello.
  • Hay que saber conseguir un buen número de niveles, y saber cumplir una fecha a de entrega al mismo tiempo, es más complicado de lo que pensaba.
  • El final hay que cuidarlo, es como el final de una película, si esta mal logrado o es abrupto (como es el caso) no va a cerrar bien el juego.

Bueno el juego quedo 3º en la votación de Adva en español, y 2º en la votación en Ingles (eso que no estaba en ingles jeje). Capaz que si había una votación en alemán quedaba primero jaja.


Bueno eso es todo espero que lo disfruten/lo hayan disfrutado, cualquier cosa aca pueden comentar, criticar, alagar e insultar al juego (no al creador :P).

Descarga: http://www.4shared.com/account/file/111682093/ada835dd/GDD_El_juego__Compatible_con_vista_.html



jueves 2 de julio de 2009

Homenaje a los Caidos

Un recuento de lo que que quedo atrás. Que tiene probabilidades de sobrevivir y quien ya esta enterrado en lo más profundo del cementerio de proyectos abandonados.

Los nominados son (ruido de tambores):

Guglos!
El vengador.
Biby´s Puzzle.
El señor de los ladrillos.
Yiaco.
El Principe Maldito.


Los que yacen en el profundo del cementerio, mi más sentido pésame:

El señor de los ladrillos. Simplemente era un juego multijudador para pasar el rato con mi novia.

El vengador. Mucho trabajo, no me llama. Si bien tiene potencial no tengo el entusiasmo para seguirlo. Desde un principio mi objetivo era plasmar la idea y ver como quedaba.

Guglos! Paso del prototipo al celular.... y murió. Los controles no terminaban de quedar comodos y decidí sepultarlo de una buena vez.

En la cuerda floja:

El Principe Maldito. La unica razon por la que no esta en el cementerio., es porque la idea de este juego era desarrollarlo con en grupo con usuarios de CGM.

En un futuro lejano:
Biby´s Puzzle. Este juego siempre me gusto, pero le faltan algunas cosas para completarlo. El concepto tiene más para dar de sí, pero por el momento no tengo ganas ni tiempo de seguirlo.

En un futuro cercano

Yiaco! Este cuatrimestre curse Procesamiento de imagen y sonido, y mi alocada idea es aprovechar estos conocimientos y volcarlos a visión aritificial...¿Todo esto para que?
Para lograr detectar el rostro de una persona y su expresión, la idea es que el personaje se mueva si inclinamos la cabeza, y que salga propulsado si ponemos cara de hacer fuerza Buceen en mi blog para más información.