Tag Archive for 'maestria'Page 2 of 4

Lo que realmente hago en Grenoble

Muchos posts de que me voy de paseo, de que el ski, el snowboard y hasta post que hablan de los vagos. Pero nada acerca de lo que realmente estoy haciendo en Grenoble.

Vine a Grenoble a terminar mi tesis de maestri, en rastreo y deteccion de objetos de color. Ademas de esos objetos obtengo la posicion 3D a partir del tamano. De esa manera evito usar 2 camaras (vision stereo). Todo lo hago con una unica camara Web.

Antes yo usaba CAMSHIFT para hacer el rastreo, pero era poco robusto, y se perdia mucho en movimientos bruscos. Ahora uso BOF.

En el video se puede ver la diferencia CAMSHIFT en Naranja y BOF en Rojo. Camshift se pierde a cada rato, pero BOF es muy robusto. BOF incluso se recupera cuando el objeto sale del cuadro y entra en otro lugar; Camshift de plano solo se recupera si le ayudan y a veces ni asi. La mejora es mucha, y espero tener buenos resultados para mi tesis.

Dia 01: Grenoble Desde La Bastilla

Dia 01: Grenoble Desde La Bastilla, originally uploaded by desertzarzamora.

No es mi primer dia en Grenoble pero si el Dia 01 que tomo fotos, asi ire numerando las fotos y los dias.

Llegue y practicamente no dormi en el avion Mexico DF-Lyon con escala en Paris. El Avion salio del DF a las 3pm y para las 10pm hora de Mexico estaban sirviendo el desayuno, y es que la hora de Francia se acercaba a laz 5am y estabamos proximos a aterrizar en Paris. Asi que cuando llegue a Paris era temprano por la manana y tuve que esperar mi vuelo de conexion a Lyon, eran las 3am de Mexico pero alla ya era de dia.Y llegue a Lyon y aun tuve que tomar un autobus a Grenoble, pero en cuanto sali a tomarlo senti el frio estremecedor, comence a pensar que me la iba a pasar muy muy mal con tanto frio.El autobus tomo alrededor de 1 hora a Grenoble, no se bien pues logre dormitar un rato, pero cuando llegue a Grenoble ahora si estaba perdido, tenia indicaciones de llegar a un hotel pero cuando llegue no tenia reservacion y me mandaron a otro. Camine por ahi con mi maleta, que por suerte es pequena pues bien dice el refran que todo cabe en un jarrito sabiendolo acomodar y yo siempre he podido hacer maletas pequenas donde cabe mucho.En Grenoble no hacia tanto frio, hace algo similar a Puebla de noche, o a Sta Clara en diciembre. La gente dice que este invierno en particular ha sido caluroso y teme que sean efectos del calentamiento global.Blablablabla… pasaron muchas cosas y luego el Dr Juan Manuel ofrecio que me quedara en su casa un par de dias en lo que encointraba lugar, lo cual hice. Se ha portado super buena onda conmigo.Entonces el pasado sabado me invito con su familia, Miriam su esposa y Juan Manuel Jr., su hijo a ir a La Bastilla de Grenoble, que no es la famosa Bastilla de la toma de La Bastilla sino otra Bastilla. Ahi arriba hacia mucho mas frio que en Grenoble, pero aun asi tolerable. Para el dia que fue tomada esta foto yo ya estaba bien adaptado al nuevo horario GMT+1 (Mexico centro es GMT-6, asi que aca son 7horas mas adelante).Y bueno, hoy Domingo sali a explorar y a tomar algunas fotos, espero subirlas pronto a mi cuenta de Flickr.En la foto se puede ver la cadena “La Chaîne de Belledone” y muchos de los picos tienen nombre pero obviamente no se me han grabado. El cementerio se ve en la esquina inferior izquierda, en la otra esquinq el rio Isère que mas adelante y fuera de cuadro se une al rio Drac (por ahi en la union de los rios esta un Sincrotron propiedad de ESRF y un instituto de nanotecnologia).Grenoble me ha tratado bien hasta hoy, exceptuando el frio. Tengo muchas cosas que contar que me han pasado pero no tengo el tiempo suficiente y este teclado AZERTY me hace un poco lento al escribir.

¿Quien es el culpable el Thread o cvCam?

Estoy implementando una DLL para el asunto de mi tesis, eso de reconocer los gestos de manera monocular. Para ello necesito que mi programa sea una DLL que va a cargarse en otro programa al cual no tengo ningun acceso (uhm Closed Source, si!, maldicion!). Bueno, ya logré que se cargue, estuve analizando la DLL antigua y logré que mi DLL embonara en lo que el programito me pide.

