如何使用 iPhone 的摄像头跟踪运动?

Posted

技术标签:

【中文标题】如何使用 iPhone 的摄像头跟踪运动?【英文标题】:How can you track motion using the iPhone's camera? 【发布时间】:2011-04-25 10:12:39 【问题描述】:

我看到有人制作了一个使用摄像头跟踪你的脚的应用,这样你就可以在 iPhone 屏幕上踢虚拟足球。

你怎么能做这样的事情?有谁知道有关使用 iPhone 摄像头检测和跟踪对象的任何代码示例或其他信息?

【问题讨论】:

【参考方案1】:

我刚刚在 SecondConf 上做了一次演讲,在那里我演示了如何使用 iPhone 的摄像头使用 OpenGL ES 2.0 着色器来跟踪彩色对象。该演讲附带的帖子,包括我的幻灯片和所有演示的示例代码,都可以在 here 找到。

我编写的示例应用程序(其代码可从here 下载)基于 Apple 为在 WWDC 2007 上演示 Core Image 而制作的示例。该示例在Chapter 27 of the GPU Gems 3 book 中进行了描述。

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

虽然这不能解决跟踪更复杂对象(如脚)的情况,但应该能够编写像这样的着色器来挑选出这样一个移动的对象。

作为对上述内容的更新,在我写这篇文章的两年里,我现在开发了an open source framework,它封装了图像和视频的 OpenGL ES 2.0 着色器处理。最近添加的一个是 GPUImageMotionDetector 类,它处理场景并检测其中的任何类型的运动。作为简单回调块的一部分,它将返回它检测到的整体运动的质心和强度。使用此框架执行此操作应该比滚动您自己的解决方案要容易得多。

【讨论】:

这很酷.. 有没有可能用这个构建一个像 xbox 动力学这样的界面? :) 我正在寻找一个快速的轻量级代码来放入我的 iphone 应用程序中,例如 soundstep.com/blog/experiments/jsdetection .. 如果它可以通过移动网络实现,那就太酷了 @CarlLindberg - Kinect 使用投射的结构化红外光来执行环境的 3-D 映射,因此您显然无法将其与 ios 设备中的彩色相机相匹配。到目前为止,我的粗略运动检测不是跟踪手或手指,为此您需要探索光流或对象跟踪技术。让他们在现场视频上工作将是一个相当大的挑战。【参考方案2】:

我在 iPhone 上使用 OpenCV 成功跟踪了面部和眼睛。 这是一个很好的起点:http://niw.at/articles/2009/03/14/using-opencv-on-iphone/en

我想诀窍是找到一个描述脚的级联(相机应该寻找什么的描述),但不确定它是否存在。

【讨论】:

可以使用OpenCV进行实时跟踪吗?链接的文章似乎表明识别 480 x 320 图像中的人脸最多需要 10 秒。 我在 iPhone 3GS 上使用 CoreVideo 框架实时跟踪人脸,使用小样本 AVCaptureSessionPresetLow。我能够在 4 毫秒内持续检测到眼睛。 听起来很不错,我想你不会想要样品吧?

以上是关于如何使用 iPhone 的摄像头跟踪运动?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python 进行网络摄像头运动跟踪

你如何做出和识别手势?

如何跟踪触摸时的手指运动以绘制平滑曲线?

在跟踪运动方面,室内 WiFi 定位的准确度如何?

iphone SDK中的物理运动跟踪?

运动目标检测跟踪主流算法