face_counterという、指定した画像の中に何個人間の顔が含まれているかを数字で返してくれるコマンドを作成したのでそれのご案内
概要
face_counterは指定した画像の中に、人間の顔が何個含まれているかを数値で教えてくれるシンプルなコマンドラインツールです
内部でOpenCVを使用して、顔を判定しています
ですので、インストールする際には別途OpenCVのインストールも必須です(これが割と難関)
使用方法
READMEにあるように、OpenCVのインストールから行います
OSXの場合はhomebrewを使用して、以下のようにインストールします
ちなみに僕の環境だとOpenCV 2.4.12でした
$ brew tap homebrew/science
$ brew install opencv
そして、gem installでface_counter自身をインストールします
$ gem install face_counter
これで準備は完了です、あとはface_counterコマンドが実行できるようになっているので実行しましょう
$ face_counter /path/to/image
内部構成
スーパーシンプルに、OpenCVで顔の判定定義のファイルを用いて顔判定をしている箇所の個数を標準出力で表示しているだけです
image = OpenCV::IplImage::load input_filename
haar_xml_file = File.join(File.dirname(__FILE__), 'haarcascade_frontalface_alt.xml')
detector = OpenCV::CvHaarClassifierCascade::load haar_xml_file
p detector.detect_objects(image).count
ちなみに、homebrewでインストールしたOpenCV(2.4.12)で入る/usr/local/share/OpenCV/haarcascades/以下の定義ファイルは古いらしくて、これを持ってきて実行するとエラーになった
error: (-2) The node does not represent a user object (unknown type?) in function cvRead (OpenCV::CvStsError)
なのでこの記事を参考に、最新版のxmlをインターネットから取得してきて実行するとうまくいきました
おわりに
このface_counterを使うことで、僕の日課である自撮りがより精度が高くなると思っています
具体的には、自動で撮られた自撮りに対してこのface_counterを実行することで、確実に顔が写っているかどうかの判定ができるので、何も写っていない真っ暗な自撮り(?)をGoogle Photoなどにアップロードしなくて済むようになり、便利になります
参考リンク
http://qiita.com/araya/items/b599318236cd6feee7c0
http://shokai.org/blog/archives/8627