概要
今年のゴールデンウイークに公開されたCMUのOpenPoseはその推定精度の高さと、(Ubuntuなら)気軽に試せる依存ライブラリの少なさ、結果の分かりやすさから多くのサイトで話題になりました。
OpenPoseで踊ってみた動画からポーズ推定。
— izm (@izm) 2017年5月7日
試しに動かしてみました。腕をクロスさせたときとかの遮蔽に対してかなり強いです。動画解像度とfpsが高いほど有効そうです。
Geforce GTX1060 Ubuntu16.04 pic.twitter.com/1GKfBmTXdo
このエントリは、このOpenPoseについての最近(-2017/7)の情報をまとめておく、という備忘録的な意図です。
- 手と顔の推定が正式追加
- WindowsBuildが実用的に動く
- 骨格の3次元座標が(セッティングすれば)取れる
- 商用ライセンスが正式に発表
あたりがトピックになるかと思います。
手と顔の推定が正式追加
これは話題になった当時からビデオは公開されていましたが2017年7月にコードが公開されました。早速試された方がいるようです。(nnn112358さん凄い!最初のインストール記事も書かれた方です)
OpenPoseのFace Estimationを動かしてみた。 - Qiita
OpenPoseのHand Estimationを動かしてみた。 - Qiita
WindowsBuild済み実行ファイルが実用的に動く
1.0.1相当のビルド済みDemoがzipで配布されています。 github.com
Windows10環境(と、たぶん初期ビルドだとGeforceGTX900番台のGPU)でこの800MBくらいのデモ環境一式をダウンロードして http://posefs1.perception.cs.cmu.edu/OpenPose/OpenPose_demo_1.0.1.zip
bin\OpenPoseDemo.exe --video examples\media\video.avi
とコマンドラインで実行するだけで、Windows上でOpenPoseを試すことが出来ます。
もし、起動に失敗するようであれば以下のリンクを頼りに外部ソフトウェアのインストールやセットアップを行ってください。
openpose/installation.md at master · CMU-Perceptual-Computing-Lab/openpose · GitHub
手や顔の認識も同時に使いたい場合は
bin\OpenPoseDemo.exe --video examples\media\video.avi --face --hand
とfaceオプションやhandオプションを付けて実行すれば良いようです。
参考サイト OpenPoseのFace Estimationを動かしてみた。 - Qiita
骨格の3次元座標が(セッティングすれば)取れる
OpenPose公開時の反応で多かったのが、各関節の3次元座標が取得できるという誤解でした(僕も最初はそう思っていました) しかし、実際にOpenPoseが行っている処理では、画像内の関節の2次元座標(xyの位置)だけしか求めていません。 なのでモーションキャプチャシステムに使うとかの用途だと、そのままでは使いにくい面もありました。
しかし 2017年7月に3次元骨格推定 がコミットされています。
openpose/3d_reconstruction_demo.md at master · CMU-Perceptual-Computing-Lab/openpose · GitHub
現時点ではまだbeta扱いで、UbuntuとWindowsでしか動作確認が無いですが、骨格の3次元座標が取得できるデモも作られています。(1.0.2で追加) カラクリとしては複数のカメラの内部行列(視野角とか歪みパラメータ)と外部行列(カメラ間の位置と姿勢)を予め求めておいた後、普通のOpenPoseを起動して、各カメラ上の関節座標の2次元座標を元に、3角測量的に3次元座標を求める、という仕組みです。
推奨カメラはPointGray社のFLIRで、たぶんこれはシャッタータイミングを同期させる事と、速くて高解像度のカメラの方が精度良く推定することが出来る為だと思います。もちろん理屈の上では機種がバラバラのUSBカメラを3台でも求めることは出来ます。
商用ライセンスが正式に発表
以前よりライセンスに「非商用、研究用に限る」と記載されていましたが、正式な商用利用の手段が公開されました。 商用利用の場合は年額25000ドル(約270万円)程度かかるようです。ちょっと高めなのでお財布と相談の上ご利用になれますね!
OpenPose - Realtime Multiperson 2D Keypoint Detection from Video | Flintbox