Windows
OpenPose

Windows への OpenPose導入手順【7/7追記】

Windows への OpenPose導入手順

この記事は【目次】MMDモーショントレース自動化への挑戦の為の導入手順になります。
ノンエンジニアの方向けに、できるだけ平易に記載した…つもりです。

OpenPoseとは

OpenPose represents the first real-time multi-person system to jointly detect human body, hand, and facial keypoints (in total 130 keypoints) on single images.

OpenPoseは、単一の画像上で人体、手、顔面のキーポイント(全部で130個のキーポイント)を共同で検出する初めてのリアルタイムマルチユーザシステムです。

OpenPose - GitHub
OpenPoseを動かしてみた。 - Qiita

0. 推奨スペック

Openpose で推奨されているスペックは以下の通り

  • OS
    • Ubuntu 14 / 16
    • Windows 8 / 10 (7もサポート対象外だがいけるらしい)
  • GPUバージョン
    • NVIDIA 1.6GB以上のグラボ
    • 2GB 以上のメモリ
    • 8コア以上のCPU
  • CPUバージョン
    • 8GB 以上のメモリ
    • 8コア以上のCPU

引用元)OpenPose - Installation

1. OpenPoseDemo(ポータブル版) の実行

1.0. インストール公式手順書

OpenPose - Installation

This installation section is only intended if you plan to modify the OpenPose code or integrate it with another library or project. If you just want to use the OpenPose demo in Windows, simply use the latest version of the OpenPose binaries which you can find in the Releases section.

お手軽に試すだけなら、 Release ページから、コンパイル済みのバイナリファイルを入手することで実行可能です。

1.1. OpenPose(Portable Demo) の入手

capture001149.jpg

1. Release ページから、最新のzipを入手する

※2018/07/07時点で、GPU版しかサイトに掲載されていないようです。
 CPU1.3.0版をご希望の場合、私のGoogleドライブにあげたURLをコメント欄に貼ってます。

2. 解凍して、空白のないパス以下に配置する。私は以下に配置しました。

C:\MMD\openpose-1.3.0-win64-cpu-binaries

capture001073.jpg

3. 学習モデルを入手します。

models\getModels.bat」をダブルクリックする。
終わるとコマンドプロンプト(黒い画面)は自動的に閉じられます。

1.2. CUDA8 のインストール

※2018/05時点での最新版は9.1ですが、OpenPoseでは8.0を使用します。

CUDA Toolkit 8.0 - Feb 2017 | NVIDIA Developer

capture001096.jpg

1. OS や インストール方法を選択する
2. 「Base Installer」 の 「Download」 ボタンを押下
3. ダウンロードしたexeファイルをダブルクリック

capture001097.jpg

4. インストールパスはそのままで、「OK」 ボタン

capture001098.jpg

5. しばし待つ

capture001099.jpg

6. 「同意して続行する」を押下

capture001100.jpg

7. 「高速」を選択して、「次へ」押下

capture001101.jpg

8. 承諾のチェックボックをONにして、「NEXT

capture001102.jpg

9. しばし待つ

capture001085.jpg

10. セキュリティのポップアップが出たら、「インストール」押下

capture001103.jpg

11. そのまま「次へ

capture001104.jpg

12. 「今すぐ再起動する

13. 再起動後、上記作業を、出ているパッチ分繰り返す

1.3. cuDNN 5.1 のインストール

CUDA8 に合わせて、過去リリースの cuDNN 5.1 を使用します。

NVIDIA cuDNN

capture001088.jpg

1. 「DOWNLOAD cuDNN」を押下

capture001109.jpg

2. 承諾のチェックボックスをONにして、「Download cuDNN v7.1.3 (April 17, 2018), for CUDA 8.0」>一番下の「Archived cuDNN Releases」を順に押下

capture001111.jpg

Download cuDNN v5 (May 27, 2016), for CUDA 8.0」>「cuDNN v5 Library for Windows 10」を順に押下

3. ダウンロードした圧縮ファイルを解凍

capture001131.jpg

4. 解凍した中身(cuda以下)を、CUDAをインストールしたディレクトリ以下にコピーする。デフォルトのままだと、以下にあるはずです。

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0

1.3. CUDAの確認

capture001108.jpg

1. コマンドプロンプトで「nvcc --help」と入力し、ヘルプが出てくることを確認する。

1.4. OpenPoseDemo の実行

capture001113.jpg

1. コマンドプロンプトで、1.1. でインストールした OpenPose(Portable Demo)のディレクトリに移動し、デモexeを実行する

bin\OpenPoseDemo.exe --video examples\media\video.avi

capture001117.jpg

デモ動画に解析結果が出力されました!

capture001128.jpg

2. まなこ様の「金曜日のおはよう」も無事解析できました。でも、後ろになんか小さいのがいるw

