openFrameworksのアドオンであるofxFaceTrackerにあるサンプルコードを使って、撮影済みの動画ファイル(.mov)を読み込んで顔を追跡します。
サンプルコードは
ofxFaceTracker/example-non-realtime
にあるものを使用します。
そのまま使えるかなと思って
プロジェクトのbin/dataに読み込みたいファイルvideo.movを置いて実行してみたのですが
途中で追跡できなくなるし追跡できないと動画がフリーズするしで上手くいきませんでした。
サンプルコードを少し書き換えたら上手くいったのでシェアします。
書き換えるのはofApp.cppです。
####① ofApp::setup( )
video.play( ) を追加
ofApp.cpp
void ofApp::setup() {
video.load("video.mov");
video.play();
tracker.setup();
tracker.setRescale(.25);
tracker.setIterations(100);
tracker.setClamp(10);
tracker.setTolerance(.5);
tracker.setAttempts(4);
}
↑もしかしたら追加しなくても動くかも?
####② ofApp::update( )
video.nextFrame( ) をコメントアウト
ofApp.cpp
void ofApp::update() {
video.update();
if(video.isFrameNew()) {
tracker.update(toCv(video));
trackedFrames.push_back(tracker.getImageMesh());
vector<float> curGesture;
for(int i = 0; i < gestureCount; i++) {
curGesture.push_back(tracker.getGesture(gestureIds[i]));
}
trackedGestures.push_back(curGesture);
//video.nextFrame();
}
}
これで検出できなかったときに動画がフリーズすることはないと思います(たぶん)。
FaceTrackerの導入やサンプルコードを使ったプロジェクトの作り方とかはこちらの記事(FaceTrackerを試してみた)を参考にしてください。