目次
OpenCV
OpenCV はオープンソースの画像処理ライブラリ。BSDライセンス。
Windows で試す
since 2011-12-26
http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.3.1/
- OpenCV-2.3.1-win-superpack.exe
Ubuntu 10.04 で顔検出
Ubuntu Linux で顔認識のデモ環境を作る。
# Ubuntu 10.04 $ sudo aptitude install libhighgui-dev opencv-doc $ sudo aptitude install libcv-dev libcvaux-dev # 2.0.0-3ubuntu2 というバージョンがインストールされる。
- 最新版は 2.1 とのこと(2010年6月現在)
顔検出のモデルは下記にある
- /usr/share/opencv/haarcascades/***
顔検出のC言語ソースは下記にある
- /usr/share/doc/opencv-doc/examples/c/facedetect.cpp
Makefile はちょっと修正が必要だったので下記を作る
# Makefile OBJECTS = facedetect all: $(OBJECTS) clean: rm -f $(OBJECTS) facedetect: facedetect.cpp $(CXX) $^ -o $@ `pkg-config --cflags --libs opencv` # cvaux !!!
make して実行。
$ ./facedetect --cascade=/usr/share/opencv/haarcascades/haarcascade_frontalface_default.xml
USB接続したWebカメラで顔検出が動いた。
転送速度が速くて解像度の高すぎないものがよさそうだが、 試したのは Pentium M 1.2GHz + Microsoft LifeCam Cinema だったのでもっさり動いた。
検出する前に解像度を下げるようにリサイズすればもっと速くなると思う。
https://code.ros.org/trac/opencv/browser/trunk/opencv/samples/c/facedetect.cpp
Ubuntu 9.04 の場合
公式パッケージ OpenCV 1.0.0
# Ubuntu 9.04 $ sudo aptitude install libhighgui-dev opencv-doc $ sudo aptitude install libcv-dev libcvaux-dev # 1.0.0-6.1ubuntu1 というバージョンがインストールされる。
古いからあまり使わない方がいいかも。。
$ mkdir face $ cd face $ cp /usr/share/doc/opencv-doc/examples/c/facedetect.c . $ gcc facedetect.c -o facedetect `pkg-config --cflags --libs opencv` # 以下、改行せずに $ ./facedetect --cascade=/usr/share/opencv/haarcascades/haarcascade_frontalface_default.xml /usr/share/doc/opencv-doc/examples/c/lena.jpg
opencv-local パッケージを作る
物足りないので checkinstall で 2.1.0 のパッケージを作ってみた。
opencv-local というパッケージ名にした。
http://files.nishimotz.com/opencv-local_2.1.0-1_i386.deb
手順 (Ubuntu 9.04):
$ sudo aptitude install cmake $ tar -xjf OpenCV-2.1.0.tar.bz2 $ mkdir build $ cd build $ cmake ../OpenCV-2.1.0 $ make -j 2 $ sudo checkinstall make install; ldconfig
このパッケージだと examples をインストールしないので。。
$ cp ../opencv/OpenCV-2.1.0/samples/c/facedetect.cpp . $ cp ../opencv/OpenCV-2.1.0/samples/c/lena.jpg . $ gcc facedetect.cpp -o facedetect `pkg-config --cflags --libs opencv` ./facedetect: error while loading shared libraries: libml.so.2.1: cannot open shared object file: No such file or directory $ ls /usr/local/lib/libm libmarsyas.a libml.so libml.so.2.1 libml.so.2.1.0
ldconfig できてなかった。。
$ sudo ldconfig $ ./facedetect --cascade=/usr/local/share/opencv/haarcascades/haarcascade_frontalface_default.xml lena.jpg detection time = 545.424 ms
うごいた。
画面に文字列を表示する
なるべく C++ っぽくやってみる。
http://opencv.jp/opencv-2svn/cpp/drawing_functions.html
Point org は左上からの座標。(0,0) だと画面の外に文字が書かれてしまうようだ。
void put_message(Mat &image, string msg) { // void putText(Mat& img, const string& text, Point org, int fontFace, double fontScale, Scalar color, int thickness=1, int lineType=8, bool bottomLeftOrigin=false) int fontFace = FONT_HERSHEY_PLAIN; double fontScale = 2.0; int thickness = 2; cv::Scalar color(255,0,0); // (b,g,r) cv::putText(image, msg, cvPoint(30, 30), fontFace, fontScale, color, thickness ); }
Mat frameCopy; // ... string cvresult_msg = "hello"; // ... put_message(frameCopy, cvresult_msg); cv::imshow( "opencv result", frameCopy );
Mac Ports
2014-06-16
Python からも使えるように:
$ sudo port install opencv +python27