GWの最終に一人で何やってんだよ、と言われそうですが、今や世捨て人のようになってしまったと思いつつ、OpenCVを使って顔認識のデモを動かして、遊びましたので記録しておきます。
目次
やりたかったことと基礎知識
やりたかったことは、単に動画で顔認識をしたかった、以上です。知る人ぞ知る、私の会社パイソンネットワークス(青山ファームの旧社名です)がリリースしたScenery upという動画アプリで使った「OpenCV」と、みっつくらい前の職場で開発したedubaseというサービスで使ったffmpegを使えば顔認識ができちゃうかもくらいの基礎知識で取り組みました。
OpenCVは、ビデオとか写真をいい感じに処理してくれるライブラリ群だったりしまして、その歴史的な背景とかはwikiあたりを参照してください。FFmpegは、動画を処理してくれるエンジンみたいなもので、それもご興味ある方は、wikiあたりをお願いします。
どこにいれるか
あんまり試験マシンみたいなものを持っていないので、いつも使っているMacBook Proにインストールしてみました。virtualenvに入れとこうかなとも思ったのですが、
- OpenCV、FFmpegとも大きそう
- いろいろと読んでみるとQtとか必要そう
ということで、Macそのものにインストールしました。大きな流れとしては、
- homebrewでインストールした各種ソフトウェアを最新にする
- pipでインストールした各種ソフトウェアを最新にする
- OpenCVに必要そうなものをしらべてインストールしておく
- OpenCV、FFmpeg、Qtをインストールする
- デモを動かす
そんな感じです
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, HEADHomeNot 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
ちゃんと動いてくれるとこんなウインドウが開きます。
一から、動かした気持になるので、デモだけなのに嬉しいですね。顔認識なので、facedetectを選択し、runします。すると、別のウインドウが開き、顔認識が動作します。
画像認識したお写真は、このブログ記事のアイキャッチにも一旦は設定したのですが、我ながらとても怖い顔認識のお写真だったので削除しました。イケメンが羨ましいです。
(追記:撮り直しまして、アイキャッチに入れなおしました)
もっと高精度の顔認識とか、特殊な目的の顔認識とか、いろいろと研究は進んでいるようですので、腕に覚えのある方は、がっつりいじるのもいいのでしょうね。
私はへなちょこなので、楽しく遊べました。