0

我正在开始使用 Microsoft Visual 2010 Express 中的 OpenCV 开发软件。现在,在我开始编码之前,我需要知道的是我必须遵循的程序。

概述:我想开发检测简单的拳击动作,如(左拳,右拳)并输出结果的软件。

现在我在苦苦挣扎的地方是我应该采取什么方法我应该如何应对这种发展,即

  1. 捕获视频片段并能够提取让我们说每 5 帧进行处理。
  2. 我是否必须提取并存储此帧可能有一个参考图像以从中减去捕获帧。
  3. 一旦我捕获一帧,处理它的最佳方法是什么:

      * Threshold it, then
      * Detect the edges, then 
      * Smooth the edges using some filter, then
      * Draw some BOUNDING boxes....?
    

你对这些家伙有什么看法,或者我错过了什么,或者有更好更简单的方法......?有什么建议么...?

任何答案将不胜感激 Ps ...这不是我的作业:)

4

2 回答 2

0

您正在寻找的是动作识别的研究领域,例如 www.nada.kth.se/cvap/actions/ 或者可能的解决方案是例如 STIP(时空兴趣点)方法 www.di.ens.fr/~ laptev/动作/。但最后,如果您必须处理遮挡或不同的观点,这是一项艰巨的工作。

于 2013-01-19T00:38:41.680 回答
0

我不确定是否只分析每 5 帧就足够了,因为通常出拳速度非常快,以至于它们可能会被忽略。

我假设您真正想要找到的是拳头的快进(朝向相机)运动。

在 OpenCV 的情况下,我会首先从面部的这种运动开始,因为已经在软件包中提供了一些关于如何做到这一点的示例。

要检测和跟踪人脸,您可以使用 CvHaarClassifierCascade,但由于这对于运行时检测来说不够快,请继续使用 Lukas-Kanade 跟踪找到的人脸。只需在先前找到的人脸中选择一些易于跟踪的点,记住它们与任意人脸中间的距离,并在每一帧更新它。看到这个家伙http://www.youtube.com/watch?v=zNqCNMefyV8 - 使用 Lukas-Kanade 跟踪的一些随机点的示例。请注意,与面部不同,拳头可能不太容易追踪,因为它们的表面相当均匀,最好查看 OpenCV 中的 Lukas-Kanade 演示。

当然,每一帧实际的人脸都会漂移,偶尔重新运行 CvHaarClassifierCascade 并插入你当前持有的人脸位置。

您也应该能够对拳头进行上述操作,但这需要使用拳头图片训练分类器(OpenCV 中已经提供了用人脸训练的分类器)。

现在跟踪拳头/面部,您可以尝试观察这些点发生了什么——当有人出拳时,他们会迅速向某个方向移动,而在保持静止的拳头上,他们不会移动太多。因此,当您计算最近帧中单个点的平均移动时,该值越高,出现一拳的机会就越大。或者,如果您以某种方式设法准确地跟踪它们,如果它们之间的距离增加,则意味着物体更靠近相机 - 因此可能是一拳。

请注意,在至少不知道图片中拳头大小变化的情况下,可能很难区分手的移动是向前还是向后,或者用户是通过向左还是向右移动拳头来假装它。您可能必须想出一些专门的算法(可能需要反复试验)来检测,例如,在以前发现拳头的位置增加一些屏幕颜色像素。

于 2013-01-18T00:08:43.753 回答