rohaniのブログ

ゆるっと自然言語処理奴。ときどき工作系バイト。

骨格検出モジュール tf-pose-estimation をMacbookProで動かしてみた

tf-pose-estimation

github.com

'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のページを確認すると

f:id:ojho0318:20190529163853p:plain

確かに、Pythonの座はPython3のものになったようだ(誇大表現)

また、

その他のFormulaeのPythonへの依存性などもアップデートが入っています。
VimはこれまでPython3をサポートするためには
$ brew install --with-python3
が必要でしたが、今後は何もフラグを付けないでもPython3をサポートする様になります。 (Python3がインストールされてなければ自動でインストールされる。)

とのこと。ただ、これは現在Homebrewのページを確認すると

f:id:ojho0318:20190529164355p:plain

と言われていることから、時々は--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。)