OpenCV开发运动检测软件

时间:2013-01-17 22:58:13

标签: c++ opencv

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

概述: 我想开发一种软​​件来检测简单的装箱动作,例如(左拳,右拳)并输出结果。

现在在哪里挣扎,我应该采取什么方法来解决这个问题,即

  1. 捕获视频素材并能够提取每隔5帧进行处理。
  2. 我是否必须提取和存储此帧,或者可以使用REFERENCE图像从中减去捕获帧。
  3. 一旦我捕获了一个帧,最好的处理方式是什么:

      * Threshold it, then
      * Detect the edges, then 
      * Smooth the edges using some filter, then
      * Draw some BOUNDING boxes....?
    
  4. 你对这些家伙有什么看法,或者我错过了什么或者有更简单的方法......?有什么建议......?

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

2 个答案:

答案 0 :(得分:0)

我不确定是否只分析每一个第5帧就足够了,因为通常拳是如此之快以至于它们可能会被忽视。

我认为你真正想要找到的是快速前进(朝向相机)拳头的动作。

在OpenCV的情况下,我首先会开始使用这些面部动作,因为已经提供了一些关于如何在软件包中执行此操作的示例。

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

当然每个帧的实际面都会漂移掉,偶尔重新运行CvHaarClassifierCascade并插入你当前保持的面部位置。

你也应该能够为拳头做上面的事情,但这需要训练分类器和拳头图片(OpenCV已经提供了用面部训练的分类器)。

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

请注意,至少不知道图片中拳头尺寸的变化,可能很难区分手的移动是向前还是向后,或者用户是通过向左或向右移动拳头来伪装它。您可能必须提出一些专门的算法(可能有试验和错误)来检测,比如说,增加了之前拳头位置的屏幕颜色像素数。

答案 1 :(得分:0)

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