開発 備忘録 OpenCVで顔認識をして遊んだ件

GWの最終に一人で何やってんだよ、と言われそうですが、今や世捨て人のようになってしまったと思いつつ、OpenCVを使って顔認識のデモを動かして、遊びましたので記録しておきます。

やりたかったことと基礎知識

やりたかったことは、単に動画で顔認識をしたかった、以上です。知る人ぞ知る、私の会社パイソンネットワークス(青山ファームの旧社名です)がリリースしたScenery upという動画アプリで使った「OpenCV」と、みっつくらい前の職場で開発したedubaseというサービスで使ったffmpegを使えば顔認識ができちゃうかもくらいの基礎知識で取り組みました。
OpenCVは、ビデオとか写真をいい感じに処理してくれるライブラリ群だったりしまして、その歴史的な背景とかはwikiあたりを参照してください。FFmpegは、動画を処理してくれるエンジンみたいなもので、それもご興味ある方は、wikiあたりをお願いします。

どこにいれるか

あんまり試験マシンみたいなものを持っていないので、いつも使っているMacBook Proにインストールしてみました。virtualenvに入れとこうかなとも思ったのですが、

  • OpenCV、FFmpegとも大きそう
  • いろいろと読んでみるとQtとか必要そう

ということで、Macそのものにインストールしました。大きな流れとしては、

  1. homebrewでインストールした各種ソフトウェアを最新にする
  2. pipでインストールした各種ソフトウェアを最新にする
  3. OpenCVに必要そうなものをしらべてインストールしておく
  4. OpenCV、FFmpeg、Qtをインストールする
  5. デモを動かす

そんな感じです

1.homebrewでインストールした各種ソフトウェアを最新にする

もはや説明の必要もないのですが、homebrewってなーに?という方はこちらを。アップデートは、

$ brew update

久しくMacの開発環境は、触っていなかったので、そこそこ時間がかかりました。なにか注意点を考えたのですが、とりわけ思いつくこともなく、つつがなく終わってしまいました。
OpenCVは、scienceのカテゴリに入っているとのことなので、tapしておきました。

$ brew tap homebrew/science

2.pipでインストールした各種ソフトウェアを最新にする

1と同じなのですが、pipをつかってインストールしたソフトウェアを最新にしておきましょう。普通は、
$ pip list -o
とか、やってひとつひとつアップデートするのでしょうが、面倒だ!一度にやりたい!という方はこちらをどうぞ。今回はお試しということで、一括でやっちゃいました。

$ sudo pip-review --auto
Password:

sudoつけないと怒られるとかPassword聞かれるとかは、適時うまいことをやってください。またSphinxがあると動的にドキュメントを作ってくれるという話を聞きましたので、ついでにインストールしておきます。

$ pip install Sphinx

Sphinxは、いつかインストールしたいと思っていたので、よしとします。

3.OpenCVに必要そうなものをしらべてインストールしておく

そろそろOpenCVに近づいてくるわけですが、まだインストールはしません。理由は、OpenCVがよくわかっていないからです。まずは、調べるということで、おもむろに、brew listとかしてみますと、gdbm openssl  sqlite しか入っていなかったりしたので、

$ brew install python

としておきました。わかっていないので、違うかもしれませんが、どうもPython2/3がインストールされていても、brewでインストールされていないとOpenCVのインストールで怒られちゃうようで、brewで入れなおした感じです。あわせてnumpyも必要なようですが私は、すでにインストールしてあったので、スキップしました。インストールする方はこんな感じ。
$ sudo pip install numpy
終わりましたらいよいよOpenCVのインフォメーションをみてみます。

$ brew info opencv

 
だらだらとインフォメーションがでてきます。

opencv: stable 2.4.11 (bottled), devel 3.0.0-rc1, HEAD
 
