顔認識やってみました。実演。
まず、準備です。
ここから、パターンのxmlファイルをダウンロードします。今回はhaarcascade_frontalface_default.xml
を使うので、ダウンロードしてproject内のbin/data/
フォルダ内にxmlを放り込みます。以上で準備完了。
testApp.h内に次のコードを追加。
ofxCvHaarFinder finder; ofxCvColorImage vid; ofxCvGrayscaleImage gray; ofVideoGrabber vidGrabber;
testApp.cpp
//-------------------------------------------------------------- void testApp::setup(){ finder.setup("haarcascade_frontalface_default.xml"); vid.allocate(CAM_WIDTH, CAM_HEIGHT); gray.allocate(CAM_WIDTH, CAM_HEIGHT); vidGrabber.setVerbose(true); vidGrabber.initGrabber(CAM_WIDTH, CAM_HEIGHT); }
finder.setup()
: xmlファイルを登録します。
その他はいつもやってるとおりにメモリ領域確保して、ofVideoGrabberの設定します。
//-------------------------------------------------------------- void testApp::update(){ vidGrabber.grabFrame(); vid.setFromPixels(vidGrabber.getPixels(), CAM_WIDTH, CAM_HEIGHT); vid.convertRgbToHsv(); vid.convertToGrayscalePlanarImage(gray, 2); finder.findHaarObjects(gray); }
vidの中に画像を登録して、グレイスケールに変換してgrayに入れます。
finder.findHaarObjects(gray);
っていうので、gray
から先ほどのxmlファイルに合致するようなパターンを見つけ出します。
//-------------------------------------------------------------- void testApp::draw(){ ofSetColor(255,255,255); vidGrabber.draw(0,0); gray.draw(CAM_WIDTH, 0, CAM_WIDTH, CAM_HEIGHT); ofNoFill(); ofSetColor(255, 255, 0); for(int i = 0; i < finder.blobs.size(); i++) { ofRect( finder.blobs[i].boundingRect ); } }
finder.blobsの中に顔がどこにあるとか、いろいろ便利な情報が入っているようです。今回は単純に四角形を表示するだけにしています。
コメントを残す