2010-10-14 13 views
16

Vi que alguien ha creado una aplicación que rastrea tus pies con la cámara, para que puedas patear una pelota de fútbol virtual en la pantalla de tu iPhone.¿Cómo se puede seguir el movimiento usando la cámara del iPhone?

¿Cómo podría hacer algo como esto? ¿Alguien sabe de algún ejemplo de código u otra información sobre el uso de la cámara del iPhone para detectar objetos y rastrearlos?

Respuesta

32

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.

+0

¡Guau, mucho respeto! Voy a usar esto si no te importa,) – Eimantas

+0

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 –

+1

@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. –

3

He tenido cierto éxito en el seguimiento de rostros y ojos con OpenCV en el iPhone. Aquí hay un buen lugar para comenzar: http://niw.at/articles/2009/03/14/using-opencv-on-iphone/en

Supongo que el truco está en encontrar una cascada (descripción de lo que la cámara debería estar buscando) que describa un pie, aunque no estoy seguro si eso existe.

+1

¿Se puede usar OpenCV para rastrear en tiempo real? El artículo vinculado parece indicar que lleva hasta 10 segundos reconocer una cara en una imagen de 480 x 320. –

+0

He utilizado el framework CoreVideo en un iPhone 3GS para rastrear un rostro en tiempo real, usando el tamaño de muestra pequeño AVCaptureSessionPresetLow. Pude detectar consistentemente los ojos por debajo de 4 ms. – aegzorz

+0

Eso suena muy bien, no creo que quieras tener una muestra? – Burf2000

Cuestiones relacionadas