Home
Not installed From: https://github.com/homebrew/homebrew-science/blob/master/opencv.rb ==> Dependencies Build: cmake ✘, pkg-config ✘ Required: jpeg ✘, libpng ✘, libtiff ✘ Recommended: eigen ✘, openexr ✘, homebrew/python/numpy ✘ Optional: gstreamer ✘, jasper ✘, libdc1394 ✘, openni ✘, qt ✘, tbb ✘, ffmpeg ✘ ==> Options --32-bit Build 32-bit only --c++11 Build using C++11 mode --with-cuda Build with CUDA support --with-ffmpeg Build with ffmpeg support --with-gstreamer Build with gstreamer support --with-jasper Build with jasper support --with-java Build with Java support --with-libdc1394 Build with libdc1394 support --with-opengl Build with OpenGL support --with-openni Build with openni support --with-qt Build the Qt4 backend to HighGUI --with-quicktime Use QuickTime for Video I/O insted of QTKit --with-tbb Enable parallel code in OpenCV using Intel TBB --without-eigen Build without eigen support --without-numpy Use a numpy you've installed yourself instead of a Homebrew-packaged numpy --without-opencl Disable GPU code in OpenCV using OpenCL --without-openexr Build without openexr support --without-python Build without Python support --without-tests Build without accuracy & performance tests --devel Install development version 3.0.0-rc1 --HEAD Install HEAD version hdkworks-MBP:~ hideki$ brew list gdbm openssl python readline xz git p7zip python3 sqlite

上部に、必要なライブラリがかいてありますので、先にインストールします。

$ brew install cmake
$ brew install eigen
$ brew install jasper
$ brew install tbb
$ brew install libvpx

こんな感じです。それぞれの役割とかはGoogle先生にお聞きいただけると助かります。
 

4.OpenCV、FFmpeg、Qtをインストールする

ようやくたどり着きそうなのですが、動画を処理するためにFFmepgを先にインストールしておきます。

$ brew install ffmpeg --with-libvorbis --with-libvpx --with-schroedinger

上記でインストールしたライブラリ群をwithでインストールしています。おまじないでもいいです。問題なく終わったら、念のため、Qtのインフォメーションをみておきます。

$ brew info qt
 qt: stable 4.8.6 (bottled), HEAD
 https://www.qt.io/
 Not installed
 From: https://github.com/Homebrew/homebrew/blob/master/Library/Formula/qt.rb
 ==> Dependencies
 Optional: d-bus ✘, mysql ✘, postgresql ✘
 ==> Options
 --universal
 Build a universal binary
 --with-d-bus
 Build with d-bus support
 --with-developer
 Build and link with developer options
 --with-docs
 Build documentation
 --with-mysql
 Build with mysql support
 --with-postgresql
 Build with postgresql support
 --with-qt3support
 Build with deprecated Qt3Support module support
 --HEAD
 Install HEAD version
 ==> Caveats
 We agreed to the Qt opensource license for you.
 If this is unacceptable you should uninstall.

Qtって、データベース、必要だったんですね。さすがに、データベースは要らないのでそのままインストールしてしまいます。

$ brew install qt

これで、Qtがインストールできたら、いよいよOpenCVです。現時点で、動画を処理するソフトウェアやらウインドウを作るソフトウェアやらがインストールされていることになります。すごいですね。
さて、OpenCVのインストールです。

$ brew install opencv --with-eigen --with-jasper --with-libtiff --with-qt --with-tbb

多少時間がかかりますが、お茶でも飲んで待ちます。10分程度かと思いますが、無事終了しました。よく見ると、ワーニングが出ておりまして、
Warning: opencv dependency gcc was built with a different C++ standard
library (libstdc++ from clang). This may cause problems at runtime.
となっていましたが、了解!と元気よく返事をして、そのままにすることにしました。遊びたいだけなので。

5.デモを動かす

以上で、全部インストールは終わっているはずです。デスクトップにテスト用にディレクトリ作って、動かしてみます。
$ cd Desktop/
$ mkdir dev
$ cd dev/
$ tar zxf /Library/Caches/Homebrew/opencv-2.4.11.tar.gz
$ cd opencv-2.4.11/samples/python2
$ python demo.py
 running: edge.py
demo

ちゃんと動いてくれるとこんなウインドウが開きます。


 
 
一から、動かした気持になるので、デモだけなのに嬉しいですね。顔認識なので、facedetectを選択し、runします。すると、別のウインドウが開き、顔認識が動作します。
画像認識したお写真は、このブログ記事のアイキャッチにも一旦は設定したのですが、我ながらとても怖い顔認識のお写真だったので削除しました。イケメンが羨ましいです。
(追記:撮り直しまして、アイキャッチに入れなおしました)
もっと高精度の顔認識とか、特殊な目的の顔認識とか、いろいろと研究は進んでいるようですので、腕に覚えのある方は、がっつりいじるのもいいのでしょうね。
私はへなちょこなので、楽しく遊べました。