使用 OpenCV 人脸检测时提高 FPS
Increasing FPS while using OpenCV Face detection
我知道实时人脸检测需要很多 cpu 时间,在游戏中实现它的时间太多(这是我的目标)。因此,我正在寻找提高 FPS 的方法。
在游戏中,应该只有两张脸。这些面孔几乎总是在相同的位置。一张在屏幕左下中,一张在屏幕右下中。
我可以假设总是恰好有 2 张面孔,正如我之前所说,它们与之前的帧大致位于相同的位置。
我的想法是告诉算法他必须在哪里搜索。
第一帧:
计算屏幕上人脸的位置。为下一帧存储面部坐标。
以下帧:
使用之前的帧坐标开始在存储位置周围的区域中寻找面孔。如果没有找到,则增加与它要找人脸的位置的距离,然后重新搜索。
这样做会大大提高我的表现,但是我没有找到任何方法告诉算法它必须在哪里寻找面孔。
有办法吗?
谢谢。
如果想直接使用OpenCV算法而不修改它,可以在上一帧的人脸位置周围提取子图像。通过这种方式,OpenCV 人脸检测器在更小的区域上执行滑动 window 搜索。然后在全帧坐标系中重新映射面部位置。如果你的脸移动不太快,你可以 运行 每 n 帧并在检测帧之间插入位置以进一步加速。
要获取 subImg,您可以使用:
cv::Rect roi(xTl,yTl,w,h);
cv::Mat subImg = img(roi);
其中 xTl,yTl 是搜索的左上角坐标 window,w,h 是大小。
或者,一旦检测到人脸,您可以使用 MeanShift/CamShift 跟踪器(或其他跟踪器)在每一帧中找到位置:
http://docs.opencv.org/trunk/doc/py_tutorials/py_video/py_meanshift/py_meanshift.html.
感谢您的提示!
使用子图像进行检测会得到 30 帧而不是 10 帧。
我将使用你提到的这个插值法。我认为在自己的线程中计算检测会进一步提高性能。
我知道实时人脸检测需要很多 cpu 时间,在游戏中实现它的时间太多(这是我的目标)。因此,我正在寻找提高 FPS 的方法。
在游戏中,应该只有两张脸。这些面孔几乎总是在相同的位置。一张在屏幕左下中,一张在屏幕右下中。
我可以假设总是恰好有 2 张面孔,正如我之前所说,它们与之前的帧大致位于相同的位置。
我的想法是告诉算法他必须在哪里搜索。
第一帧: 计算屏幕上人脸的位置。为下一帧存储面部坐标。
以下帧: 使用之前的帧坐标开始在存储位置周围的区域中寻找面孔。如果没有找到,则增加与它要找人脸的位置的距离,然后重新搜索。
这样做会大大提高我的表现,但是我没有找到任何方法告诉算法它必须在哪里寻找面孔。
有办法吗?
谢谢。
如果想直接使用OpenCV算法而不修改它,可以在上一帧的人脸位置周围提取子图像。通过这种方式,OpenCV 人脸检测器在更小的区域上执行滑动 window 搜索。然后在全帧坐标系中重新映射面部位置。如果你的脸移动不太快,你可以 运行 每 n 帧并在检测帧之间插入位置以进一步加速。 要获取 subImg,您可以使用:
cv::Rect roi(xTl,yTl,w,h);
cv::Mat subImg = img(roi);
其中 xTl,yTl 是搜索的左上角坐标 window,w,h 是大小。
或者,一旦检测到人脸,您可以使用 MeanShift/CamShift 跟踪器(或其他跟踪器)在每一帧中找到位置: http://docs.opencv.org/trunk/doc/py_tutorials/py_video/py_meanshift/py_meanshift.html.
感谢您的提示! 使用子图像进行检测会得到 30 帧而不是 10 帧。
我将使用你提到的这个插值法。我认为在自己的线程中计算检测会进一步提高性能。