OpenCV はオープンソースの画像処理ライブラリ。BSDライセンス。
since 2011-12-26
http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.3.1/
Ubuntu Linux で顔認識のデモ環境を作る。
# Ubuntu 10.04 $ sudo aptitude install libhighgui-dev opencv-doc $ sudo aptitude install libcv-dev libcvaux-dev # 2.0.0-3ubuntu2 というバージョンがインストールされる。
顔検出のモデルは下記にある
顔検出のC言語ソースは下記にある
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 $ 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
物足りないので 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 );
2014-06-16
Python からも使えるように:
$ sudo port install opencv +python27