Performance 在使用OpenCV人脸检测时增加FPS

Performance 在使用OpenCV人脸检测时增加FPS,performance,opencv,face-detection,frame-rate,Performance,Opencv,Face Detection,Frame Rate,我知道实时人脸检测需要很高的cpu时间,在游戏中实现它太多了(这是我的目标)。因此,我正在寻找一种方法来提高我的FPS 在游戏中,应该只有两张脸。这些面几乎总是在相同的位置上。一个在屏幕的左下中,另一个在右下中 我可以假设总有两个面,就像我之前说的,它们大致位于与之前帧中相同的位置 我的想法是告诉算法他必须在哪里搜索 第一帧: 计算屏幕上存在面的位置。将为下一帧存储面坐标 以下框架: 在开始查找存储位置周围区域中的面之前,请使用帧的坐标。如果未找到任何内容,请增加与必须查找面的位置之间的距离,然

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

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

我可以假设总有两个面,就像我之前说的,它们大致位于与之前帧中相同的位置

我的想法是告诉算法他必须在哪里搜索

第一帧: 计算屏幕上存在面的位置。将为下一帧存储面坐标

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

这样做将大大提高我的性能,但是我没有找到任何方法告诉算法在哪里寻找人脸

有没有办法做到这一点


谢谢。

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

cv::Rect roi(xTl,yTl,w,h);
cv::Mat subImg = img(roi);
其中,xTl,yTl是搜索窗口的左上角坐标,w,h是大小

或者,一旦检测到人脸,您可以使用MeanShift/CamShift跟踪器(或其他跟踪器)查找每个帧中的位置: .

谢谢你的提示! 使用子图像进行检测会给我30帧而不是10帧

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