No se ve bien sino con el corazón.
          Lo esencial es invisible a los ojos.
- El Principito

Tesis demo – realidad aumentada

Hecho con OpenCV + openFrameworks.

Graffiti cortesía de Tramp1L.

Algunos recuerdos de mi infancia

Hoy mi mamá me pasó una cajita con muchos chécheres míos, viejos, para que botara lo que ya no servía o que ya no quería.  Encontré muchas cosas que ni me acordaba que existían.

Por ejemplo, encontré esta foto que me tomé con mi hermana hace muuuchos años.  Ahí probablemente tenía como 13-14 años, no recuerdo.  Creo que fue en alguna tienda en la terminal de Albrook, en una de esas maquinitas.  Aún recuerdo que ese era mi suéter favorito en ese momento y era de la película “Dinosaurio”.  Era el suéter para las “ocasiones especiales” jaja.  Mi hermana ahora está en China, así que este es un bonito recuerdo para conservar :)  Es más, aún es posible tomarse fotos así?

Mi hermana y yo

Encontré también unos muñequitos de policía de Lego.  Yo realmente no jugaba mucho con Legos.  Estos muñequitos los guardaba aparte, porque me gustaba mucho la profesión de policía.  Siempre quise ser una.

Mi compañero policía y yo. El señor, probablemente alguien a quien rescaté.

Yo capturando a algún malhechor

No recuerdo exactamente cuándo cambié de parecer y olvidé eso de ser policía.  Supongo que luego me di cuenta de que ser policía es muy peligroso, y más aquí en Panamá.  A mi me gustaba más que nada la parte de dar vueltas por ahí en bici… pensaba que atrapar delincuentes era como en la tele, donde los buenos siempre ganan.  El mundo era menos complicado en mi mente en ese entonces.

Probablemente no era lo mío

También encontré algunas cositas que tenía cuando me gustaba mucho mucho el fútbol.  Entre los 13 y 16 años jugaba fútbol casi todos los días.  Había que reemplazar zapatillas y balones cada 1 o 2 meses, porque como jugábamos en la calle, las zapatillas se desgastaban rápido, y siempre había algún salvaje que botaba o reventaba el balón.  Pero primero tratar de arreglar lo que se pudiera con masking tape.

Entre las cosas que encontré en esa cajita, están las figuritas del Mundial del 2002, que nunca pegué (qué se supone que debo hacer con ellas ahora?), dos pines de la Real Sociedad (mi equipo favorito) que me regalaron amigos de la escuela, Iván y creo que Mónica.  Lo que está en la parte inferior izquierda de la foto es una pulserita que hizo mi amiga Ada, y que tiene los colores del Inter (mi otro equipo favorito).  Recuerdo que la usaba cada vez que tenía partidos en la escuela jaja!  También el pin “3″, que era mi número favorito (por alguna razón personal :P) Básicamente todas las camisetas, que aún conservo, tienen el 3 en la espalda.  La pelotita de fútbol me la regaló Iván y traía un Silly Putty.

Fútbol

También me di cuenta de que tenía MUCHAS cosas de Hello Kitty (en la foto está solamente lo que encontré en la caja).  Cuando estábamos chiquitas, a mi hermana y a mí nos regalaban cosas de Sanrio y sobre todo de Hello Kitty (lápices, plumas, etc.).  Usualmente las cosas nunca se usaban y se guardaban eternamente, porque eran muy bonitas y no queríamos gastarlas jaja (por ejemplo los clips morados en la izquierda).  Los sellitos sí se usaron porque bueno, se gastaba era la tinta… jajaja… Y las figuritas también, para ocasiones especiales solamente, por ejemplo cuando hacíamos una tarjeta o algo así.

Mucho Hello Kitty

Otras cositas que encontré:

 

Un spiderman y un conejo que pueden trepar paredes… hacia abajo más que nada, y un carrito de cuarzo que pintó Michelle

Bueno la mayoría de las cosas son realmente de mi adolescencia.  Pero mi adolescencia fue como una infancia extendida: jugar, aprender, soñar… nada de problemas.  En verdad ha sido de lo mejor.  Recuerdo que me pasaba mucho por la mente la idea de que todos los niños deberían tener una infancia por lo menos igual de feliz, y que yo tenía que hacer algo al respecto cuando fuera grande.

Sin vivir nada extraordinario, mi infancia-adolescencia fue extraordinaria

Gracias a las personas con las que he vivido y crecido, y que han estado ahí para cuidarme

Si tuviera cincuenta y tres minutos para gastar

Uno de mis fragmentos favoritos de El Principito:

- Buenos días – dijo el principito.

- Buenos días – dijo el vendedor.

Era un vendedor de píldoras perfeccionadas que calman la sed. Se toma una por semana y no se siente más la necesidad de beber.

- ¿Por qué vendes eso? – dijo el principito.

- Es una gran economía de tiempo – dijo el vendedor. – Los expertos han hecho cálculos. Se ahorran cincuenta y tres minutos por semana.

- ¿Y qué se hace con esos cincuenta y tres minutos?

