目次
概要
作成したもの
- PRNetを使って芸能人の顔画像から3Dモデルを作成
使用した技術・ライブラリ
- Position Map Regression Network
動機
VRchatのアバターをblenderで作成しようと思ったのがきっかけで、AIを使って画像から3Dモデルを自動で作成できたら楽だなーということで3D Face Reconstructionを試してみました。
3D Face Reconstructionとは
上海交通大学のヤオ・フェン氏が発表した論文である「Joint 3D Face Reconstruction and Dense Alignment with Position Map Regression Network」をもとに、同氏自らが実際に実装したものです。今回はその中の3D顔合成を利用していていきたいと思います。
インストール
https://github.com/YadiraF/PRNetにコードが公開されているので、これをgit cloneして環境を用意して動かしていきたいと思います。
PRNETのインストール
適当な作業フォルダを作成し、その中でgit cloneをしてプロジェクトをコピーします。
git clone https://github.com/YadiraF/PRNet
学習済みのモデルをBaido Drive or Google Driveからダウンロードします。
ダウンロードしたら、
256_256_resfcn256_weight.data-00000-of-00001
をクローンしたフォルダ
PRNet/Data/net-data
に保存します。
Python環境のセットアップ
PRNetはPython2.7系で動かす必要があります。
必要なライブラリをインストールしていきます。
PRNetをインストールしたフォルダに移動し
cd PRnet
指定された必要なライブラリ(numpy,scikit-image,scipy,tensorflow)をまとめてインストールします。
pip install -r requirements.txt
必須ではありませんが、dlibを使ったほうが顔認識の精度が上がります。
sudo brew install build-essential cmake
sudo brew install libgtk-3-dev
sudo brew install libboost-all-dev
pip install dlib
3Dオブジェクト表示アプリをインストール
MeshlabかMicrosoft 3D Builderをインストールすることで、生成した3Dオブジェクトを表示、編集することができます。
ただ表示するだけであればMacだと標準の画像ブラウザで大丈夫そうです。
実行
PRNetをインストールしたフォルダで、読み込ませる画像を入れるフォルダと出力した3Dオブジェクトを保存するフォルダを作成します。
mkdir PRNet/3d/input
mkdir PRNet/3d/output
作成したinputフォルダの中に3D化したい顔画像を入れます。
今回は、加護さんの画像を使用しました。
加護さん顔画像
次のコマンドを実行することで、3Dオブジェクトを作成することができます。
python demo.py -i PRNet/3d/input -o PRNet/3d/output --isDlib True
CPU環境でも実行すると、数秒くらいで
Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
と表示されますが、Outputフォルダを確認すると拡張子が.objのファイルが作成できています。
このファイルをインストールした3Dオブジェクト表示アプリで開くと、顔の3Dオブジェクトをくるくる回して見ることが出来ます。
加護さん3D
結果
うまいこと加護さんを3D化することができました。
けれども、若干色が薄くなった気がしたので、
元の画像の色合いを鮮やかにし、再度3D化したら色が濃くなりました。
加護さん3D(色調整)
おまけ
チンパンジー顔画像
人間以外の動物でもできるかどうか検証してみました。
チンパンジー3D
チンパンジーは比較的に人間と似ているため、顔を認識することができ3D化することができました。
結論・感想
何も考えることなく、gitcloneしただけですぐにサンプルコードを動かすことが出来ました。blenderでそのまま.objファイルをインポートすることも出来ます。今回は顔のみの3D化でしたが、全身画像から3Dに出来る日が来るのはそう遠くはないのではないのでしょうか。