如何使用iPhone的相机追踪运动?

16

我看到有人制作了一款应用程序,可以通过使用相机跟踪您的双脚,以便您可以在iPhone屏幕上踢一个虚拟足球。

要如何实现这样的功能? 有人知道使用iPhone摄像头检测物体并跟踪它们的任何代码示例或其他信息吗?


我在iPhone上使用OpenCV成功地跟踪了面部和眼睛。这是一个很好的开始:http://niw.at/articles/2009/03/14/using-opencv-on-iphone/en。我想诀窍在于找到一个级联(描述相机应该寻找什么)来描述脚,但不确定是否存在这样的级联。 - aegzorz
OpenCV能用于实时跟踪吗?链接的文章似乎表明,在480 x 320像素的图像中识别一张脸需要多达10秒的时间。 - Brad Larson
我在 iPhone 3GS 上使用了 CoreVideo 框架来实时跟踪面部,使用了小样本大小 AVCaptureSessionPresetLow。我能够在不到 4 毫秒的时间内始终检测到眼睛。 - aegzorz
1个回答

33

我刚在SecondConf上做了一个演讲,演示了使用iPhone相机和OpenGL ES 2.0着色器跟踪彩色物体的方法。包括我的幻灯片和所有演示Demo的代码样本的帖子可以在这里找到。

我编写的示例应用程序是基于Apple在WWDC 2007上为演示Core Image而制作的示例的,其代码可以从这里下载。该示例在《GPU Gems 3》书的第27章中有描述(链接需要梯子)

基本思想是,您可以使用自定义GLSL着色器实时处理来自iPhone相机的图像,确定哪些像素在给定阈值内与目标颜色匹配。然后,这些像素的规范化X、Y坐标被嵌入到它们的红色和绿色分量中,而所有其他像素则被标记为黑色。然后对整个帧的颜色进行平均以得到彩色物体的重心,您可以在相机视图中跟踪其移动。

虽然这并没有解决跟踪像脚这样更复杂的对象的情况,但应该可以编写类似的着色器来选择这样一个移动的对象。

作为以上内容的更新,在我编写本文两年后,我现在已经开发了一个开源框架,它封装了OpenGL ES 2.0对图像和视频的着色器处理。其中最近增加的功能之一是GPUImageMotionDetector类,它处理场景并检测其中的任何运动。它将通过简单的回调块返回检测到的整体运动的质心和强度。使用此框架执行此操作应该比自己编写解决方案容易得多。


这很酷...是否可能使用它构建与Xbox Kinetic类似的接口? :)我正在寻找一个快速轻巧的代码,放入我的iPhone应用程序中,就像http://www.soundstep.com/blog/experiments/jsdetection/..如果可以在移动Web上实现,那将是很酷的。 - K. Kilian Lindberg
1
@CarlLindberg - Kinect使用投影结构化红外光来执行环境的三维映射,因此您显然无法通过iOS设备上的彩色摄像头来匹配它。到目前为止,我所拥有的粗略运动检测并未跟踪手或手指,为此,您需要探索光流或物体跟踪技术。让它们在实时视频上工作将是一个相当大的挑战。 - Brad Larson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接