Basicamente mi DLL debe exportar una única función importante la cual entrega coordenadas 3D. La primera vez que es llamada debe inicializarse sola y comenzar el rastreo. El modo de funcionamiento es el siguiente:

  1. (*) Aplicación pide coordenadas
  2. DLL debe:
    1. Si es primera vez. Responde (0,0,0) y lanza Thread par comenzar rastreo.
    2. Si no es primera vez. Responde con (x,y,z). El thread debería tenerlas ya detectadas.
    3. Avisar al thread cuando debe morirse.
  3. Ir a: (*)

El trabajo del Thread es el siguiente:

  1. Abrir cámara con resolución correcta (o morirse diciendo que no hay cámaras).
  2. Para cada FRAME capturado:
    1. Detectar objeto y obtener sus coordenadas.
    2. Actualizar variable global: coord = (x,y,z).  (global solo en la DLL)
  3. En caso  de aviso de muerte:
    1. Cerrar cámara correctamente
    2. Morirs y liberar recursos

Parece  muy fácil. Aja!, tengo varios dias atorado en la manera de anunciar al Thread que ya debe morirse. No se si sea OpenCV el que no cierra la cámara o el Thread que no se muere. Ya me estoy hartando, y lo malo es que estaba acostumbrado a que en Linux y OSS en general hay forums de IRC donde ayudan, pero busqué en freenet y no encontré nada decente para ambientes de Microsoft. Continue reading ‘¿Quien es el culpable el Thread o cvCam?’

Avenida 5 de Mayo - La Osa Mayor

Avenida 5 de Mayo - La Osa Mayor, originally uploaded by desertzarzamora.

Esta foto la tomé en el único lugar que me gusta de Puebla. Se nota que aún sigo extrañando Morelia.

¿Tengo una vecina voyeurista?

Resulta que hace un par de meses que se cambio a vivir una vecina aqui al grupovecina.jpg de 10 departamentos donde vivo. Son dos bloques, uno de 4 y otro de 6, yo vivo en el de 4, pero me toca al mismo nivel que la vecina puesto que en lugar de haber piso en el primer piso hay un estacionamiento techado.

Pero bueno, lo interesante es que al principio esta vecina no tenia cortinas, y ya que yo estaba acostumbrado a tener mi persiana abierta empece a notar que la vecina nunca estaba. Estaba todo el dia, las 24 horas del dia, su luz de la sala prendida pero jamas notaba movimiento o señales de vida.

Un par de dias anduve semidesnudo o desnudo por la sala de mi depto, justo donde esta la ventana que da a la ventana de la vecina y como despues de unos dias a uno se le va quitando la preocupacion de que lo vean pues no me importó mucho.

Al cabo de unas semanas, la vecina se compró unas persianas de papel, de esas que se abren de abajo hacia arriba. Tal vez se enfado de verme desnudo alguna vez o tal vez le dio cosa, o tal vez nunca me vió y solo se puso paranóica de que yo la viera o tal vez solo se compro una cortina y ya.

Desde que comenzó a tener persianas noté que siempre dejaba unos 10 o 15cm abiertos en la parte baja que nunca cerraban, llegué a pensar que era porque le habia quedado corta su cortina o que simplemente la dejaba para que entrara la luz. Luego pensé que a mi que me importaba andar pensando eso de las vecinas.

Entonces proseguí con mi vida y dejó de importarme la vida de la vecina, al cabo por esos 15cm no se podría ver gran cosa hacia acá a menos que estuviera muy cerca o que se asomara, en cuyo caso algun dia yo la agarraría in-fraganti.

Lo que yo no sabía es que ahora que tiene esa cortina, decidio colocar un escritorio exactamente frente a la ventana y colocar su laptop ahi. Ahora le queda el escritorio a unos escasos 50cm de la ventana. Eso lo descubrí un dia que accidentalmente dejó su puerta abierta, pero aún no me preocupaba demasiado. Hasta que un dia…

El otro día mientras salí a tomar el sol un poco por la tarde, abrí la puerta de mi depto y me recargué en el barandal, Oh-o!. Pude ver a la vecina sentada en su escritorio usando su laptop. Descubrí que ella podía ver claramente todo el interior de mi departamento mientras se escudaba en la pequeña rendija que habia creado usando su cortina deslizable.

Entonces me entró la preocupación sobre cuántos dias habrá estado ella ahi observando. Se me hace sospechoso que tenga una pequeña abertura de la cortina, justo la necesaria para que el efecto de luz y sombra la haga pasar inadvertida las tardes enteras que se la pasa trabajando en su laptop.

¿Será que la vecina de al lado es voyeurista?

Detectando objetos de algun color

Hay que eliminar todo lo que no queremos, como otros objetos, y basura. Ademas se elimina el background y se quita el ruido.

