顔認識によるフェイスモーフィング

ふと、oFのフォーラムでこんな動画を見かけた。

Elastic Reality

フェイスモーフって前から面白そうだなと思ってたんだけど、
実際、案件とかで作れって言われたら自分だったらどう作るかなーと興味が出たので
やってみた。


※著作権的に公に公開出来そうなテスト用顔写真ってなかなかない・・
とりあえず自分の写真以外にUPしても怒られなさそうな弊社アニメ好きディレクターの写真を採用、、(ゴメンナサイ)

で、どうやるかというと、実際カラクリはそんな難しい事じゃなくて、
openFramewokrsのofxFaceTrackerでとりあえず2枚の画像から顔認識させて三角形のメッシュを作る。

 

 

ty_20141212_01

顔画像A上と顔画像B上のそれぞれ目、鼻、口の位置にあるUV座標をそれぞれ全く同じ動きさせる。
各画像を重ねて表示してアルファフェードでなじませているだけという単純な仕組み。

 

とりあえずそれとなくいい感じにモーフィングしているっぽい。
けど、よく見るとそれぞれの顔のパーツ以外は頂点座標は凄く適当に打っているので
顔パーツ意外はあまりモーフィングしている様には見えない。
これをもっとクオリティあげるにはもっと2枚の画像間で共通させる部分を増やせば良い。
例えば、頭部の輪郭や、右肩、左肩、胸の位置などとりあえず共通すると思われる特徴点をどんどん追加
配置すればもっといい結果が生まれるはず。

こういうのはプリレンダリングでいいのであれば、AfterEffectとかでじっくりと
二枚画像間で共通している箇所を指定してあげればもっと制度の高いモーフィングができるわけで・・
顔認識させて動的にUV座標を打ってやる意味あるのかとも思うがまぁ、満足したからいっか、、

ソースはかなり無理矢理なコードで荒れてたりするけど、エイッ!ヤー!でUPしておきますので
お好きにどうぞ。

FaceMorphing.zip
動作環境
oF0.8.4
必要なアドオン ofxFaceTracker, ofxOpenCv, ofxCv, ofxDelaunay
モーフィングさせたい顔画像2枚を用意してdataフォルダ内に置いてください。

 

15/1/24 追記

githubにソースをUPしました。

 


related article