OpenCVをちょっと使って顔検出してみた

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 でやれたら面白そうです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)