MacでOpenPose (本家) を動かしてみる
OpenPoseとは,画像もしくは動画像から人体の骨格情報や表情を機械学習的に推定する技術である.
ネットでMacへの導入例を調べてもTensorFlow版についての記事が多く,本家のCaffe版に関する情報があまり見当たらなかったので,ここにまとめてみる.
はじめに
先述の通り,OpenPoseは機械学習技術の一つであり,画像や動画像から人体の骨格情報や表情を獲得可能である.
手法の詳しい説明は今回は割愛するが,特徴点(関節)と特徴方向(骨格)を全て抽出した後,各人を分離するようなBottom-up型モデルになっており,画像内に人がたくさん含まれる場合でも処理が遅くならないという利点があるらしい.
ちなみに,オープンソースではあるが商用利用の場合はそこそこ高いランセンス費用を払う必要があるので注意.
以下は,本家のGitHubで公開されているデモ動画である.
複数人の骨格情報が精度良く推定されていることがわかる.
インストール方法
本家のOpenPoseをインストールする.
ちなみに,Mac用は今のところCPU版しかサポートされていないようだ. CPU版の場合,8GB以上のメモリ,8コア以上のCPUの使用が推奨されている.
一応,MacでのGPU版についての記載もあるため,近々サポートされる可能性はある.
本家のドキュメントでインストール方法は説明されているが,なぜかその通りにやっても上手くいかなかったので,一部の手順において以下の記事を参考にした.
本家のリポジトリのクローン
まず,ターミナルで以下のコマンドを入力し, 本家OpenPoseのリポジトリを任意の作業ディレクトリにクローンする.
git clone https://github.com/CMU-Perceptual-Computing-Lab/openpose
クローンしたディレクトリopenpose
に入る.
cd openpose
以下,このディレクトリ内で作業を行う.
各種フレームワークをインストール
次に,CMake, Caffe, OpenCVといった依存するフレームワークをインストールする.
ここからはHomebrewを使ってインストールを行うので,もしまだ導入していない場合は以下のコマンドで入れておく.
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Homebrewとは,macOS 用パッケージマネージャーである.
CMakeをインストールする.
brew cask install cmake
OpenCV等は以下のコマンドでまとめてインストールできる.
bash 3rdparty/osx/install_deps.sh
CMakeについてきたCaffeを削除し,再インストールする.
brew uninstall caffe brew brew install caffe
CMakeでビルド設定
各フレームワークをインストールできたら,CMakeのGUIを使ってビルド設定を行う. まず,以下のコマンドを入力してCMakeのGUIを開く.
cmake-gui
そして,ソースコードおよびbuild
フォルダのパスを指定する.
Where is the source code:
にはクローンしてきたopenpose
フォルダを指定する.
Where to the binaries:
にはopenpose
フォルダ内のbuild
フォルダを指定する.
私の場合,build
フォルダが見当たらなかったので自分で空のフォルダを作成して指定した.
次に,Add Entry
ボタンから以下の追加情報を設定する.
Name : BUILD_CAFFE Type : bool Value : false (チェックボックスのチェックを外す)
Name : Caffe_INCLUDE_DIRS Type : PATH Value : /usr/local/include/caffe
Name : Caffe_LIBS Type : PATH Value : /usr/local/lib/libcaffe.dylib
その後,Configure
ボタンで設定を反映する.
すると以下のようなウィンドウが表示されるので,Specify the generator for this project
がUnix Makefile
になっていることを確認し,Done
ボタンを押す.
画面下のボックスにConfiguring done
と出れば成功らしいが,ここでエラーが出ても問題ないらしい(私は出なかった)
Generate
ボタンを押せばバイナリの生成が完了する.
成功していればbuild
フォルダ内にexample
などのフォルダが生成されているはずなので,チェックしておく.
ビルド
最後に,OpenPoseをビルドする.
openpose
フォルダ内のbuild
フォルダに移動する.
cd build
移動したら,以下のコマンドによりビルドを実行する.
make -j`nproc` sudo make install
以上で,OpenPoseのインストールが完了した.
デモを実行してみる
実際に,OpenPoseを動かしてみよう.
最初からデモプログラムが入っているので,それを実行するだけでOKである. 実際に,exampleフォルダ内にある動画サンプルに対して骨格推定を行ってみた.
./build/examples/openpose/openpose.bin --video examples/media/video.avi
おお,ちゃんと骨格が推定できている!!
手元の他の動画像もいくつか試したがそこそこいい感じに骨格推定できていることを確認した.
ちなみに,上記コマンドに--write_video ***.avi
を追加すると推定結果を動画として保存可能(***には出力ファイルのパスを入力).
また,--write_json ***/
とすると任意のディレクトリに推定した骨格座標の値をjson形式で出力できる.
ただ,推定がなかなかに重い… だいたい0.2 fpsくらいしか出ないので,動画像の1フレームを処理するのに5秒くらいかかる.
どうやらこれがCPU版の限界っぽい(ちなみに精度を犠牲にすれば速度向上は可能).
遊びで動かしたり,短い動画像だけを扱うならば十分かもしれないが,本格的に研究などで使っていくためにはGPU版の導入が必要だろう.
とはいえ,CPU版でもここまで動くのはなかなか驚きである.
最後に,色々なフリー画像に対して推定を行ってみたので以下に列挙してみる.
フリー画像はぱくたそさんから拝借した.