LoginSignup
40

More than 3 years have passed since last update.

【TensorFlow版】MacBookで行うOpenPose (osx Mojave対応)

Last updated at Posted at 2018-12-29

OpenPoseは人物の骨格などを、モーションキャプチャなしで簡単に表示できるツールです.
macbookユーザは内蔵カメラがあるので,リアルタイム動画描写もできます.

ここではOpenPoseによるボーンの推定を導入から実行までわかりやすくend-to-endで説明することを心がけています.
OpenPose

環境

・macOS Mojave version 10.14.2 (18C54)
・MacBook(Retina, 12-inch , 2017)
・anaconda3
・python3.6
Mojave

導入 ・ インストール

仮想環境の作成

まず,仮想環境を作る際に使うanacondaをインストールしましょう.
以下のリンクの記事を参考にインストールしてみて下さい.
リンク:(https://weblabo.oscasierra.net/python-anaconda-install-macos/)

インストールが完了したら早速仮想環境を作っていきます.

以下のようにpython3.6でposeという仮想環境を作ります.

仮想環境の作成
$ conda create -n pose python=3.6 anaconda

Proceed ([y]|n)?と聞かれるのでyを押します.

仮想環境の確認

作った仮想環境の一覧をみてみましょう.

仮想環境の一覧
$ conda info -e

# conda environments:
#
base                  *  /home/user/anaconda3
chainer                  /home/user/anaconda3/envs/chainer
pose                     /home/user/anaconda3/envs/pose
py27                     /home/user/anaconda3/envs/py27
py35                     /home/user/anaconda3/envs/py35

仮想環境に入る

仮想環境に入る
$ source activate pose

上記のコマンドで仮想環境に入れます.

仮想環境に入れているかの確認
(pose) 現在のディレクトリまでのパス $ 

のように左端に(pose)と出ていれば仮想環境に入れてます.
再び仮想環境の一覧をみてみると

仮想環境の一覧
$ conda info -e

# conda environments:
#
base                     /home/user/anaconda3
chainer                  /home/user/anaconda3/envs/chainer
pose                  *  /home/user/anaconda3/envs/pose
py27                     /home/user/anaconda3/envs/py27
py35                     /home/user/anaconda3/envs/py35

pose*がついてますね.この*をみることでも現在使用している仮想環境がわかります.
現在の仮想環境から抜ける場合は,

現在の仮想環境から抜ける
$ source deactivate

で抜けれます.terminal左側の(pose)がなくなると思います.
※抜けた人は上記手順でもう一度仮想環境に入ってください.

OpenPoseのgithubリポジトリをローカルにクローンする

OpenPoseのパックをクローン
$ git clone https://github.com/ildoonet/tf-pose-estimation

上記のコマンドでローカルの好きなディレクトリにクローンして持ってきましょう.(結構時間かかります.)

$ cd tf-openposeで、ダウンロードされたファイルに移動して

必要なモジュールのインストール
$ pip install -r requirements.txt
matplotlibのインストール
$ pip install matplotlib
swigのインストール
$ brew install swig
tensorflowのダウンロード
$ pip install tensorflow
opencvのバージョンアップ
$ pip install opencv-python==3.4.0.14

これらのインストール・ダウンロード・バージョンアップを行ってください.

さらに cd models/graph/cmu でcmuという階層に移動して

必要ファイルのインストール
$ bash download.sh

上記コマンドで必要なファイルをインストールします.(そこそこ時間かかります.)

加えて ~/tf-pose-estimation/tf_pose/pafprocess/へチェンジディレクトリして,

$ swig -python -c++ pafprocess.i && python3 setup.py build_ext --inplace

を実行してください.

そしてここで,以下のようなエラーが出る方がいると思います.
(出なかった場合は飛ばして結構です.)

pafprocess $ sudo python setup.py build_ext --inplace
running build_ext
building '_pafprocess' extension
swigging pafprocess.i to pafprocess_wrap.cpp
swig -python -c++ -o pafprocess_wrap.cpp pafprocess.i
g++ -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/anaconda3/include -arch x86_64 -I/anaconda3/include -arch x86_64 -I/anaconda3/lib/python3.6/site-packages/numpy/core/include -I. -I/anaconda3/include/python3.6m -c pafprocess.cpp -o build/temp.macosx-10.7-x86_64-3.6/pafprocess.o
warning: include path for stdlibc++ headers not found; pass '-std=libc++' on the command line to use the libc++
standard library instead [-Wstdlibcxx-not-found]
pafprocess.cpp:1:10: fatal error: 'iostream' file not found
#include 
^~~~~~~~~~
1 warning and 1 error generated.
error: command 'g++' failed with exit status 1

ここでエラーが出た方は,XcodeのCommand Line Tools のバージョンに問題があります.
Mojaveにアップデートした際に,XcodeのCommand Line Toolsもアップデートした方は"Command Line Tools (macOS 10.14) for Xcode 10.1"もしくは "Command Line Tools (macOS 10.14) for Xcode 10"の状態になっており,これが原因で上記のエラーが出ています.

Xcode 10以降のバージョンが対応していないため,Xcode 9以前を追加でインストールします.

私の場合はMore Downloads for Apple Developersのサイトで,"Command Line Tools (macOS 10.13) for Xcode 9.4.1"のdmgファイルをダウンロードしてインストールしたところrun.pyの実行がうまくいきました.
※10.14に対して10.13でOSのバージョンが合ってませんがうまくいきます.

スクリーンショット 2018-12-22 1.47.35.png
(+をクリックすると右側にdmgファイルが現れるのでそこからダウンロードします.)

run.pyの実行の際,matplotlibのimportエラーが出ましたので,「Pythonでmatplotlibをimportするとエラーが出る場合の対処策(Mac)」に従って対処しました.

実行

お疲れ様でした.
早速実行していきましょう.

まずはフォルダを移動して,

tf-openpose/srcの階層に移動
cd ../../..
cd tf-openpose/src

実行していきます.

静止画像についての実行

$ python run.py --model=mobilenet_thin --resize=432x368 --image=images/p1.jpg

上記のコマンドで,以下のWindowが出力されれば完了です.
result

MacBook内蔵カメラを使ったリアルタイム映像での実行

$ python run_webcam.py --model=mobilenet_thin --resize=432x368 --camera=0

内蔵カメラが起動され,リアルタイムで動き始めます.
終了する際はターミナルをcontrol+Cで抜けてください.

おまけ

実行画面で出てくるopencvのwindowはサイズが可変でなく固定で最大化もできないと思います.
これを変えたい場合はrun_webcam_backup.pyのコードの下部のほうを以下のように書き換えましょう.

一行を追加
cv2.putText(image,
            "FPS: %f" % (1.0 / (time.time() - fps_time)),
            (10, 10),  cv2.FONT_HERSHEY_SIMPLEX, 0.5,
            (0, 255, 0), 2)
cv2.namedWindow("tf-pose-estimation result", cv2.WINDOW_NORMAL) #追記 ウィンドウサイズを可変に
cv2.imshow('tf-pose-estimation result', image)

cv2.namedWindow("tf-pose-estimation result", cv2.WINDOW_NORMAL)という一行を追加しただけです.

P.S.

機械学習,画像認識、自動運転の情報を発信していくのでQiitaと twitterのフォローお待ちしています!

参考URL

https://qiita.com/ume1126/items/cc2ae610418296e6db22
https://github.com/ildoonet/tf-pose-estimation/issues/361
https://stackoverflow.com/questions/52441952/os-x-ld-library-not-found-for-lstdc

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
40