Windows への VMD-3d-pose-baseline-multi の導入手順【2/17更新】

この記事は[【目次】MMDモーショントレース自動化への挑戦](https://qiita.com/miu200521358/items/d826e9d70853728abc51)の為の導入手順になります。

**v2リリースに伴い、こちらの導入は廃止となりました。クラウド版をご利用ください**
[クラウド(colab)でMMD自動トレース](https://qiita.com/miu200521358/items/fb0a7bcf2764d7797e26)


# [miu200521358/VMD-3d-pose-baseline-multi](https://github.com/miu200521358/VMD-3d-pose-baseline-multi)

3Dの関節情報からvmd(MMDモーションファイル)を出力するライブラリの私的改変版。

# 1. VMD-3d-pose-baseline-multi の導入

![capture001223.jpg](https://qiita-image-store.s3.amazonaws.com/0/254327/63dd3b01-f9d1-6c0b-b96e-f18d01e88417.jpeg)

１. [miu200521358/VMD-3d-pose-baseline-multi](https://github.com/miu200521358/VMD-3d-pose-baseline-multi) のトップページから「`Clone or Download`」＞「`Download ZIP`」を順に押下

２. ダウンロードした圧縮ファイルを、空白のないパス以下に解凍。私は以下に配置しました。

「`C:\MMD\VMD-3d-pose-baseline-multi`」

# 2. 学習データの導入

※ MMDを触ってる方の場合、Windowsでシェル環境がない方が多いと思いますので、`VMD-Lifting` の `setup.sh` から、必要なとこだけ抜き出してます

１. `data`ディレクトリ配下 に `saved_sessions` ディレクトリを作成する

２. 以下2ファイルをダウンロードする

http://visual.cs.ucl.ac.uk/pubs/liftingFromTheDeep/res/init_session.tar.gz
http://visual.cs.ucl.ac.uk/pubs/liftingFromTheDeep/res/prob_model.tar.gz

![capture001224.jpg](https://qiita-image-store.s3.amazonaws.com/0/254327/8b5e55fe-74d1-4ab4-5387-fdbbd9e70e1d.jpeg)

３.　ダウンロードした圧縮ファイルを解凍し、`saved_sessions`ディレクトリ配下に設定する


# 3. 必要ライブラリのインストール

![capture001221.jpg](https://qiita-image-store.s3.amazonaws.com/0/254327/dd64e263-057b-a07d-478a-bd0ee20c8c3c.jpeg)

１. 「Aanaconda Prompt」で、3.で作成したディレクトリに移動

※新しくプロンプトを立ち上げた場合には、「`activate tensorflow`」で、必ず自分が作成した環境に移動すること
　コマンド入力行の先頭に `(tensorflow)` と、環境名が出ていればOK。

「`cd C:\MMD\VMD-3d-pose-baseline-multi`」

２. 必要ライブラリをインストール。以下コマンドを一行ずつ「Aanaconda Prompt」に入力してEnter。

```
pip install PyQt5
```

# 4. VMD-3d-pose-baseline-multi 実行

１. 「Aanaconda Prompt」を起動し、`(tensorflow)`を有効にして、「`VMD-3d-pose-baseline-multi`」のインストールディレクトリに移動

「`cd C:\MMD\VMD-3d-pose-baseline-multi`」

![capture001222.jpg](https://qiita-image-store.s3.amazonaws.com/0/254327/3209da1f-5935-f996-068b-39a7f7267e06.jpeg)

## 実行方法

1. [Openpose簡易起動バッチ](https://github.com/miu200521358/openpose-simple) で データを解析する
1. [OpenposeTo3D.bat](OpenposeTo3D.bat) を実行する
	- [OpenposeTo3D_en.bat](OpenposeTo3D_en.bat) is in English. !! The logs remain in Japanese.
1. [miu200521358/FCRN-DepthPrediction-vmd](https://github.com/miu200521358/FCRN-DepthPrediction-vmd) で生成された深度推定データ(depth.txt)を用意する
1. [miu200521358/3d-pose-baseline-vmd](https://github.com/miu200521358/3d-pose-baseline-vmd) で生成された3D関節データ(pos.txt)、2D関節データ(smoothed.txt)を用意する
1. [miu200521358/3dpose_gan_vmd](https://github.com/miu200521358/3dpose_gan_vmd) で生成された3D関節データ(pos_gan.txt)、2D関節データ(smoothed_gan.txt)を用意する
1. [3DToVmd.bat](3DToVmd.bat) を実行する
	- [3DToVmd_en.bat](3DToVmd_en.bat) is in English. !! The logs remain in Japanese.
1. `3D解析結果ディレクトリパス` が聞かれるので、1.の結果ディレクトリパスを指定する
1. `ボーン構造CSVファイル` が聞かれるので、トレース先のモデルのボーン構造CSVファイルパスを指定する
    - センター移動の計算に身長を使用する
    - ボーン構造CSVファイルの出力方法は、[born/README.md](born/README.md)参照
    - 未指定の場合、デフォルトで[born/あにまさ式ミクボーン.csv](born/あにまさ式ミクボーン.csv)が読み込まれる
1. `足をIKで出力するか` 聞かれるので、出す場合、`yes` を入力する
    - 未指定 もしくは `yes` の場合、IKで出力する
    - `no` の場合、FKで出力する
1. `踵位置補正` が聞かれるので、踵のY軸補正値を数値(小数可)を指定する
    - マイナス値を入力すると地面に近付き、プラス値を入力すると地面から遠ざかる。
    - ある程度は自動で補正するが、ヒールのある靴や厚底などで補正しきれない場合に設定
    - 未指定の場合、「0」で補正を行わない
1. `センターZ移動倍率` が聞かれるので、センターのZ移動時の移動幅を入力する
    - 値が小さいほど、Zの移動量が少なくなり、大きいほど、移動量が増える
    - 未指定の場合、デフォルトで「5」とする
    - 「0」を指定した場合、センターZ移動を行わない
1. `円滑化度数` が聞かれるので、適当な正の整数を指定する
    - 未指定の場合、デフォルトで1回指定
1. `移動キー間引き量` が聞かれるので、移動キー(センター・IK)間引き時の移動量(小数可)を指定する
    - 指定された移動量範囲内の移動キーフレームを間引く
    - 未指定の場合、デフォルトで「0.5」とする
    - 「0」が指定された場合、間引きを行わず、以下`回転キー間引き角度`はスキップする
1. `回転キー間引き角度` が聞かれるので、回転系ボーン間引き時の回転角度(0～180度の整数のみ)を指定する
    - 回転が指定された角度範囲内であれば、キーフレームを間引く
    - 未指定の場合、デフォルトで「3」とする
1. `詳細なログを出すか` 聞かれるので、出す場合、`yes` を入力する
    - 未指定 もしくは `no` の場合、通常ログ
1. 処理開始
1. 処理が終了すると、1. の結果ディレクトリ以下に vmdファイルが出力される
	- output_{日付}_{時間}_u{直立フレームIDX}_h{踵位置補正}_z{センターZ移動倍率}_s{円滑化度数}_p{移動キー間引き量}_r{回転キー間引き角度}_full/reduce.vmd
		- キーフレームの間引きなしの場合、末尾は「full」。アリの場合、「reduce」。
	- upright.txt … 直立フレームのキー情報
1. MMDを起動し、モデルを読み込んだ後、モーションを読み込む