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 );    

参考 OpenCV 2.1の関数 CとC++の対照表

Mac Ports

2014-06-16

Python からも使えるように:

$ sudo port install opencv +python27
opencv.txt · 最終更新: 2014/06/16 22:48 by Takuya Nishimoto
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0