- Se hace lo que se quiere…

“Yo – se dijo el principito – si tuviera cincuenta y tres minutos para gastar, caminaría lentamente hacia una fuente…”

Héctor Brands – “Violencia: una enfermedad social prevenible”

Aquí les dejo una charla muy inspiradora presentada por el señor Héctor Brands, Director del Movimiento Nueva Generación (MNG).  Este señor y el MNG realizan una labor importante en los barrios vulnerables, alejando a muchos niños y jóvenes del mal camino, a través de la educación, el deporte y la cultura, dándoles así una oportunidad de superación.

Para mí, uno de los mensajes más importantes es que en lugar de juzgar y condenar, hay que comprender, hay que creer, hay que tomar acción, ayudar, dar oportunidades.  Tomar acción puede hacer una gran diferencia, y este es un ejemplo de cómo.

Espero que lo vean. Vale la pena.

Tesis: Optimizando Pt.2

El viernes pasado fui a presentarle a mi asesor mis avances, y por suerte todo salió bien.

La noche anterior, como a las 11 o 12, encontré un pequeño loop que no estaba haciendo nada, simplemente lo borré y voila, subió como de 4 a 6 fps jejeje se le puede llamar optimizar a eso? Bueno, al menos creo que esos 2 fps adicionales me dieron un poco más de confianza… porque estaba preocupada…

Anoche se me prendió el foco, y me di cuenta de que en otro lado estaba normalizando un vector de 36 elementos para solamente tomar 1 de los 36 valores, cuando podía dividir solamente ese valor entre la norma del vector… El resultado es que subió el frame rate a 9 fps más o menos :D No me lo imaginaba, pero hizo mucha diferencia el sólo eliminar la inicialización del vector, sin contar la normalización.

Sin paralelización, corre como a 7 fps.  Es raro, pensé que podía ser más significativa la diferencia.  Ahora, podría habilitar la paralelización al momento de compilar el OpenCV, para que las funciones de la misma librería estén más optimizadas, pero no sé qué tanto ayudaría.  Por ahí lo pruebo…

Usando la librería TBB para paralelizar, puedo aprovechar los dos núcleos del procesador.  En el task manager (figura abajo) se puede ver que se está usando 77% del CPU.  Sin paralelización sólo se utiliza un núcleo y marca (casi) siempre 50%.  Me alegré mucho la primera vez que vi ese número por encima del 50% jejeje :P

Task manager

Video

PPT de avances :P

Por el momento, lo principal que tengo que hacer es terminar de volver a programar el training, más optimizado, para entrenar el detector con muchas más muestras y ponerle más etapas (cascada).

Tesis: Optimizando

Estoy reescribiendo algunas partes del código utilizando la librería TBB (Threading Building Blocks) para que se ejecute de forma paralela.  Específicamente, estoy utilizando la función parallel_for para paralelizar algunos bucles for (valga la redundancia).  La condición para que el bucle for se pueda paralelizar es que el cálculo no sea secuencial (es decir,  que los resultados sean independientes).  También, hay que considerar qué tan “pesado” es el cálculo, ya que la paralelización implica cierto overhead, y si el cálculo es sencillo, la paralelización en realidad le añadiría una demora, que en ciertos casos podría ser significativa.

Por el momento ya hice la prueba de paralelizar dos cosas en el módulo de detección:

  • El cálculo del gradiente de la imagen:  El bucle for recorre la imagen pixel por pixel para calcular el gradiente.  Como el gradiente en un pixel es independiente del gradiente en otro pixel, este proceso me pareció un buen candidato a ser paralelizado, además porque realiza cálculos con los tres canales, calcula cuadrados, raíces, etc. (es decir, implica varios pasos que pueden tomar un tiempo considerable).
  • La detección de la mano:  Al paralelizar este proceso básicamente se escanean varias partes de la imagen a la vez para buscar las manos.  Este es el que da mayor ganancia en tiempo.

A una cierta densidad de escaneo, y a ciertos niveles de escala, sin paralelizar la detección, el programa ejecuta a unos 2.5~3 fps aprox.  Paralelizando, como a 4~4.5 fps aprox.  Bueno, ya sé que no suena WOW jeje, pero la diferencia es perceptible. Por el momento sé que hay dos parámetros con los que puedo jugar, que son: el número de threads y la granularidad, pero como no tengo cómo determinar cuáles son los valores óptimos, dejo que la librería lo elija por mí :D Tengo que ver si hay formas de optimizarlo más…

Estoy buscando qué otras partes del código puedo optimizar.  Bajar la densidad del escaneo en la detección definitivamente ayuda en cuanto al tiempo, pero disminuye la tasa de detección… Se me ocurren algunas posibles soluciones… pero bueno, ya veré…

Ahorita mismo estoy reescribiendo, el módulo de entrenamiento.  La vez que entrené el detector en cascada, de 10 etapas, me tomó 9 días! Pero sé que se debió en gran parte a que no optimicé algunas cosas obvias esa vuelta…

Mi compu:

  • Pentium Dual-Core T4500 @ 2.30 GHz
  • 2.00 GB de RAM
  • Windows 7

