2014年10月24日金曜日

【openframeworks】ofxFaceTrackerで遊んでみた。サンプル解説

 スマートホームがなんちゃら…のシリーズの更新が止まってしまっていますが…。
最近openframeworksをはじめまして、その習作としてofxFaceTrackerを利用したプログラムの作成を行ってみました。実行環境はOS X 10.9 Marvericks , MacBook Pro early 2011 13inchです。

この記事では
  1. ofxFaceTrackerのサンプルプログラムのレビュー
  2. Webカメラから取得した画像の一部に切り取り、貼り付けを行い、笑顔いっぱいデモの実装
  3. 複数の画像パーツとその並進、回転を利用した笑い男デモの実装
の3点の内容をお送りいたします。

1. ofxFaceTrackerのサンプルプログラムのレビュー  

 レビューといってもそれぞれがどんな動きをするプログラムなのか確認した程度になりますが…ofxFaceTrackerのサンプルプログラムは以下のようなものがあります。
  • example-advanced
  • example-align-eyes
  • example-calibration
  • example-blink
  • example-cutout
  • example-expression
  • example-extraction
  • example-non-realtime
  • example-threaded
全てに共通することなのですが、それぞれのbinディレクトリにdataディレクトリを作成し、modelディレクトリをコピーする必要があります。元のmodelディレクトリのパスはofxFaceTracker->libs->FaceTracker->modelみたいな感じです。あとはそれぞれのサンプルごとに必要なディレクトリやファイルが変わってくるので注意が必要です。

 example-non-realtimeはdataディレクトリ内のvideo.movを読み込んでフェイストラッキングを施すというサンプルに成っています。video.movは自分で用意する必要があります。Webカメラ等を使用してリアルタイムに取り込みを行う必要がないので、超高画質な動画ファイルや特殊なカメラで撮影した動画ファイルに対してフェイストラッキングを行いたいようなときには役立ちそうです。

 example-align-eyesは静止画像を読み込んで、顔を認識し、両目を繋ぐ直線と画像の縦軸が直交するように画像を回転させるプログラムになっています。静止画像に対する処理を行いたいときに参考になりそうです。dataフォルダの中にrawフォルダを作成し、その中に画像ファイルを入れることでプログラムで画像を読み込ませます。

 example-expressionは表情認識を行うプログラムです。例えば笑った状態のフェイストラッキングの結果をプログラムに学習させておいて、後からプログラムに「この顔は笑顔である、この顔は笑顔でない」などの評価させることができます。

 example-calibration, example-cutoutはi386 Architecture(32bitアーキテクチャ?)では実行できませんでした。自分の環境で実行できないものはしょうがないのでパスします。

example-advancedはファイストラッキングを行い、顔パーツや輪郭の特徴点を三次元座標上で表示するプログラムです。実行してみた感じでは、顔を探す部分の処理がとても重く、顔を探している間は2fpsほどしかでません。顔を見つけた後は60fpsで動作していました。以下は実行している時に撮影した動画です。
example-blinkは瞬きを認識するプログラムです。瞬きを使って他のプログラムをコントロールすることを目指しているプログラムの用で、ofxOSCのインクルードが必要です。XcodeのBuild SettingsでHeader Search Pathを書き足す必要があり、少し厄介です。
僕が引っかかった点を紹介します。

 画像にあるようにBuild Settingには簡易表示であるBasicと全設定項目を表示するAllがあるのですが、BasicになっているとHeader Search Pathsが表示されず、設定することができないので、気を付けましょう。ここに引っかかるのは僕だけかもしれませんが。

 以下は実行している時に撮影した動画です。example-advancedと同じように顔を見つけるまでは処理に時間がかかりますが、見つけた後は比較的滑らかです。瞬きに合わせて左上のグラフ表示の四角の中が白くフラッシュするのがわかるかと思います。まばたき上表をOSCを介して他のプログラムに伝えることができるようです。
 
 example-extractionは何をするプログラムなのかよくわかりませんでした…。勉強不足ですみません。実際の顔の画像を3Dテクスチャ上に貼り付けているような感じを受けますが…よくわかりませんでした。一応実行中に撮影した動画があります。
 
example-threadedはthreadを使用して、顔を見つけるまでの画像描画の遅延を解消しています。advancedとプログラムの表示結果は同じなのですが、advancedで見受けられた顔を発見するまでに”2fpsしか出ない”というような症状がありませんでした。実行している際の動画が以下になります。

以上でofxFaceTrackerの簡単なレビューを終わります。
2. Webカメラから取得した画像の一部に切り取り、貼り付けを行い、笑顔いっぱいデモの実装
3.複数の画像パーツとその並進、回転を利用した笑い男デモの実装
についてはレビューの記述だけでこの記事がいっぱいになってしまったので次回以降に回します。

0 件のコメント:

コメントを投稿