- OpenPose の TensorFlow 版が tf pose estimation として公開されている
https://github.com/ildoonet/tf-pose-estimation
- downloadする
[Anaconda Prompt 上で]
git clone https://www.github.com/ildoonet/tf-pose-estimation
- anaconda で python3をインストールする。
- conda 自体をupdateする。
[Anaconda Prompt 上で]
conda update -n base -c defaults conda
- 仮想環境 pose を作成する。
[Anaconda Prompt 上で]
conda create -n pose python=3.6 jupyter
- 作成したpython環境に切り換える
(base) % conda activate pose
- 必要そうなライブラリをインストールしておく。
(pose) % pip install cython → 0.29.21
(pose) % pip install numpy → 1.19.1
(pose) % pip install opencv-python → 4.3.0.36
- tensorflowをバージョンを指定してインストールする
(pose) % pip install tensorflow-gpu==1.14 → 1.14.0
- README.md を読んでインストールする。
(pose) % cd tf-pose-estimation
(pose) % pip install -r requirements.txt
途中で次のエラーが起きる。
ERROR: Failed building wheel for pycocotools
- 手動で pycocotools をインストールする。
(pose) % pip install "git+https://github.com/philferriere/cocoapi.git#egg=pycocotools&subdirectory=PythonAPI"
- もう一度、requirements.txt をインストールする
(pose) % pip install -r requirements.txt
今度はエラーは起きなかった。
- swigをインストールする。
- SWIG websiteからzipファイルをダウンロードして、展開する。
swigwin-4.0.2
- 環境変数のPath 変数に、swig.exe のパスを追加する。
自分の場合は D:\sys\swig-4.0.2 を環境変数Pathの最後に追加した。
- SWIG Windows Examplesを参照して環境変数を設定する。
Pythonの場合 (pythonのバージョンの違いに気をつけて仮想環境のファイルへのパスを指定する)
PYTHON_INCLUDE D:\sys\Anaconda3\env\pose\include\Python.h
PYTHON_LIB D:\sys\Anaconda3\env\pose\libs\python36.lib
- 環境変数の設定を変更したら、Anaconda Prompt を起動し直す必要があることに注意すること。
- c++ライブラリをビルドする。
(pose) % cd tf_pose\pafprocess
(pose) % swig -python -c++ pafprocess.i && python setup.py build_ext --inplace
- modelをダウンロードする。(bashを使うので)cygwinのウィンドウの中で以下のコマンドを実行する。wgetが使える cygwin のインストール方法はこちら
[cygwinのウィンドウの中で]
cd models/graph/cmu
bash download.sh
cd ../../..
- 画像ファイルに対して実行する
(pose) % python run.py --model=mobilenet_thin --resize=432x368 --image=images/p1.jpg
tf_pose/estimator.py で次のエラーが起きる。
ModuleNotFoundError: No module named 'tensorflow.contrib.tensorrt'
- tf_pose/estimator.py を tensorrt を使わないように変更する。
diff -c estimator.org.py estimator.py |
*** estimator.org.py 2020-07-23 15:29:36.524690000 +0900
--- estimator.py 2020-07-23 15:36:20.364439100 +0900
***************
*** 11,17 ****
from tf_pose import common
from tf_pose.common import CocoPart
from tf_pose.tensblur.smoother import Smoother
! import tensorflow.contrib.tensorrt as trt
try:
from tf_pose.pafprocess import pafprocess
--- 11,17 ----
from tf_pose import common
from tf_pose.common import CocoPart
from tf_pose.tensblur.smoother import Smoother
! #import tensorflow.contrib.tensorrt as trt
try:
from tf_pose.pafprocess import pafprocess
***************
*** 311,317 ****
with tf.gfile.GFile(graph_path, 'rb') as f:
graph_def = tf.GraphDef()
graph_def.ParseFromString(f.read())
!
if trt_bool is True:
output_nodes = ["Openpose/concat_stage7"]
graph_def = trt.create_inference_graph(
--- 311,317 ----
with tf.gfile.GFile(graph_path, 'rb') as f:
graph_def = tf.GraphDef()
graph_def.ParseFromString(f.read())
! '''
if trt_bool is True:
output_nodes = ["Openpose/concat_stage7"]
graph_def = trt.create_inference_graph(
***************
*** 326,332 ****
maximum_cached_engines=int(1e3),
use_calibration=True,
)
!
self.graph = tf.get_default_graph()
tf.import_graph_def(graph_def, name='TfPoseEstimator')
self.persistent_sess = tf.Session(graph=self.graph, config=tf_config)
--- 326,332 ----
maximum_cached_engines=int(1e3),
use_calibration=True,
)
! '''
self.graph = tf.get_default_graph()
tf.import_graph_def(graph_def, name='TfPoseEstimator')
self.persistent_sess = tf.Session(graph=self.graph, config=tf_config)
|
- 画像ファイルに対して実行する
(pose) % python run.py --model=mobilenet_thin --resize=432x368 --image=images/p1.jpg
run.py 88行目で次のエラーが起きる。
run.py:88: UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure.
plt.show()
matplotlib のbackend が agg であるのがいけないようだ。
import matplotlib
matplotlib.use('Agg')
みたいになっている部分を探して、TkAgg, WX, QTAgg, QT4Agg の順でbackendを試すといいようだ。
pose_datase.py:223行目 と train.py:2行目 にある
以下の変更を加えた。→ OK。正常に動作するようになった。
diff -c run.org.py run.py |
*** run.org.py 2020-07-23 16:34:46.402974600 +0900
--- run.py 2020-07-23 16:38:29.159986400 +0900
***************
*** 53,58 ****
--- 53,60 ----
image = TfPoseEstimator.draw_humans(image, humans, imgcopy=False)
try:
+ import matplotlib
+ matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
fig = plt.figure()
|
- 画像ファイルに対して実行する
(pose) % python run.py --model=mobilenet_thin --resize=432x368 --image=images/p1.jpg
正常に動作した。
- webカメラに対して実行する
python run_webcam.py --model=mobilenet_thin --resize=432x368 --camera=0
正常に動作した。
- デモ画像
tf-pose-estimation.mp4