最近、「haarcascade_frontalface_alt2.xml」で顔検出をすると、おかしなことが起きて困惑しています。
Web カメラで撮影した映像から自分の顔を検出すると、自分の顔もカメラも動かないのに、返される顔の座標とサイズが少し変わってしまいます。なぜこれが起こるのですか?それを改善する方法はありますか?
ありがとう
最近、「haarcascade_frontalface_alt2.xml」で顔検出をすると、おかしなことが起きて困惑しています。
Web カメラで撮影した映像から自分の顔を検出すると、自分の顔もカメラも動かないのに、返される顔の座標とサイズが少し変わってしまいます。なぜこれが起こるのですか?それを改善する方法はありますか?
ありがとう
少しってどのくらい?検出された顔の座標とサイズの値が乱高下しない限り、ローパス フィルター (移動平均) を使用して平滑化できる場合があります。
使用している言語はわかりませんが、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 を大きくすればするほど、ノイズ/変動が抑制されます (値のランダムな変化が少なくなります)。ただし、その値が大きくなると、遅延も大きくなります。たとえば、顔を動かすと、「検出された」顔の位置が現在の顔の位置よりも遅れていることがわかる場合があります。これは、発生しているノイズの量とアプリケーションに必要な速度に応じて行う必要があるトレードオフです。