Acabo de dar una charla en SecondConf donde demostré el uso de la cámara del iPhone para rastrear un objeto coloreado usando los sombreadores OpenGL ES 2.0. La publicación que acompaña a la charla, incluidas mis diapositivas y el código de muestra para todas las demostraciones, se puede encontrar en here.
La aplicación de muestra que escribí, cuyo código se puede descargar desde here, se basa en un ejemplo producido por Apple para demostrar Core Image en WWDC 2007. Ese ejemplo se describe en Chapter 27 of the GPU Gems 3 book.
La idea básica es que puede usar sombreadores GLSL personalizados para procesar imágenes de la cámara del iPhone en tiempo real, determinando qué píxeles coinciden con un color objetivo dentro de un umbral determinado. Esos píxeles tienen sus coordenadas X, Y normalizadas incrustadas en sus componentes de color rojo y verde, mientras que los demás píxeles están marcados como negros. El color del cuadro completo se promedia para obtener el centroide del objeto de color, que puede seguir mientras se mueve a través de la vista de la cámara.
Si bien esto no aborda el caso de rastrear un objeto más complejo como un pie, sombreadores como este deberían poder escribirse para poder seleccionar un objeto en movimiento.
Como una actualización de lo anterior, en los dos años transcurridos desde que escribí esto, ahora he desarrollado an open source framework que encapsula el procesamiento de imágenes y video del sombreador OpenGL ES 2.0. Una de las adiciones recientes a eso es una clase GPUImageMotionDetector que procesa una escena y detecta cualquier tipo de movimiento dentro de ella. Le devolverá el centroide y la intensidad del movimiento general que detecta como parte de un simple bloque de devolución de llamada. Usar este marco para hacer esto debería ser mucho más fácil que rodar su propia solución.
¡Guau, mucho respeto! Voy a usar esto si no te importa,) – Eimantas
Esto es genial ... ¿es posible construir una interfaz como la xbox cinética con esto? :) Estoy buscando un código rápido y liviano para poner en mi aplicación de iPhone, como http://www.soundstep.com/blog/experiments/jsdetection/. Sería genial si fuera posible con la web móvil, aunque –
@CarlLindberg - El Kinect utiliza una luz IR proyectada y proyectada para realizar un mapeo 3-D de un entorno, por lo que obviamente no vas a unir eso con una cámara a color en un dispositivo con iOS. La detección de movimiento bruta que tengo hasta ahora no es el seguimiento de las manos o los dedos, y para eso tendrá que explorar el flujo óptico o técnicas de seguimiento de objetos. Conseguir que trabajen en video en vivo será todo un desafío. –