opencv人脸检测参数设置

时间:2015-03-30 09:20:58

标签: opencv

我在视频帧上使用haar级联运行opencv的人脸检测。

每帧为256x256,其中大多数都有面积大小不一的面。

我注意到当前设置无法检测到多个面部,并且每隔20~50帧平均检测到一个面部。

cscPath='haarcascade_frontalface_default.xml'
faceCascade=cv2.CascadeClassifier(cscPath)
image=cv2.imread(file)
faces=faceCascade.detectMultiScale(
    image,
    scaleFactor=1.2,
    minNeighbors=5,
    minSize=(10,10),
    flags = cv2.cv.CV_HAAR_SCALE_IMAGE
)

在这种情况下,参数的最佳设置是什么?

我是否应该尝试尝试不同的参数设置?

1 个答案:

答案 0 :(得分:3)

比例因子越低,分类器的搜索精度就越高,但这也需要更长的时间。它确定每次在图像上运行寻找面部的通道时调整图像大小的程度。如果你发现你的面孔的比例很大,那么将这个值降低到1.1(最低值)可能是值得的,看看是否能改善你的结果。

另外,邻居可能会绊倒你,将其从5降低到3,可能会改善结果,但是你也可能会得到一些误报(拾墙或搞怪形状的物体),这真的是你能做到的调整,直到得到你喜欢的结果。

我怀疑你的任何面孔都会<横跨10个像素,所以你的minSize变量可能没问题。

使用标志,可能更容易使用“flags = 0”,因为我认为它们已被弃用(但我可能错了)

另外我假设你的画面是灰度的?由于级联设计用于处理灰度图像,我注意到在将图像传递给分类器之前没有执行任何BGR2GRAY函数,您也可以通过将您的imread行更改为:

image = cv2.imread(file, 0)

即使使用不同的分类器.XML也可能是值得的,有一些面部分类器可用于opencv,例如:

haarcascade_frontalface_alt

haarcascade_frontalface_alt_tree

haarcascade_frontalface_alt2

希望这有帮助。