Tesis video #2

Un videito de cómo va la tesis (está invertido, como en un espejo):

Qué hay / qué utiliza:

  • HOG (Histogram of Oriented Gradients) Features
  • Cascade of boosted classifiers (detectores en cascada)
  • Bootstrapping

Qué le faltó:

  • Más muestras!
  • Muestras de la mano izquierda (todas eran de mano derecha)!
  • Más etapas en la cascada, aquí hay 10 y se necesitan probablemente como 20 para alcanzar el rejection rate deseado (para disminuir las falsas alarmas)
  • Muestras de la mano en movimiento, es decir, con motion blur y con diferentes vistas/rotación… por eso no detecta muy bien cuando se mueve la mano
  • Agrupar bien las ventanas de detección, por eso no funcionaba bien cuando las manos se juntaban mucho (ya casi está solucionado ahora)
  • etc…

Otras cosas no andan bien:

  • Frame rate muy bajo: ~5 fps :(

Esto es apenas detectar una mano abierta… aún me falta que distinga entre varios gestos pero ahí vamos…

You & I / Show Me – Michael Lington

Michael Lington en Pizza Express… Algún día quiero ir para allá, qué priti comer pizza y escuchar smooth jazz en vivo! jaja

Dos de mis canciones favoritas de Michael Lington

Me da lo mismo – El Pescao y Ana Vera

Una de las canciones más bonitas que he escuchado últimamente… muy buena letra…

Da igual lo que haya pasado ya
también da igual lo que llegará.
Lo mismo me importan el bien y el mal
o lo que diga la gente.
Llegar primero, llegar detrás
los que no aman este lugar.
Los que hacen del miedo su cualidad
Inmediatamente a mi me da.
Me da me da, me da me da lo mismo
Me da me da, me da me da lo mismo

Me da igual si algunos me ven llorar
Si no respetan mi libertad.
Estar por el mundo en cualquier lugar
sin conocer a la gente.
Da igual amar al que no hay que amar.
Da igual ser miles si hay soledad.
Si rompes las normas para buscar
inmediatamente a mi me da.
Me da me da, me da me da lo mismo
Me da me da, me da me da lo mismo

Me da me da, me da me da lo mismo
Me da me da, me da me da lo mismo

Lo que me importa es el presente y la sinceridad.
La sencillez de los niños al mirar al mar
y lo que siento cuando veo que eres de verdad.
Como me importan esas cosas que me hacen soñar.
Como me importan mis amigos cuando ya no están.
Como me importa que te quedes a mi lado más.
Me importa todo lo que he dado y lo que tú me das.
Me importa el mundo si puedo vivir un día más.
Me importan tantas cosas pero todo lo de más.
Me da me da, me da me da lo mismo
Me da me da, me da me da lo mismo

Me da me da, me da me da lo mismo
Me da me da, me da me da lo mismo

La felicidad incondicional

He leído en varios libros que para ser felices no necesitamos nada. Simplemente es cuestión de decidir, en este mismo instante, ser feliz. Es una idea muy simple, y para mí, una verdad.  La felicidad no debe depender de nada. Pero, ¿por qué es tan difícil?

En las palabras de Anthony de Mello:

Estaba diciendo que no queremos ser felices.  Queremos otras cosas.  O más exactamente: No queremos ser incondicionalmente felices.  Estoy dispuesto a ser feliz siempre y cuando que tenga esto y lo otro.  Pero esto realmente es decirle a nuestro amigo o a nuestro Dios o a cualquiera:  ”Tú eres mi felicidad.  Si no te tengo, me niego a ser feliz”.  Es muy importante comprender eso.  No podemos imaginarnos la felicidad sin esas condiciones.  Es muy cierto.  No podemos imaginarnos la felicidad sin ellas.  Nos han enseñado a cifrar en ellas nuestra felicidad.

Estuve reflexionando un poco sobre esto, y me pareció curioso que lo que dice es cierto (que no queremos ser felices), pero que en realidad no es algo que decidimos conscientemente.  Para mí es más bien como ilusión (como una ilusión óptica) que engaña a nuestro cerebro.

Explico.  Generalmente nuestro pensamiento es: “Si tuviera tal cosa o si estuviera con tal persona, sería tan feliz”. Algo como:

Cómo hemos aprendido que es la felicidad

Pero ahora nos dicen que no necesitamos de nada ni de nadie para ser felices.

Cómo es ser feliz incondicionalmente

Es algo difícil de imaginar.  ”Ok, me visualizo feliz.  Un momento, ¿por qué no tengo nada? ¿Por qué estoy solo? ¿Cómo se se supone que seré feliz? (ya se nos olvidó que en ese momento visualizado ya eramos felices)” .  Nos podemos imaginar brevemente que somos incondicionalmente felices, pero al siguiente instante nos damos cuenta de que no necesariamente tendremos todo lo que queremos, así que nos negamos a ser felices por el momento, por que no tenemos lo que queremos y si no tenemos lo que queremos jamás seremos felices.

Así lo ve nuestro cerebro