haarlike+カスケードで顔認識

openCVやデジカメとかでやっている顔認識を作ってみました。
ハールライクという矩形フィルタの組み合わせでできます。
顔データベースからの学習は大変そうなんですが、既にパラメタが学習
されていれば、結構簡単に作ることができます。

学習結果は、OpenCVのhaarcascade_frontalface_default.xmlという1MBの
ファイルがあるので、それを使います。

xmlファイルの中身はこんな風に、矩形フィルタの情報と、しきい値T,
重みleft, rightがずらずらとならんでいます。

(見づらいですが、クリックしてオリジナルサイズでみるとわかりやすいです)
各段がステージで、横方向は各ステージが持っているフィルタです。

やり方は簡単で、矩形フィルタの応答値Rがしきい値Tを超えていれば
スコアにrigthを足す。そうでなければleftを足す。
これをステージの全フィルタで、スコアを足していって、
そのスコアがステージしきい値を超えていれば、次のステージに進む。
これを全25ステージをクリアすれば、その箇所は顔と判定します。
この処理を画像のスケールを変えたり、XYずらしながら行います。


検出結果。下に行くほど、ステージが進みます。緑は早い段階(ステージ)で
スコアがしきい値をこえず棄却された箇所です。明らかに顔じゃない箇所は
すぐ棄却されるので、高速処理が可能です。

単純な方法の割には、かなり精度よく顔を検出可能で、結構感動します。
既にある学習結果を使うだけなら、そんなに難しくないと思いますので
一度作ってみることをおすすめします。