最近,当我使用“haarcascade_frontalface_alt2.xml”进行面部检测时,我感到很困惑。
当在网络摄像头拍摄的视频中检测到我的脸部时说,虽然我的脸部和相机都没有移动,但返回的脸部坐标和大小会有所改变。为什么会发生这种情况?有没有办法改善它?
由于
答案 0 :(得分:0)
多少钱?只要检测到的面部的坐标和大小值不会大幅跳跃,您就可以使用低通滤波器(即运行平均值)来平滑。
我不知道你使用的语言是什么,但在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越大,您抑制噪音/变化的次数就越多(因此值的随机变化就越小)。但是,随着该值变大,您还会注意到更多滞后。例如,当您移动脸部时,您可能会发现脸部的“检测到”位置落后于您当前的脸部位置。这是您需要根据您遇到的噪音量和所需的应用速度进行权衡。