2011年01月10日

顔の部位を検出する

OpenCVには顔認識用の関数とデータが用意されている。顔だけ
ではなく、目や鼻、口といった部位のデータもある。これを
使えば顔の部位を検出し、トラッキングすることが可能だ。

...理論的には。

ところがこれが結構うまく行かない。まず速度が極端に遅い。
鼻など比較的認識しやすものもあるが目や口は形状が似ている
為にうまく行かない。また、洋服のしわ等や髪の毛の影を
誤認識し易い。

ためしに最も精度が良かった鼻にControllerをつけてみた。






うーん、精度が微妙....。しかも検出に1フレ/1秒ぐらいかかる。

すざまじく重い、取れない、精度が悪いの三重苦なので
cvHaarDetectObjectsを使った画像認識を諦めてマーカーを
セットする方向に切り替えた(゚ε゚)

1)100円ショップで蛍光ラベルを買ってくる(肌色と混合しないように
緑色系が良いみたい)
ztomodo.jpg
2)顔に張る(注1)
3)YUVに変換し色で分離する。
4)グレイスケールにしてcvFindContoursを使って輪郭抽出を行う。
marker1.jpg

この方法で検出した結果はこんな感じ。







これならリアルタイムでも処理できる負荷だ。順番の制御とかして
無いのですごい勢いで入れ替わってるけど(笑)、まあ、精度もなんと
かなりそうだ。

かなり良いところまで来たんだけど冬休み&1月3連休も終わって
しまった。これから週一ぐらいしか出来ないなぁ orz

注1)冷静になるとすげえバカみたい!
posted by noboyama at 23:26| Comment(0) | TrackBack(0) | kinect
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/42496613
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック

最近の記事