使用OpenCV Face检测时增加FPS

时间:2015-01-19 18:04:15

标签: performance opencv face-detection frame-rate

我知道实时人脸检测需要高CPU时间,在游戏中实现它太多了(这是我的目标)。因此,我正在寻找一种方法来改善我的FPS。

在游戏中,应该只有两张脸。那些面孔几乎总是处于相同的位置。一个位于屏幕左下方中间,另一个位于右下方中间。

我可以假设总共有2个面,就像我之前说过的那样,大致位于与之前帧相同的位置。

我的想法是告诉算法他必须搜索的地方。

第一帧: 计算屏幕上有面孔的位置。面部坐标存储在下一帧中。

以下框架: 使用之前帧的坐标开始在存储位置周围的区域中查找面。如果找不到任何内容,请增加距离必须寻找面部的位置的距离并再次搜索。

这样做会大大提高我的表现,但是我没有找到任何方法告诉算法必须在哪里寻找面孔。

有办法吗?

感谢。

2 个答案:

答案 0 :(得分:0)

如果要在不修改OpenCV算法的情况下使用OpenCV算法,可以在前一帧的面部位置周围提取子图像。以这种方式,OpenCV面部检测器在更小的区域上执行滑动窗口搜索。然后重新映射全帧坐标系中的面部位置。如果您的面部移动速度不是太快,您可以每隔n帧运行一次,并在检测框架之间插入位置以进一步加速。 要获得subImg,您可以使用:

cv::Rect roi(xTl,yTl,w,h);
cv::Mat subImg = img(roi);

其中xTl,yTl是搜索窗口的左上角坐标,w,h是大小。

或者,一旦检测到面部,您可以使用MeanShift / CamShift跟踪器(或其他跟踪器)在每个帧中查找位置: http://docs.opencv.org/trunk/doc/py_tutorials/py_video/py_meanshift/py_meanshift.html

答案 1 :(得分:0)

谢谢你的提示! 使用子图像进行检测可以得到30帧而不是10帧。

我将使用你提到的这个插值。我认为在自己的线程中计算检测将进一步提高性能。