顔認識やってみました。実演。
まず、準備です。
ここから、パターンの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の中に顔がどこにあるとか、いろいろ便利な情報が入っているようです。今回は単純に四角形を表示するだけにしています。
コメントを残す