はじめに
画像のみから骨格推定が可能なOpenPose。
https://github.com/CMU-Perceptual-Computing-Lab/openpose
Latest Features
・ Mar 2018: CPU version!
とのことで、今年CPU版も出たようです。CPU版を試してみたかったのですが、、、
環境の準備がそこそこ大変そうだったので、
Tensorflowで実装されたこちらを試してみました。
環境
-
Google Colaboratory(python3/GPU)
-
windows10 home(64bit)
-
python 3.5.4
-
tensorflow 1.2.1
-
openCV 3.3.1
-
anaconda navigator 1.8.3
windows端末とColaboratory(ubuntu)両方で実行してみました。
Google Colaboratoryで実行
Colab Notebooksを新規作成(python3/GPU)し、作業を進めます。
実行ソースはこちら→GitHub
導入
- インストール
anacondaの「Environments」から「Open Terminal」でターミナルを起動。
ターミナル
# gitからclone
!git clone https://github.com/ildoonet/tf-pose-estimation.git
# 確認
!ls
# 必要なライブラリをインストール
%cd ./tf-pose-estimation
!ls
!pip install -r requirements.txt
- 学習済モデル(.pbファイル)を取得
%cd /content/tf-pose-estimation/models/graph/cmu
!bash download.sh
実行
先人に習って同じ画像でまずは骨格推定
# 画像を取得
!wget https://www.pakutaso.com/shared/img/thumb/150415022548_TP_V.jpg
# 確認
!ls
# 実行
%cd /content/tf-pose-estimation/src
%run -i run.py --model=mobilenet_thin --resolution=432x368 --image=/content/tf-pose-estimation/models/graph/cmu/150415022548_TP_V.jpg
画像が小さくて分かりずらいですが、、うまく骨格を検出できているようです。
windowsで実行
基本的にはGoogle Colaboratoryと同じです。
前準備
- gitをコマンドラインから使えるようにする
こちらを参考に、gitをインストール。
環境変数にもパスを通しておきました。
- ソース取得&修正
https://github.com/ildoonet/tf-pose-estimation からzipをダウンロードし、適当なディレクトリに展開。
インストールでエラーになってしまったので、tf-pose-estimation-master/requirements.txtから「ast」をコメントアウトしました。
argparse
matplotlib
scipy
tqdm
requests
fire
#ast ←コメントアウト
dill
git+https://github.com/ppwwyyxx/tensorpack.git
導入
- インストール
# 展開ディレクトリへ移動
cd ./tf-pose-estimation-master
# 必要なライブラリをインストール
pip install -r requirements.txt
実行前準備
- 実行結果表示サイズを大きく
run.pyの50行目くらい、出力サイズを指定するよう修正
# fig = plt.figure()
fig = plt.figure(figsize=(15, 10)) # ←変更
- 実行結果をファイルに保存
実行結果をファイルに出力したかったので、ファイル出力処理を追加しました。
(横着して、フォルダとファイル名は固定・・・)
同じくrun.pyの50行目くらい、ファイル出力を追加
a = fig.add_subplot(2, 2, 1)
a.set_title('Result')
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
cv2.imwrite('./result.jpg', image) # ←追加
実行
jupyterNotebookを新規作成し、実行します。
%run -i run.py --model=mobilenet_thin --resolution=432x368 --image=C:/path/to/image/AdobeStock_122984958.jpeg
Mask R-CNN(keras)で人物検出 on Colaboratoryでも使ったスポーツシーンの画像で試した結果
![tf-pose05.PNG](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F170139%2Ff977deb7-9fe8-e9de-e7f2-0cc82fbc4cb5.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=38d5f87dc997f5562051a79e091eb1db)
![tf-pose01.PNG](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F170139%2F709f7a65-ecbf-4ab4-fb14-4963204f7fbc.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=5ac372ff98ef166927aeb94dbe83970f)
![tf-pose02.PNG](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F170139%2F17d89dab-e014-737b-fe49-467c670943a5.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=5cc4d8bcd1abf961cfeb224d926cc593)
![tf-pose03.PNG](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F170139%2F35d3dc5f-379b-d871-4989-de4d75ae9e60.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=5dfd2bc42729fe737f6010f877766132)
![tf-pose04.PNG](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F170139%2F9a7aa3e0-e65b-874d-9bb2-731bfb8c1880.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=d18225f3f89d2f873cc003794c923a7c)
まとめ
複雑な姿勢はうまく検出できないていないところもありましたが、動きがあるような動作でも見事に骨格推定できています。
次はそれぞれの座標データを取れるようにしてみたい。