骨格検出モジュール tf-pose-estimation をMacbookProで動かしてみた
tf-pose-estimation
'Openpose', human pose estimation algorithm, have been implemented using Tensorflow. It also provides several variants that have some changes to the network structure for real-time processing on the CPU or low-power embedded devices.
日本語だと、だいたいこんな意味だと思う。↓
'Openpose'というオープンソースの人骨格検出アルゴリズムはTensorflowを使って実装されてきました。'tf-pose-estimation'はCPUやlow-powerな組み込み機器のためにネットワーク構造を変えたバリエーションの一つです。
折角Proを手に入れたので、やってみることにした
kinect買わなくても骨格検出できるなんて素敵。
以下、試した環境
- MacBook Pro(15-inch, 2018)
- プロセッサ:2.2GHz Intel Core i7
- メモリ:16GB 2400 MHz DDR4
- グラフィックス:Radeon Pro 555X 4096 MB Intel UHD Graphics 630 1536 MB
...グラフィックスは関係ないか
手順
基本的には公式GitHubに書いてある通り。 幾つか引っかかった点をメモする
opencv3のインストール
opencv3をpython3で動かせるようにするためには、インストール時に--with-python3
付けなければならない、という情報がある。
Homebrewで Python3 OpenCV3をMacにインストール - Qiitaとか
が、現在、brew install
時に--with-python3
オプションを付けるとエラーを吐かれる。
実は、これはopencv3に限った話ではない、らしい。 こちらの記事 Homebrewの'python'でインストールされるものがpython3になった(2018/3/2) によると、
また、pythonというFormulaはPython2の代わりにPython3をインストールするようになります。
python3という名前は引き続き使えてbrew install python3とするとbrew install pythonと同じ動作になります。 (brew info python3とかで簡単に確認出来ます。)
だそうで、実際Homebrewのページを確認すると
確かに、Pythonの座はPython3のものになったようだ(誇大表現)
また、
その他のFormulaeのPythonへの依存性などもアップデートが入っています。
VimはこれまでPython3をサポートするためには
$ brew install --with-python3
が必要でしたが、今後は何もフラグを付けないでもPython3をサポートする様になります。 (Python3がインストールされてなければ自動でインストールされる。)
とのこと。ただ、これは現在Homebrewのページを確認すると
と言われていることから、時々は--with-python
オプション(for Python3)やら--with-python@2
オプション(for python2)やらが必要になることもあるようだ。
ちなみに、下の段落はタイムリーなことにopencvに関する注意書きだったので撮りました。 システムのpipでインストールしたopencvを、brew installしたpythonで読み込んじゃいけないらしい。(雑に読んだから解釈間違ってるかも)
結局、今opencv3(python3でも使いたいな)をインストールする場合には
brew install opencv3
で良かった。
swig と Cython と wget も追加でbrew installした
公式GitHubのDependenciesには次のように書かれているのだが
You need dependencies below.
- python3
- tensorflow 1.4.1+
- opencv3, protobuf, python3-tk
- slidingwindow
私の環境にはswig
, Cython
, wget
も入っていなかったので、追加で入れる必要があった。
どうでもいい話だけれど、swig
を入れるときにswing
とタイポして、入らないなー入らないなーと5分くらい無駄にした。
動かしてみた
公式の紹介どおり、以下のコマンドでデモを実行。
$ python run_webcam.py --model=mobilenet_thin --resize=432x368 --camera=0
ただし、一回目のときはウェブカメラの使用を許可していなかったので、カメラ使用許可のポップアップが出て、プログラムはエラーで止まってしまった。 許可したら、次はちゃんと動いた。
感想
ちゃんと骨格検出していて、偶然後ろを通りかかった研究室の後輩も普通に検出されていた。 あと、触れ込み通りCPUでもちゃんとリアルタイムに検出されていた。
すごかった。
(...ただ、すごい唸ってた。Macbook Pro。)