bin\OpenPoseDemo.exe --video examples\kinyoubi\158-010f.avi

capture001129.jpg

3. 引数に画面内の最大人数を指定することで、背後霊は消えました。

bin\OpenPoseDemo.exe --video examples\kinyoubi\158-010f.avi --number_people_max 1

capture001130.jpg

4. OpenPoseDemo.exe は help を引くことも可能です。色々指定ができます。

bin\OpenPoseDemo.exe --help

2. OpenPose のコンパイル

OpenPose(Portable Demo版)はお手軽に試せますが、自分のマシンに合わせたものではないため、色々不都合もあります。

私の場合、以下のような問題がありました。

  • 処理が遅い
  • 手や顔の認識機能が使えない

というワケで、自分の環境で、ソースコードをビルドして、マシンに合わせたexeを作成します。
※この作業は必須ではありません。とりあえずモーショントレース自動化をしてみたいという方は、「Portable Demo版」のまま次に進んでください。
※私の環境で上記問題が発生したのは、Portable Demo版のCPU版と自力ビルドのGPU版を比較した為でもあります。(当時はよく分かっていませんでした。)
 Portable Demo GPU版と自力ビルド GPU版で、ほとんど差が出なかったという報告もいただいております。ご留意ください。

2.1. CMake GUI のインストール

capture001119.jpg

1. CMake のWebサイトから「Windows win64-x64 Installer」をダウンロードします。

capture001120.jpg

2. ウィザードに従ってインストールしていきます。「Next」押下。

capture001121.jpg

3. 承諾のチェックボックスをONにして、「Next」押下。

capture001122.jpg

4. 「Add CMake tot the system PATH for the current user」のラジオボタンにチェック(CMakeを環境変数PATHに追加)して、「Next」押下。

capture001123.jpg

5. インストールパスはデフォルトのまま、「Next」押下。

capture001124.jpg

6. 「Install」押下。

2.2. Microsoft Visual Studio (VS) 2015 Enterprise Update 3 のインストール

※ 2018/05 現在、VS2017が最新のため、2015は公式HPからリンクが外されました。そのため、以下URLから直接ISOをダウンロードしてください。

Visual Studio 2015 with Update 3 日本語版

1. ISO起動

capture001126.jpg

2. 「インストール」押下。

capture001127.jpg

3. しばし待つ

capture001134.jpg

4. インストールが完了したらPC再起動

2.3. OpenPose のソースコード入手

※本来であれば、Git clone の方が手順としては正しいのですが、簡略化しています。(以降同様)

capture001095.jpg

1. OpenPose v1.3.0 のトップページから「Clone or Download」>「Download ZIP」を順に押下

※2018/06/20 頃にOpenposeに新しいソースコードがあげられました。
 こちらの手順ではv1.3.0でのみ構築を確認しているため、上記URLは、タグ「v1.3.0」のものとなります。

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

C:\MMD\openpose-master

3. ビルド先ディレクトリを作成。私は以下に作成しました。

C:\MMD\openpose-build

2.4 Openposeの依存ライブラリ等入手 (※5/20追記)

※ライブラリ等は自動で落ちてくるらしいですが、どうもうまくいかないパターンがあるようなので、手動で事前にダウンロードしてください。
既にある場合は、次へ進んで下さい。

1.以下モデルをそれぞれ「C:\MMD\openpose-master」以下に配置

2.以下依存ライブラリをそれぞれ「C:\MMD\openpose-master」以下に配置

2.5. OpenPose の構築準備

capture001151.jpg

1. 「CMake GUI」を起動する。

capture001135.jpg

2. ソースコードディレクトリとビルド先ディレクトリを指定して、「Configure」ボタン押下

  • ソースコードディレクトリ: C:\MMD\openpose-master
  • ビルド先ディレクトリ: C:\MMD\openpose-build

capture001139.jpg

3. 「Visual Studio 14 2015 Win64」を選択して、「Finish

capture001140.jpg

4. しばし待つ

Finish 直後の各パラメータの詳細キャプチャを撮り直しました(5/20追記)
capture001237.jpg

capture001141.jpg

5. 終わったら、「Generate」ボタン押下。(画面真ん中左寄り)

capture001152.jpg

6. ビルドディレクトリ以下に「OpenPose.sln」が出来ていたら成功。

capture001154.jpg

7. ビルドディレクトリ以下に「x64」ディレクトリを作成し、「1.1. OpenPose(Portable Demo)」で解凍したデモの中身をコピー

※コピーしないでコンパイルすると、DLL不足エラーとかが頻発しました…正当な方法は別にあるのかもしれませんが、暫定対応。
※コピーしてもDLL不足エラーが出る場合、「1.1. OpenPose(Portable Demo)」の binディレクトリ以下のDLLを、「x64\Release」にコピーしなおしてください。

capture001155.jpg

