「3D Face Reconstruction」は画像やムービー内の人物の顔から3Dの顔モデルを生成することができます。生成した顔モデルは目などの一部だけを別の人物の顔に合成したり、顔全体を置き換えたりすることも可能です。

GitHub - YadiraF/PRNet: The source code of 'Joint 3D Face Reconstruction and Dense Alignment with Position Map Regression Network'.

https://github.com/YadiraF/PRNet

3D Face reconstructionは上海交通大学のヤオ・フェン氏が発表した論文である「(PDFファイル)Joint 3D Face Reconstruction and Dense Alignment with Position Map Regression Network」をもとに、同氏自らが実際に実装したものです。

3D Face reconstructionの主な機能としては、以下の5点が挙げられています。

◆顔の位置検出

人物の画像から顔部分を特定し、顔面にある頂点の位置を検出します。なお、正面を向いていない画像でも合成は可能ですが、画像から確認できない部分を3Dモデル化することはできないとのこと。



◆3D顔合成

画像から各頂点に対応する色を取得して、顔モデルを作り上げます。



◆顔角度の判定

画像内の人物が、どの方向を向いているのかを正確に割り出すことで、別の顔を合成するときの違和感をなくすことが可能です。



◆奥行きの認識

以下の画像のように、斜めの角度で写っている人物の顔を3Dモデル化しても、目から離れた位置に耳があるような3Dモデルを作ることはなく、違和感のない位置関係を再現できます。



◆テクスチャ編集

人物の顔を3Dモデル化することで、以下のように人物の顔にアニメキャラクターの目を合成することや……



トランプ大統領の顔をいろいろな人物の顔として置き換えることも可能です。



また、GPUを使えば3Dモデルを高速に生成できるとのことで、GeForce GTX 1080を使用した場合は100fps以上のムービーからリアルタイムに顔モデルを生成できるそうです。実際にリアルタイムに顔モデルを生成している様子は以下のムービーで確認できます。

Joint 3D Face Reconstruction and Dense Alignment with Position Map Regression Network - YouTube

3D Face ReconstructionはPython 2.7で開発されており、インストール方法や実行させるために必要なライブラリについては、3D Face Reconstructionのドキュメントで説明されています。