OpenCV人脸检测参数设置

3

我正在运行基于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个回答

3
比例因子越小,分类器的搜索就越精确,但时间也会更长。该值决定每次运行图像寻找人脸时所调整图像大小的程度。如果您发现人脸的大小差别很大,则可能值得将该值降低到1.1(最低值),并查看是否可以改善结果。
此外,邻居数量也可能导致问题,将其从5降低到3可能会改善结果,但您也可能会得到一些误报(捕捉到墙壁或奇怪形状的物体),这是您可以根据需要进行微调的地方。
我怀疑您的人脸宽度都不会小于10个像素,所以minSize变量可能已经足够了。
关于flags,使用“flags = 0”可能更容易,因为我认为它们正在逐渐被淘汰(但我可能也错了)。
另外,我假设您的帧是灰度的?因为级联分类器的设计是用于灰度图像的,我注意到您在传递图像给分类器之前没有执行BGR2GRAY函数,您也可以通过将imread行更改为以下内容来执行此操作:
image = cv2.imread(file, 0)

同时,使用不同的分类器 .XML 可能也是值得一试的。OpenCV 中有一些可用的面部分类器,例如:

haarcascade_frontalface_alt

haarcascade_frontalface_alt_tree

haarcascade_frontalface_alt2

希望这有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接