8. 以下ライブラリをそれぞれ「x64\3rdparty\windows」以下に配置

2.6. OpenPose のコンパイル

1. 「Visual Studio 2015」を起動する

capture001143.jpg

2. プロジェクトを開く

C:\MMD\openpose-build\OpenPose.sln

capture001145.jpg

3. インストールを求められたら、「インストール」押下

capture001146.jpg

4. 「次へ」押下

capture001147.jpg

5. 「インストール」押下

capture001156.jpg

6. 画面上部のプルダウンで「Release」「x64」を選択し、緑色の右向き三角を押下

capture001158.jpg

7. ビルド確認が出たら「はい」押下

capture001159.jpg

8. しばし待つ

capture001161.jpg

9. コンパイルが終わると、自動的にexeが実行されて、引数なしエラーになるので、慌てず騒がず、「プログラムの終了」押下

capture001163.jpg

10. 「中断」押下

capture001164.jpg

11. 「openpose.dll」「OpenPoseDemo.exe」が出来ていることを確認したら、「Visual Studio 2015」を終了する

2.7. OpenPoseDemo.exe の実行

capture001166.jpg

1. ビルド先ディレクトリ以下の「x64」ディレクトリで、コマンド実行
※本記事では、「C:\MMD\openpose-build\x64」。

Release\OpenPoseDemo.exe --video examples\kinyoubi\158-100f.avi

capture001167.jpg

2. 先ほどとほぼ同等の画面が出力されました。処理もめっちゃ早くなりました!

3. OpenPose 簡易起動バッチの導入

Openpose では様々なオプションが指定できますが、その分、コマンド文が長くなりがちです。
そのため、モーショントレース用に必要な最低限の設定を行って起動するバッチを作成しました。

capture001214.jpg

1. miu200521358/openpose-simple のトップページから「Clone or Download」>「Download ZIP」を順に押下

capture001215.jpg

2. ダウンロードした圧縮ファイルを解凍し、Openposeのbinフォルダのあるところに配置する

  • OpenposeVideo.bat … 動画解析用
  • OpenposeImage.bat … 静止画解析用

capture001216.jpg

実行方法 (2018/05/10 更新)

映像の場合

  1. Openposeの実行ディレクトリ(binとかの一個上) にOpenposeVideo.bat をコピーする
    • デモ版: LICENSEのファイルがある階層。
    • 自力ビルド版:x64のディレクトリの下。
  2. OpenposeVideo.bat を実行する
  3. 解析対象映像ファイルパス が聞かれるので、動画のファイルフルパスを入力する
  4. 映像に映っている最大人数 が聞かれるので、映像から読み取りたい最大人数を1始まりで指定する
    • 未指定の場合、デフォルトで1が設定される(1人分の解析)
  5. 処理開始
  6. 処理が終了すると、以下に結果が出力される。
    • 解析対象映像ファイルパス/{実行日時}/{解析対象映像ファイル名}_json ディレクトリ
      • → json形式のkeypointsデータ
    • 解析対象映像ファイルパス/{実行日時}/{解析対象映像ファイル名}_openpose.avi
      • → 元映像にOpenposeの解析結果を上乗せしたaviデータ
      • aviとして必要な情報が入っていないので、そのままではMMDの背景AVIとして設定できません。一旦AviUtlなどでaviとして別名保存してください。その際、映像サイズが2GB以内になるようにサイズ調整もしておくと、背景AVIとして使用できます。

画像の場合

  1. Openposeの実行ディレクトリ(binとかの一個上) にOpenposeImage.bat をコピーする
    • デモ版: LICENSEのファイルがある階層。
    • 自力ビルド版:x64のディレクトリの下。
  2. OpenposeImage.bat を実行する
  3. 解析対象画像ディレクトリパス が聞かれるので、画像が置かれているディレクトリのフルパスを入力する
    • ディレクトリ内には複数枚の画像を置ける
  4. 映像に映っている最大人数 が聞かれるので、映像から読み取りたい最大人数を1始まりで指定する
    • 未指定の場合、デフォルトで1が設定される(1人分の解析)
  5. 処理開始
  6. 処理が終了すると、以下に結果が出力される。
    • 解析対象画像ディレクトリパス/{実行日時}/{解析対象画像ディレクトリ名}_json ディレクトリ
      • → json形式のkeypointsデータ
    • 解析対象画像ディレクトリパス/{実行日時}/{解析対象画像ディレクトリ名}_openpose.avi
      • → 元画像にOpenposeの解析結果を上乗せしたaviデータ

注意点

  • JSON出力先ディレクトリパス に12桁の数字列は使わないで下さい。
    • short02_000000000000_keypoints.json のように、{任意ファイル名}_{フレーム番号}_keypoints.json というファイル名のうち、12桁の数字をフレーム番号として後ほど抽出するため