2013/01/13からのアクセス回数 38460 Debian系のRasbianは豊富なLinuxパッケージを揃えています。今回はOpenCVの顔認識をWebカメラで捉えた 動画に対して使ってみました。 今回使用したWebカメラは、ELECOM Webカメラ 130万画素 マイク内蔵 イヤホンマイク付属 HD対応 ホワイト UCAM-DLN130TWHで、1000円程度で購入できます。 RaspberryPiの良いところは、WebカメラやUSB-Wifiと言った高機能の民生品が安価に使えることです。 OpenCVのインストール †OpenCVのインストールは至って簡単です。 Terminalから以下のコマンドを入力します。 $ sudo apt-get install libopencv-dev テスト用のプログラムの作成 †今回は、詳解OpenCVの2章の例題2を拡張し、顔認識をフレーム処理に追加しました。 ソースは以下の通りです。 #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も簡単です。*1 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 動かしてみる †以下のコマンドで顔認識(facedetect)を起動します。 $ ./facedetect 以下のような画面にカメラの画像が表示され、顔を認識すると赤い矩形で知らせます。 処理速度的には、1秒間に1〜2コマ程度表示され、タイムラグは4秒程度遅れています。 しかし、玄関の人の検出等面白い応用ができると思います。 コメント †皆様のご意見、ご希望をお待ちしております。
Tweet |