OpenPose (v1.4.0) を動かすためのDocker環境を作った
概要
- OpenPose (https://github.com/CMU-Perceptual-Computing-Lab/openpose) の環境構築が超絶だるいのでDockerfile書いた
- ホストマシン側に接続したUSBカメラを実行中のコンテナにマウントし,OpenPoseでカメラの映像を処理できるようにした
OpenPoseについて
カメラの画像から任意の数の人の姿勢をリアルタイムで推定する手法. コンピュータビジョン系研究のトップカンファレンスであるCVPR2017で,オリジナルの"Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields"が発表され,現在GitHubにあるOpenPoseは2018年にarXivに出たものになっている.
CVPR2017版:
OpenPose (arXiv版):
ちなみに下記書籍にCVPR2017版のOpenPoseの実装も含めた解説がある. Caffeのコードを読む気があんまりしないのでありがたい. OpenPoseの解説は邦書だと唯一かも?
つくりながら学ぶ!PyTorchによる発展ディープラーニング [ 小川雄太郎 ] 価格:3,828円 |
Docker環境つくった
OpenPoseでKinectのようなセンサー無しのカメラだけで人の姿勢をそこそことれるのは嬉しいけどどうも環境構築がめんどくさい. Protocol Buffer周りがPythonのAnaconda環境と相性が悪かったりする.
そこで,OpenPoseをビルドおよび実行できる専用の環境をDockerで作ることにした.
以下のリポジトリで公開している.このリポジトリの README.md
にも実行方法を載せてある.
Dockerのコマンド実行にはdocker-composeを使っているので,ホストマシンにPythonとdocker-composeをインストールしておく必要がある.pyenv使うといいと思う.
docker-compose使うとイメージやコンテナのビルドのために長いコマンド打ったり,イメージやコンテナの名前を毎回考えなくて済むのでDockerの利用が捗る.おすすめ.
OpenPoseのバイナリ自体はDockerイメージに含めていない.コンテナ起動してからインストール用のスクリプト (scripts/install_openpose.sh
) を実行してOpenPoseをビルドし,生成されたバイナリをコンテナ間で使い回す構成にしてある.Dockerイメージに含めても困ることは無いと思うので今後変更するかもしれない.
実行にはscripts/launch_openpose.sh
を使う.
スクリプトを実行するとOpenPoseが起動し,PCに接続したカメラの映像に対して姿勢推定をやってくれる.
リポジトリに用意しているスクリプトは以上だが,scripts/launch_openpose.sh
の中のコマンドを書き換えれば動画への適用や推定結果の保存もできる.
コンテナ内の /work
以下はホスト側の docker-compose.yaml
がおいてあるディレクトリにマウントされてるので,コンテナ内で計算した姿勢推定の結果のやりとりも楽にできる.
おわり