jueves, marzo 08, 2007

Webcam, en Squeak, en la OLPC, a 20 cuadros por segundo


Una cosa es hacer andar código viejo en la OLPC, y otra muy distinta es que ese código funcione de forma aceptable. En el procesamiento de vídeo es, tal vez, uno de los objetivos más ambiciosos sobre la OLPC.

Imaginemos que tenemos que procesar 20 cuadros por segundo, y que la imagen mide 320x240 píxeles. Cada píxel está compuesto por 3 datos (la parte Roja, la parte Verde, y la parte Azul) que se denominan RGB (Red, Green, Blue). Si tenemos que procesar cada punto de la imagen, tendremos que procesar 320x240 veces, por cada cuadro, las operaciones para la parte Roja, Verde y Azul.

Para lograr tener 20 cuadros por segundo, con una imagen de 320x240, tendremos que realizar:

320 (ancho) * 240 (alto) * 3 (RGB) * 20 (cuadros/seg) = 4.608.000 (operaciones/seg)

En un procesamiento como ese, la poca velocidad de la OLPC se hace notar.


Bueno, el primer port del código Linux a la OLPC, fue prácticamente sin problemas PERO la velocidad de procesamiento obtenida era de lástima. Sólo procesaba 3 cuadros por segundo.

Después de algunos cambios en el código (evitar aritmética de coma flotante, loop unrolling, uso de bitmaps de 16 bits en lugar de 32 bits, etc) logramos 20 cuadros por segundo.


Una cosa a tener en cuenta es que el modelo y la filosofía de Squeak imponen mayores requerimientos al código. Dicho de otra forma: Procesar vídeo en Squeak no es SOLO mostrar un vídeo a pantalla completa, lo más rápido posible. Si sólo hiciésemos eso, podríamos obtener los mismos 30 cuadros x segundo con una imagen de 640x480 pixeles que logran la mayoría de los programas de control de cámaras de vídeo. Procesar vídeo en Squeak es integrar el vídeo como un ciudadano de pleno derecho dentro del mundo de objetos 100% manipulables y programables.

No sirve de nada poder ver vídeo si no podemos hacer nada con el. En Squeak el vídeo puede ser manipulado como cualquier otro objeto (se puede rotar, mover, cambiar de tamaño, etc). También puede ser programado desde guiones de eToys.

Este es el vocabulario del objeto de vídeo:


Con este vocabulario (y el vocabulario de los demás objetos Squeak) se pueden hacer algunos experimentos interesantes.... Por ejemplo: Si hacemos una animación en Squeak, de las clásicas, pero si en lugar de llenar el Contenedor con dibujos hechos a mano, lo llenamos con 1 cuadro por segundo desde la webcam (usando la propiedad #lastFrame), obtendremos una animación que es un vídeo acelerado (como esos vídeo de crecimiento acelerado de las plantas que ponen en los canales de documentales, o una manzana que se pudre en 20 segundos, etc) de lo que esté capturando la Webcam.


Lo más interesante de esta opción es que, el vídeo acelerado, es una producción del niño. No usa la opción “mostrar vídeo acelerado” que hace todo por el, sino que tiene que enfrentarse a resolver el problema, usando conocimiento que ya tiene. Muy en la línea de Squeak.



Para terminar les dejo una pregunta:

¿Qué otros experimentos se podrán hacer con la Webcam y Squeak?


1 Comentarios:

At 9/3/07 00:56, Anonymous Giuseppe Luigi Punzi said...

Genial como siempre Diego.

Respecto a tu pregunta, a mi se me ocurre a bote pronto un sistema de reconocimiento de facciones, eso sí, no sería tan fácil hacerlo como decirlo.

Un saludo.

 

Publicar un comentario

<< Principal