29
34

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

OpenposeのPYTHON API

Posted at

概要

OpenPoseという骨格推定ができるOSSがめっちゃすごい!
さらに最近、本家にPython APIが実装されたみたいなので、試してみました。
Ubuntu 14.04.5 LTS(GPUあり)です。

インストール

以下、${HOME}/openpose_wsというフォルダ以下をワークスペースとして説明します
なお、本記事執筆時点でのOpenposeのコミット番号は7c21e0b6b184e4dd0b7e119f470089a4149b6e2dです。

$ mkdir ${HOME}/openpose_ws
$ cd ${HOME}/openpose_ws
$ git clone https://github.com/CMU-Perceptual-Computing-Lab/openpose
$ cd openpose
($ git checkout 7c21e0b6b184e4dd0b7e119f470089a4149b6e2d) # 必要であれば行ってください
$ mkdir build; cd build
$ cmake -DBUILD_PYTHON=true .. 
$ make -j5 # -j5 は自身の環境に合わせて変更してください
$ sudo make install

実行結果

$ cd {HOME}/openpose_ws/openpose/build/examples/tutorial_python
$ python 1_extract_pose.py

上記実行後、detectの結果と以下の画像が表示されればOK

output_sample.jpg

python実装についてのメモ

1_extract_pose.pyの中身を少し見てみたので、メモです。
parameterの辞書を引数としてOpenPoseのインスタンスを生成し(37行目)、
openpose.forward(image, display) にて、結果を受け取る流れみたいです。
めっちゃ簡単ですね!

なお、forward関数の第一引数は、numpyarray, 第二引数のdisplayは、OpenPoseで骨格推定結果を埋め込んだ画像を返り値に含めるかどうかのフラグです。
なので、keypointsの配列のみ欲しい場合は、43行目の部分を

keypoints = openpose.forward(img, False)

と変更する必要有です。

以下、1_extract_pose.pyの抜粋です。

...
 22 params = dict()
 23 params["logging_level"] = 3
 24 params["output_resolution"] = "-1x-1"
 25 params["net_resolution"] = "-1x368"
 26 params["model_pose"] = "BODY_25"
 27 params["alpha_pose"] = 0.6
 28 params["scale_gap"] = 0.3
 29 params["scale_number"] = 1
 30 params["render_threshold"] = 0.05
 31 # If GPU version is built, and multiple GPUs are available, set the ID here
 32 params["num_gpu_start"] = 0
 33 params["disable_blending"] = False
 34 # Ensure you point to the correct path where models are located
 35 params["default_model_folder"] = dir_path + "/../../../models/"
 36 # Construct OpenPose object allocates GPU memory
 37 openpose = OpenPose(params)
 38
 39 while 1:
 40     # Read new image
 41     img = cv2.imread("../../../examples/media/COCO_val2014_000000000192.jpg")
 42     # Output keypoints and the image with the human skeleton blended on it
 43     keypoints, output_image = openpose.forward(img, True)
...

OpenPoseクラスは、${HOME}/openpose_ws/openpose/build/python/openpose/openpose.pyにて定義されているので、
もっと詳細が知りたい方は、こちらを確認してみてください。

その他

python2(.7.6)およびpython3(.4.3)でも動作しました!
なお、/usr/local/python/openposeに必要なライブラリがインストールされるので、PYTHONPATHを、
インストール先フォルダに設定して、35行目のparams["default_model_folder"] = dir_path + "/../../../models/"
自身の環境に合わせて修正することが必要です。

参考

29
34
0

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
29
34

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?