Windows への FCRN-DepthPrediction-vmd の導入手順【2/17更新】

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

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

# [miu200521358/FCRN-DepthPrediction-vmd](https://github.com/miu200521358/FCRN-DepthPrediction-vmd)

深度推定のVMD用私的改造版
[miu200521358/3d-pose-baseline-vmd](https://github.com/miu200521358/3d-pose-baseline-vmd) の導入が完了している場合、追加インストール等は不要です。

# 1. TensorFlow の導入

[Installing TensorFlow on Windows](https://www.tensorflow.org/install/install_windows)

Tensorflow には、CPU版とGPU版がありますが、ここでは、CUDAバージョンとの兼ね合いで、CPU版を導入します。(詳しくは上記URL参照)

## 1.1. Anaconda のインストール

![capture001169.jpg](https://qiita-image-store.s3.amazonaws.com/0/254327/6762af69-b2f3-a1f7-742e-57d68f2510be.jpeg)

１. [Downloads | Anaconda](https://www.anaconda.com/download/#_windows) ページから、**Python 3.6**用（左側）のインストーラをダウンロードする。

※2/17現在、**Python 3.7**となっていますが、3.xならば大丈夫です。
※メアドの入力が求められますが、「No Thanks」でキャンセルできます。

![capture001170.jpg](https://qiita-image-store.s3.amazonaws.com/0/254327/fed815bf-640b-67c3-e75f-da9e7e9f3882.jpeg)

２. 「`Next >`」押下

![capture001171.jpg](https://qiita-image-store.s3.amazonaws.com/0/254327/47b923b1-6da6-9099-8f9d-6b1756156303.jpeg)

３. 「`I Agree`」押下

![capture001172.jpg](https://qiita-image-store.s3.amazonaws.com/0/254327/6c72c0bd-45fb-717f-56a2-b95c10fc0cd6.jpeg)

４. 「`Just Me`」のチェックボックスのまま、「`Next >`」押下

![capture001173.jpg](https://qiita-image-store.s3.amazonaws.com/0/254327/6f535ac0-2474-b80e-4f44-d3dea7f475fa.jpeg)

５. インストール先のパスを設定して、「`Next >`」押下

![capture001174.jpg](https://qiita-image-store.s3.amazonaws.com/0/254327/1e4b10bb-f3f3-37b4-e5ab-c7ebb14a0f05.jpeg)

６. オプションはそのままで、「`Install`」押下

![capture001175.jpg](https://qiita-image-store.s3.amazonaws.com/0/254327/725a966f-bd0e-0c4f-c069-4d1254520aef.jpeg)

７. しばし待つ

![capture001176.jpg](https://qiita-image-store.s3.amazonaws.com/0/254327/7e75311b-e189-da3c-b55c-84366bc8f829.jpeg)

８. 完了したら、「`Next >`」押下

![capture001177.jpg](https://qiita-image-store.s3.amazonaws.com/0/254327/7638d3dc-4576-db07-88f7-f3ad44b378b6.jpeg)

９. VSCode(コードエディタ)のインストールはお好きに。私は既に入っていたので、「`Skip`」しました。

![capture001178.jpg](https://qiita-image-store.s3.amazonaws.com/0/254327/a1dd9db1-5990-c704-af45-91805fcf9a47.jpeg)

１０. 「`Finish`」押下

## 1.2. TensorFlow のインストール

![capture001180.jpg](https://qiita-image-store.s3.amazonaws.com/0/254327/cdb9a799-5e69-385d-0c91-16d38758a836.jpeg)

１. スタートメニューから、「Aanaconda Prompt」を起動する

![capture001181.jpg](https://qiita-image-store.s3.amazonaws.com/0/254327/41075c53-e623-cbfe-201f-191e64868dfb.jpeg)

２. tensorflow 用環境を作成
　　※これは、他の開発環境と切り分けするための箱を作るようなものです。

「`conda create -n tensorflow pip python=3.7`」

![capture001182.jpg](https://qiita-image-store.s3.amazonaws.com/0/254327/a0d8d01d-0fee-d886-5408-40a933b9c9fc.jpeg)

３. Proceed は 「`y`」で実行継続

![capture001183.jpg](https://qiita-image-store.s3.amazonaws.com/0/254327/3fc33705-ac8f-ac89-ed1e-63f8a5546a85.jpeg)

４. しばし待つ

![capture001185.jpg](https://qiita-image-store.s3.amazonaws.com/0/254327/66e9b849-e8d3-97d4-be12-293a8fe3ad9e.jpeg)

５. tensorflow環境を有効化する

「`activate tensorflow`」

![capture001186.jpg](https://qiita-image-store.s3.amazonaws.com/0/254327/5e150007-ef8a-082f-78aa-4027df75fd08.jpeg)

６. tensorflow(CPU版 or GPU版)をインストールする

 - CPU版：「`conda install tensorflow`」
 - GPU版：「`conda install tensorflow-gpu`」※[GPU版要件](https://www.tensorflow.org/install/gpu)参照

![capture001745.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254327/0ea89ccb-063b-d307-a3bd-d0e618346b07.jpeg)

７. しばし待つ

![capture001189.jpg](https://qiita-image-store.s3.amazonaws.com/0/254327/097506cc-c663-4fce-d932-34f709bee47d.jpeg)

８. 完了したら、「`python`」コマンド入力。「`>>>`」と先頭に出ていたらOK。

![capture001190.jpg](https://qiita-image-store.s3.amazonaws.com/0/254327/4c5a03ec-3aca-ce97-3af2-7a80fdfe6e4a.jpeg)

９. 以下コマンドを一行ずつ入力。（先頭の `>>> ` は入力不要です）

```
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print(sess.run(hello))
```

最後に「`b'Hello, TensorFlow!'`」と出力されていればOK。

# 2. FCRN-DepthPrediction-vmd の導入

![capture001325.jpg](https://qiita-image-store.s3.amazonaws.com/0/254327/afeb584a-05da-6b16-3f60-86095dadc737.jpeg)

１. [miu200521358/FCRN-DepthPrediction-vmd](https://github.com/miu200521358/FCRN-DepthPrediction-vmd) のトップページから「`Clone or Download`」＞「`Download ZIP`」を順に押下

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

「`C:\MMD\FCRN-DepthPrediction-vmd`」

# 3. モデルデータ の導入

１. 上記ディレクトリ＞「`tensorflow`」ディレクトリ＞「`data`」ディレクトリを作成する

![capture001326.jpg](https://qiita-image-store.s3.amazonaws.com/0/254327/24a5350e-edd1-e7b8-8a50-d3149c79077b.jpeg)

２. [tensorflow用モデルデータzip(.ckpt)](http://campar.in.tum.de/files/rupprecht/depthpred/NYU_FCRN-checkpoint.zip) をダウンロードする

３. ダウンロードした圧縮ファイルを解凍して、1. の「`data`」ディレクトリ以下に配置する

「`C:\MMD\FCRN-DepthPrediction-vmd\tensorflow\data`」

![capture001327.jpg](https://qiita-image-store.s3.amazonaws.com/0/254327/b054abd7-e5ac-8362-2fbd-0c0ce3118bc6.jpeg)

# 4. 必要ライブラリの導入

![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\FCRN-DepthPrediction-vmd`」

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

```
pip install numpy
pip install python-dateutil
pip install pytz
pip install pyparsing
pip install six
pip install matplotlib
pip install opencv-python
pip install imageio
```

# 5. FCRN-DepthPrediction-vmd 実行

１. 「Aanaconda Prompt」を起動し、`(tensorflow)`を有効にして、「`FCRN-DepthPrediction-vmd`」のインストールディレクトリに移動

```
activate tensorflow
C:\MMD\FCRN-DepthPrediction-vmd
```

![capture001328.jpg](https://qiita-image-store.s3.amazonaws.com/0/254327/55186ccc-e69b-ce50-817f-0ca862aa66b5.jpeg)

## 実行方法

1. [Openpose簡易起動バッチ](https://github.com/miu200521358/openpose-simple) で データを解析する
1. [VideoToDepth.bat](VideoToDepth.bat) を実行する
	- [VideoToDepth_en.bat](VideoToDepth_en.bat) is in English. !! The logs remain in Japanese.
1. `解析対象映像ファイルパス` が聞かれるので、動画のファイルフルパスを入力する
1. `解析結果JSONディレクトリパス` が聞かれるので、1.の結果ディレクトリパスを指定する 
	- `{動画パス}/{動画ファイル名}_{実行年月日}/{動画ファイル名}_json` が対象ディレクトリパス
1. `深度推定間隔` が聞かれるので、深度推定を行うフレームの間隔(整数のみ)を指定する
    - 指定された間隔ごとに深度推定を行う
    - 未指定の場合、デフォルトで「10」とする
    - 値が小さいほど細かく深度推定を行うが、その分処理が遅くなる
1. `反転フレームリスト`が聞かれるので、Openposeが裏表を誤認識しているフレーム範囲を指定する。
	- ここで指定されたフレーム範囲内のみ、反転判定を行う。
	- `10,20` のように、カンマで区切って複数フレーム指定可能。
	- `10-15` のように、ハイフンで区切った場合、その範囲内のフレームが指定可能。
1. `順番指定リスト` が聞かれるので、交差後に人物追跡が間違っている場合に、フレームNoと人物インデックスの順番を指定する。
	- 人物インデックスは、0F目の左から0番目、1番目、と数える。
	- `[12:1,0]` と指定された場合、12F目は、画面左から、0F目の1番目、0F目の0番目と並び替える、とする。
	- `[12-15:1,0]` と指定された場合、12～15F目の範囲で、1番目・0番目と並び替える。
1. `詳細なログを出すか` 聞かれるので、出す場合、`yes` を入力する
    - 未指定 もしくは `no` の場合、通常ログ
1. 処理開始
1. 処理が終了すると、`解析結果JSONディレクトリパス`と同階層に以下結果が出力される
	- `{動画ファイル名}_json_{実行日時}_depth`
	    - depth.txt …　各関節位置の深度推定値リスト
	    - message.log …　出力順番等、パラメーター指定情報の出力ログ
	    - movie_depth.gif　…　深度推定の合成アニメーションGIF
	        - 白い点が関節位置として取得したポイントになる
	    - depth/depth_0000000000xx.png … 各フレームの深度推定結果
	    - ※複数人数のトレースを行った場合、全員分の深度情報が出力される
	- `{動画ファイル名}_json_{実行日時}_index{0F目の左からの順番}`
	    - depth.txt …　該当人物の各関節位置の深度推定値リスト
1. message.log に出力される情報
	- ＊＊05254F目の出力順番: [5254:1,0], 位置: {0: [552.915, 259.182], 1: [654.837, 268.902]}
		- 5254F目では、1, 0の順番に割り当てられた
			- 0番目に設定されている1は、[654.837, 268.902]の人物が推定された
			- 1番目に設定されている0は、[552.915, 259.182]の人物が推定された
		- このフレームの人物立ち位置が間違っている場合、[5254:0,1]を、`順番指定リスト`に指定すると、5254Fの出力順番が反転される
	- ※※03329F目 順番指定あり [1, 0]
		- 3229F目を、`順番指定リスト`で、[1,0]と指定してあり、それに準じて出力された
	- ※※04220F目 1番目の人物、下半身反転 [4220:1]
		- 4220F目を、`反転フレームリスト`で指定してあり、かつ反転判定された場合に反転出力された

![movie_depth.gif](https://qiita-image-store.s3.amazonaws.com/0/254327/338c6d33-0968-41cb-e777-17f6d81a9460.gif)