Ahora si me tocó mostrar mi fea cara. Pero todo sea por mostrar más de la detección 3D monocular. La cosa en el video está fácil. Al principio no se detecta nada, pues no se ha tomado la muestra, luego, a los 7 segundos se toma una muestra de la esfera. Entonces comienza el seguimiento y los objetos detectados se pintan en “video inverso” (o sea pues XOR), luego de un par de segundos de incialización se comienzan a detectar las coordenadas.
Durante el seguimiento se reportan las 3 coordenadas del espacio, que es donde se detecta el objeto. Quise poner una representación visual de las coordenadas (x,y,z) que se están detectando, así que hay 3 rayas en la esquina que representan una idea de la posicion 3D, como aún no existen monitores 3D pues puse la coordenada z como una diagonal color cyan. El seguimiento es muy robusto, y la detección de profundidad es bastante precisa, note cuando la bola se acerca a la cámara y cuando se aleja.
Un ejemplo de aplicación
Pueden ver una aplicación de este juguete en el post anterior donde lo uso para jugar algunos juegos simples. Pero si alguien me ayuda (hacerlo solo me da weba) puedo hacer de esto una interfaz para TuxRacer, Quake 3 Arena, o algun otro juego.
Y bueno, seguro ya están hartos de que me la pase nomas poniendo estas cosas, pero pss como ya acabe mi tesis no tengo otra cosa que hacer, asi que ¡se aguantan!, jejeje.
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.
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.
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:
(*) Aplicación pide coordenadas
DLL debe:
Si es primera vez. Responde (0,0,0) y lanza Thread par comenzar rastreo.
Si no es primera vez. Responde con (x,y,z). El thread debería tenerlas ya detectadas.
Avisar al thread cuando debe morirse.
Ir a: (*)
El trabajo del Thread es el siguiente:
Abrir cámara con resolución correcta (o morirse diciendo que no hay cámaras).
Para cada FRAME capturado:
Detectar objeto y obtener sus coordenadas.
Actualizar variable global: coord = (x,y,z). (global solo en la DLL)
En caso de aviso de muerte:
Cerrar cámara correctamente
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?’