Deep3DFaceReconstructionで顔画像から3Dモデルを生成してみた

2dface-to-3dfaceAI(人工知能)
Sponsored Links

Deep3DFaceReconstructionで1枚の顔画像(2D)から、顔の3Dモデルを生成できるようなので試してみる

Sponsored Links
Sponsored Links
Sponsored Links

やってみた

試すのはgithubのDeep3DFaceReconstruction

GitHub - microsoft/Deep3DFaceReconstruction: Accurate 3D Face Reconstruction with Weakly-Supervised Learning: From Single Image to Image Set (CVPRW 2019)
Accurate 3D Face Reconstruction with Weakly-Supervised Learning: From Single Image to Image Set (CVPRW 2019) - microsoft/Deep3DFaceReconstruction

Paper: Accurate 3D Face Reconstruction with Weakly-Supervised Learning: From Single Image to Image Set

変換元の顔画像(pngファイル)

変換元の顔画像

 

 

 

変換後(objファイル)

変換後(objファイル)

できた!

耳や歯、髪の毛は対象外のようだが、1枚の画像から3Dのobjファイルを生成できた

Sponsored Links

やりかた(使い方)

readme.mdのUsageに沿ってやれば基本はOK

ただバージョン関連などでエラーが出ることはあった(後述)

実行環境

  • Linux Ubuntu 18.04 LTS (Windows10 (1903)+ WSL)
  • NVIDIA CUDA
$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2017 NVIDIA Corporation
Built on Fri_Nov__3_21:07:56_CDT_2017
Cuda compilation tools, release 9.1, V9.1.85

WSLからだとGPU使ってない模様…

python環境を構築

pythonは3.6でやってみる

以降はこのpython仮想環境(activateした状態)で作業

$ virtualenv -p python3.6 venv36
$ source venv36/bin/activate
(venv36)$
必要なもろもろをインストール

readmeにはtensorflow>=1.4とあるので、特に指定せず最新でやってみる

$ pip install tensorflow-gpu
$ pip install opencv-python
$ pip install pillow
$ pip install scipy
インストールしたものを確認(抜粋)

tensorflowはv2になった

$ python --version
Python 3.6.8
$ pip freeze
tensorflow-gpu==2.0.0
opencv-python==4.1.1.26
Pillow==6.2.1
scipy==1.3.2

Deep3DFaceReconstructionの準備

githubからDeep3DFaceReconstructionをclone

$ git clone https://github.com/Microsoft/Deep3DFaceReconstruction
$ cd Deep3DFaceReconstruction

モデルの準備

下記のデータが必要なので、それぞれ利用規約に同意してダウンロードする(商用利用NGなので注意!)

  • Basel Face Model 2009 (BFM09)
  • Expression Basis
  • trained model
Basel Face Model 2009 (BFM09)

readme.mdの「Prerequisite」のリンク
Basel Face Model 2009 (BFM09)
→「Basel Face Model」
→ページ一番下の「Download the Basel Face Model data.」から

Expression Basis

readme.mdの「Prerequisite」のリンク
「Expression Basis (transferred from Facewarehouse by Guo et al.)」
→「Introduction」の一行目の「CoarseData」から

trained model

readme.mdの「Usage」のリンク
→Download the trained model at 「GoogleDrive」から

ファイルの配置

ダウンロードしたデータをそれぞれ解凍し、中身の3ファイルを下記のように配置する(元から存在するファイルは省略)

Deep3DFaceReconstruction/
  BFM/
    01_MorphableModel.mat
    Exp_Pca.bin
  network/
    FaceReconModel.pb

実行してみる(エラーあり)

実行するにはDeep3DFaceReconstructionディレクトリの直下で

$ python demo.py
エラー:AttributeError: module ‘tensorflow’ has no attribute ‘placeholder’

実行したら、下記のエラーが出た

$ python demo.py
Traceback (most recent call last):
File "demo.py", line 76, in <module>
~中略~
images = tf.placeholder(name = 'input_imgs', shape = [None,224,224,3], dtype = tf.float32)
AttributeError: module 'tensorflow' has no attribute 'placeholder'

tensorflowのv1とv2の互換性の問題のようなので、demo.pyの1行目の

import tensorflow as tf

を下記に書き換える

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
エラー:FileNotFoundError: [Errno 2] No such file or directory: ‘output/input/vd005.mat’

あらためて実行したら、下記のエラーが出た

$ python demo.py
Traceback (most recent call last):
File "demo.py", line 77, in <module>
~中略~
FileNotFoundError: [Errno 2] No such file or directory: 'output/input/vd005.mat'

パスの区切り文字の問題(実行環境はLinux)のようなので、demo.pyの73行目あたりの

savemat(os.path.join(save_path,file.split('\\')~
save_obj(os.path.join(save_path,file.split('\\')~

を下記のように、’\\’を’/’に書き換える

savemat(os.path.join(save_path,file.split('/')~
save_obj(os.path.join(save_path,file.split('/')~

実行(成功)

将来の互換性についてのWarningがいろいろ出るが、数秒で実行完了

$ python demo.py
WARNING:tensorflow:From
~中略~
1
2
3
4
5
6
7
8
9
10
$

outputの配下に.matと.objファイルが出力されている

Deep3DFaceReconstruction/
  output/
    vd005.mat
    vd005_mesh.obj
    vd006.mat
    vd006_mesh.obj
    ...

 


環境構築の際は諸々のバージョンに気を付ける必要があるが、とりあえず動いたのでよしとしよう

自前の画像で試すのは別途

解散!

いいね! いいね?(0)
読み込み中...

Sponsored Links
Sponsored Links

AI(人工知能)
Sponsored Links
wells12
タイトルとURLをコピーしました