Webを散策していたらOpenCVのサンプルプログラムの顔検出をWindowsで動かす事例があったので、同様のことがLinuxでできないかLinuxMintでやってみました。環境はLinuxMint11 64bitです。
C言語版でも作業は簡単で、あっという間に動作しました。Python版はコンパイル方法などを悩む必要がない分、更に簡単でした。
まず、C言語版を試してみました。
1.OpenCVのインストール
Synapticパッケージマネージャで「OpenCV」を検索し、以下のものを依存するものも含めてインストールした。
- opencv-doc
- python-opencv
- libcv2.1
- libhighgui2.1
- libcvaux2.1
- libcv-dev
- libcvaux-dev
- libhighgui-dev
この時点では別にPythonで動かそう、というつもりはなかったけど、とりあえずpython-opencvもインストールしてしまいました。
2.プログラムの作成
opencv.jp のサンプルプログラムをコピペして、main.cという名前で保存する。
3.コンパイル
以下のコマンドによりコンパイル。インクルードファイルやライブラリの位置は pkg-config で勝手に探してもらう。
$ g++ -o main main.c `pkg-config --cflags opencv` `pkg-config --libs opencv`
4.カスケードファイルの準備
標準で入っているカスケードファイルを検索すると、
$ find /usr -name "haar*" -print /usr/share/doc/opencv-doc/haartraining.htm /usr/share/doc/opencv-doc/examples/haarcascades /usr/share/doc/opencv-doc/examples/haarcascades/haarcascades /usr/share/doc/opencv-doc/examples/haarcascades/haarcascades/haarcascade_mcs_eyepair_big.xml.gz /usr/share/doc/opencv-doc/examples/haarcascades/haarcascades/haarcascade_frontalface_alt2.xml.gz /usr/share/doc/opencv-doc/examples/haarcascades/haarcascades/haarcascade_mcs_mouth.xml.gz /usr/share/doc/opencv-doc/examples/haarcascades/haarcascades/haarcascade_frontalface_alt.xml.gz /usr/share/doc/opencv-doc/examples/haarcascades/haarcascades/haarcascade_mcs_nose.xml.gz /usr/share/doc/opencv-doc/examples/haarcascades/haarcascades/haarcascade_lefteye_2splits.xml.gz /usr/share/doc/opencv-doc/examples/haarcascades/haarcascades/haarcascade_mcs_righteye.xml.gz /usr/share/doc/opencv-doc/examples/haarcascades/haarcascades/haarcascade_frontalface_default.xml.gz /usr/share/doc/opencv-doc/examples/haarcascades/haarcascades/haarcascade_eye_tree_eyeglasses.xml.gz /usr/share/doc/opencv-doc/examples/haarcascades/haarcascades/haarcascade_mcs_lefteye.xml.gz /usr/share/doc/opencv-doc/examples/haarcascades/haarcascades/haarcascade_fullbody.xml.gz /usr/share/doc/opencv-doc/examples/haarcascades/haarcascades/haarcascade_mcs_upperbody.xml.gz /usr/share/doc/opencv-doc/examples/haarcascades/haarcascades/haarcascade_frontalface_alt_tree.xml.gz /usr/share/doc/opencv-doc/examples/haarcascades/haarcascades/haarcascade_righteye_2splits.xml.gz /usr/share/doc/opencv-doc/examples/haarcascades/haarcascades/haarcascade_profileface.xml.gz /usr/share/doc/opencv-doc/examples/haarcascades/haarcascades/haarcascade_mcs_eyepair_small.xml.gz /usr/share/doc/opencv-doc/examples/haarcascades/haarcascades/haarcascade_lowerbody.xml.gz /usr/share/doc/opencv-doc/examples/haarcascades/haarcascades/haarcascade_eye.xml.gz /usr/share/doc/opencv-doc/examples/haarcascades/haarcascades/haarcascade_upperbody.xml.gz
となったので、
$ cp /usr/share/doc/opencv-doc/examples/haarcascades/haarcascades/*.gz . $ gunzip *.gz
としてすべて展開した。
5.動作テスト
$ ./main ファイル名.jpg(pngでもOKでした)
でWindowが表示されて検出された顔に◯がつきました。まあ、そこそこ・・・・でしょうかね。
・・・・で、さらに、Python版を試してみました。
6.Python版のプログラムの作成
opencv.jp のサンプルプログラムのところにある「Python版に切り替え」というボタンを押した後、コードをコピペして、main.pyという名前で保存して、
$ chmod 755 main.py
として実行権限をつけてやる。
7.Python版の動作テスト
カスケードファイルは既に準備済みなので、
$ ./main.py ファイル名.jpg
でC言語版と同様の結果になりました。
やっぱりPythonは楽ちんですね~~。(楽ちんになるようにしてくれている方のおかげですが)
これを Raspbian でやれたら面白そうです。