単一画像から, 3D 顔形状復元 + expression parameter 推定します. FLAME を使っています.
term of use などライセンス, 利用許諾を確認してから, 同意できる場合のみ, コードと pretrained model ダウンロードしましょう.
以下は同意できて, コードと pretrained model をダウンロードできた人向けです.
環境
- miniconda python3.6
- CUDA 9.0(!)
- Ubuntu 16.04
- Tensorflow 1.12.0
CUDA 9.0 で tensorflow-gpu をセットアップするのがめんどいです.
もしかしたら CUDA 10 + Ubuntu 18.04 + tf 1.15 あたりで動くかもしれません.
python3 でビルドする.
python2.7 はいろいろ依存ライブラリのビルドがうまくいかないので, python3 でやります.
ちなみに neural net での推論(tensorflow)は, 画像を入力して結果がでるというオーソドックスなものなので, 残りの部分(3D 形状復元)などは自前でやってしまうのも手です.
pip
は, conda のものが使われているか, which pip
で確認しておきましょう.
システムなどにインストールされている pip のパスが出る場合は, python -m pip ...
で pip 関連を処理するのも手です.
pyrender だけ最新をインストールします.
opendr は OSMesa がいるので, ubuntu でしたら
$ sudo apt install libosmesa6-dev
でインストールしておいてから,
$ pip install opendr
します(2020/03/13 時では opendr-0.78 がインストールされました)
psbody-mesh
をビルドしてインストールしておきます.
Makefile を使うと変な処理が走るので,
apt で libboost-dev など入れておき,
$ python setup.py build
$ python setuo.py bdist_wheeel
$ pip install dist/psbody-****.whl
とするのがよいです.
ソースコード書き換え
cPickle を使っているところがあるので,
Python3でcPickleのエラーを回避する
http://testpy.hatenablog.com/entry/2017/03/17/000626
などを参考にして書き換えます.
posemapper の import に失敗したりするので,
py2在py3上运行遇到的问题
https://blog.csdn.net/qq_43593646/article/details/86670084
を参考に書き換えます.
他にも python2 的なコードを py3 に書き換えます.
推論を実行する.
あとは demo.py を実行するだけです.
ありがとう RingNet 🎉🎉🎉🎉🎉🎉🥰🥰🥰🥰😊😊😊😊🥳🥳🥳 > https://t.co/qGnOMCc8jj pic.twitter.com/ftH3jnC2OU
— Syoyo Fujita 🌸 RayWa(Ray and Peace) (@syoyo) March 13, 2020
ただ, 3d mesh overlay あたりはうまくいきませんでした(結果は真っ黒). サーバーで実行したから OpenGL が使えないとかでしょうか.
とりあえず .obj mesh は出ますので, あとは自前でメッシュオーバーレイ可視化など書いて対応が楽でしょうか.
TODO
- RingNet を fork して, Python3 対応版を github に上げる(現状いろいろ書き換えて無理やり動かしたので整理が必要)
- FLAME モデルのパラメータを理解して, expression 情報を出す