顔認識やってみました。実演。

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