- 追加された行はこの色です。
- 削除された行はこの色です。
[[FrontPage]]
#contents
2013/01/13からのアクセス回数 &counter;
Debian系のRasbianは豊富なLinuxパッケージを揃えています。今回はOpenCVの顔認識をWebカメラで捉えた
動画に対して使ってみました。
今回使用したWebカメラは、[[ELECOM Webカメラ 130万画素 マイク内蔵 イヤホンマイク付属 HD対応 ホワイト UCAM-DLN130TWH>http://www.amazon.co.jp/gp/product/B004I8V6OE/]]で、1000円程度で購入できます。
&ref(WebCam.png);
RaspberryPiの良いところは、WebカメラやUSB-Wifiと言った高機能の民生品が安価に使えることです。
** OpenCVのインストール [#j4798715]
OpenCVのインストールは至って簡単です。
Terminalから以下のコマンドを入力します。
#pre{{
$ sudo apt-get install libopencv-dev
}}
** テスト用のプログラムの作成 [#f3472834]
今回は、詳解OpenCVの2章の例題2を拡張し、顔認識をフレーム処理に追加しました。
ソースは以下の通りです。
#pre{{
#include "highgui.h"
#include "cv.h"
int main( int argc, char** argv ) {
char* cascade = "/usr/share/opencv/haarcascades/haarcascade_frontalface_alt.xml";
double w = 160;
double h = 120;
cvNamedWindow( "Example2", CV_WINDOW_AUTOSIZE );
CvCapture* capture = NULL;
if (argc > 1){
capture = cvCreateFileCapture( argv[1] );
}
else {
capture = cvCreateCameraCapture( 0 );
// (2)キャプチャサイズを設定する.
cvSetCaptureProperty (capture, CV_CAP_PROP_FRAME_WIDTH, w);
cvSetCaptureProperty (capture, CV_CAP_PROP_FRAME_HEIGHT, h);
}
IplImage* frame;
// 正面顔検出器の読み込み
CvHaarClassifierCascade* cvHCC = (CvHaarClassifierCascade*)cvLoad(cascade);
// 検出に必要なメモリストレージを用意する
CvMemStorage* cvMStr = cvCreateMemStorage(0);
// 検出情報を受け取るためのシーケンスを用意する
CvSeq* face;
while(1) {
frame = cvQueryFrame( capture );
if( !frame ) break;
// 画像中から検出対象の情報を取得する
face = cvHaarDetectObjects(frame, cvHCC, cvMStr);
for (int i = 0; i < face->total; i++) {
// 検出情報から顔の位置情報を取得
CvRect* faceRect = (CvRect*)cvGetSeqElem(face, i);
// 取得した顔の位置情報に基づき、矩形描画を行う
cvRectangle(frame,
cvPoint(faceRect->x, faceRect->y),
cvPoint(faceRect->x + faceRect->width, faceRect->y + faceRect->height),
CV_RGB(255, 0 ,0),
2, CV_AA);
}
cvShowImage( "Example2", frame );
char c = cvWaitKey(33);
if( c == 27 ) break;
}
// 用意したメモリストレージを解放
cvReleaseMemStorage(&cvMStr);
// カスケード識別器の解放
cvReleaseHaarClassifierCascade(&cvHCC);
cvReleaseCapture( &capture );
cvDestroyWindow( "Example2" );
}
}}
Makefileも簡単です。
#pre{{
CXX = g++
LDFLAGS = -lopencv_legacy -lopencv_highgui -lopencv_core -lopencv_ml -lopencv_video \
-lopencv_imgproc -lopencv_calib3d -lopencv_objdetect -L/usr/lib
CPPFLAGS = -g -I/usr/include/opencv -I/usr/include/opencv2
all: facedetect captureimage
}}
** 動かしてみる [#lee3dc8a]
これを実行した結果が以下のような画面になりました。
&ref(Myface.png);
処理速度的には、1秒間に1〜2コマ程度表示され、タイムラグは4秒程度遅れています。
しかし、玄関の人の検出等面白い応用ができると思います。
** コメント [#p704e025]
#vote(おもしろかった[42],そうでもない[0],わかりずらい[4])
#vote(おもしろかった[43],そうでもない[0],わかりずらい[4])
皆様のご意見、ご希望をお待ちしております。
#comment_kcaptcha