最近我对使用“haarcascade_frontalface_alt2.xml”进行人脸检测时发生的一些奇怪的事情感到困惑
假设在网络摄像头拍摄的视频中检测到我的脸,虽然我的脸和相机都没有移动,但返回的人脸坐标和大小会发生一点变化。为什么会发生这种情况?有没有办法改进它?
谢谢
最近我对使用“haarcascade_frontalface_alt2.xml”进行人脸检测时发生的一些奇怪的事情感到困惑
假设在网络摄像头拍摄的视频中检测到我的脸,虽然我的脸和相机都没有移动,但返回的人脸坐标和大小会发生一点变化。为什么会发生这种情况?有没有办法改进它?
谢谢
一点是多少?只要检测到的人脸的坐标和大小值不会乱跳,您就可以使用低通滤波器(即运行平均值)来平滑处理。
我不知道您使用的是什么语言,但在 Python 中,它看起来像这样:
filterSize = 3
m = []
while True:
x, y, sizex, sizey = <getThisFramesFaceParams()> ## Your function here
m.append([x,y,sizex,sizey])
if len(m) > filterSize:
m.pop
x, y, sizex, sizey = 0, 0, 0, 0
for i in m:
x += i[0]
y += i[1]
sizex += i[2]
sizey += i[3]
# less variation in these values:
x /= len(m)
y /= len(m)
sizeX /= len(m)
sizeY /= len(m)
filterSize 越大,抑制噪声/变化的次数就越多(因此值的随机变化越少)。但是,随着该值变大,您也会注意到更多的滞后。例如,当您移动脸部时,您可能会发现“检测到”的脸部位置落后于脸部的当前位置。这是您需要根据您遇到的噪音量和应用程序所需的速度做出的权衡。