Se usa el modelo de color HSV, y de el unicamente se usa el Hue pues es el que contiene la informacion de color. Se toma un Histograma como muestra del color y se procede a hacer una convolucion, opencv le llama “backproject” del histograma en la imagen completa. De ahi se obtiene un mapa de probilidades es cual es una imagen en escala de grises donde segun lo blanco de un pixel es la probabilidad que sea del color del histograma, mas blanco mas certero.

Entonces se procesa la imagen de probabilidades para encontrar formas, objetos y otras cosas, en principio se tiene un relajo, todo lleno de ruido.

proba_map.PNG

Se aplica umbralizacion para eliminar todos los pixeles debajo del umbral y si se quiere convertir a blanco todos los demas. Luego se hace deteccion de contorno en lo que queda.

proba_map_contornos.PNG

Ahora, podemos hacer ajuste de figuras geometricas y podemos descartar los que no ajusten bien y los que sean demasiado pequeños. Nos queda algo bastante bueno.

proba_map_ajuste_elipse.PNG

Como ven, en esta ultima ya no se tiene un mapa de pixeles de probabilidad, se tiene una elipse vectorial que se pinto directo sobre donde se predice que esta el circulo azul.

OpenCV y Visual Studio 2005

Para generar un proyecto de Visual Studio 2005 usando Visual C++ se requieren algunos ajustes tanto a Visual Studio como a Windows e incluso al mismo Proyecto.

Sorry por que algunas cosas estan en inglés, es que mi VS05 esta en inglés.
Tracker

El procedimiento para que compile

1. Crear un proyecto (o abrir uno que tengas)
2. En el “Solution Explorer” clic derecho en el proyecto (NO en la “Solución”)
3. Clic en “Properties”
4. Bajo “Configuration Properties”->”C/C++”->”General” Buscar
“Additional Include Directories”, Click ahi.
5. Luego en el botón de la derecha con “…”.
6. Vas a agregar nuevos directorios.
7. Dependiendo de lo que estes haciendo vas a ocupar alguno de estos o mas fácil ponlos todos al cabo no afecta:
“C:\Archivos de Programa\OpenCV\cv\include”
“C:\Archivos de Programa\OpenCV\cvaux\include”
“C:\Archivos de Programa\OpenCV\otherlibs\highgui”
“C:\Archivos de Programa\OpenCV\cvcore\include”

8. Click en “Ok/Aceptar” y ve a “Configuration Properties”->”Linker”->”General”
9. Click en “Additional Library Directories” y de nuevo en el botón con “…”.
10. Additional library directories:
“C:\Program Files\OpenCV\lib”
“C:\Program Files\OpenCV\bin”

11. Click “ok/aceptar” y vas ahora a “Configuration Properties”->”Linker”->”Input”.
12. Click en “Additional Dependencies” y en el botón “…”.
13. Agrega las librerías del proyecto. Las más comunes y básicas son:
cv.lib
cvcam.lib
highgui.lib
cxcore.lib
cvaux.lib
Nota: Si te fijas, todas las dependencias anteriores llevan comillas, pero estas últimas no llevan..
15. Recuerda poner #include “cv.h” y demas cosas en tu código cpp/c.

Ejecutar con OpenCV ya que has compilado

1. Click en el Menú Inicio, Clic derecho en Mi PC.
2. Click en “Propiedades”
3. Click en “Avanzado”
4. Click en “Variables de Entorno”. Modificar o agregar la variable de “PATH” y al principio de todo poner “C:\Program Files\OpenCV\bin;” (Ojo que lleva un punto y coma)
7. Click “Aceptar” y ya.
8. Necesitas cerrar Visual Studio y abrirlo de nuevo para que agarre la variable PATH.
9. Una forma de cerciorarte de que el PATH esta puesto es abrir una ventana de cmd.exe y escribir PATH y Enter, deberías ver entre las lineas la que acabas de meter.

Ahora puedes compilar y ejecutar proyectos que usan OpenCV en Visual Studio 2005.

Si no lo hiciste bien el Visual Studio se va a quejar que no encuentra archivos “.lib” al compilar y si logras compilar pero no agregas el PATH te va a decir que no encuentra las DLL.

Que lata!, pero asi es Windows. Si estas instrucciones no te funcionan, deberás reiniciar Windows 50 veces, instalar Norton, NOD, MCAffee, Kaspersky, Panda y ClamAV, todos juntos. Reinicias Windows otras 50 veces. Luego instalas AdAware y Spybot Seach&Destroy. Reincias 50 veces más. Instalas Firefox. Reinicias otras 50 veces. Instalas alguna otra herramienta nueva que exista y, ya sabes, reinicias otras 50 veces. Si al final de esto no aún funciona, deberás repetir el procedimiento pero antes formateas tu PC, reinstalas windows y, claro, reincias otras 50 veces. Si despues de esto no funciona entonces… no se, preguntale a alguien que sí sepa.

Ahh, por cierto, gracias a Alex por ponerme el procedimiento bien detallado.