OpenPose による姿勢推定(Windows 上)
【概要】
OpenPose は、人体、顔、手、足の「キーポイント」(関節などの特徴点)を検出するソフトウェアである。複数のカメラを配置して、3次元のキーポイントを得る機能もある。OpenPose の利用条件などは、利用者が確認すること。次のWeb ページを活用してください。
https://flintbox.com/public/project/47343/
謝辞:このWebページで紹介する OpenPose ソフトウェアの作者に感謝します。
【目次】
【関連する外部ページ】
https://github.com/jrkwon/openpose/blob/master/doc/quick_start.md【サイト内の関連情報】
前準備
OpenPose のインストール
Windows での OpenPose のインストール手順は,別ページで説明
OpenPose を使ってみる
ビデオカメラ
USB接続できるビデオカメラを準備し,パソコンに接続しておく.
GPU 版を使う場合:
cd C:\openpose-1.7.0-binaries-win64-gpu-python3.7-flir-3d_recommended
cd openpose
bin\OpenPoseDemo.exe
付属の動画ファイルを使用
GPU 版を使う場合:
cd C:\openpose-1.7.0-binaries-win64-gpu-python3.7-flir-3d_recommended
cd openpose
bin\OpenPoseDemo.exe --video examples\media\video.avi
付属の画像ファイル
GPU 版を使う場合:
cd C:\openpose-1.7.0-binaries-win64-gpu-python3.7-flir-3d_recommended
cd openpose
bin\OpenPoseDemo.exe --image_dir examples\media
オプションの確認
GPU 版を使う場合:
cd C:\openpose-1.7.0-binaries-win64-gpu-python3.7-flir-3d_recommended
cd openpose
bin\OpenPoseDemo.exe --help
--face, --hand オプションを試してみる
顔と手の情報も得られる
GPU 版を使う場合:
cd C:\openpose-1.7.0-binaries-win64-gpu-python3.7-flir-3d_recommended
cd openpose
bin\OpenPoseDemo.exe --image_dir examples\media -face --hand
--write_json オプションを試してみる
* 末尾の「.」(半角ピリオド)はディレクトリの指定
GPU 版を使う場合:
cd C:\openpose-1.7.0-binaries-win64-gpu-python3.7-flir-3d_recommended
cd openpose
bin\OpenPoseDemo.exe --image_dir examples\media --write_json .
.json ファイルができていることがわかる
dir /w
Python から扱ってみる(書きかけ)
次のプログラムを動かす.
import sys
import cv2
# Remember to add your installation path here
sys.path.append('C:/openpose-1.7.0-binaries-win64-gpu-python3.7-flir-3d_recommended/openpose/bin/python')
from openpose import pyopenpose as op
params = dict()
params["model_folder"] = "C:/openpose-1.7.0-binaries-win64-gpu-python3.7-flir-3d_recommended/openpose/models/"
# OpenPose オブジェクトを生成し,起動する
opWrapper = op.WrapperPython()
opWrapper.configure(params)
opWrapper.start()
while True:
# 画像を読み込む
img = cv2.imread("C:/openpose-1.7.0-binaries-win64-gpu-python3.7-flir-3d_recommended/openpose/examples/media/COCO_val2014_000000000192.jpg")
# キーポイントを検出し,骨格を重畳した画像を得る
datum = op.Datum()
datum.cvInputData = img
opWrapper.emplaceAndPop(op.VectorDatum([datum]))
# 検出された人物のキーポイントを表示する
print(datum.poseKeypoints)
# 画像を表示する
cv2.imshow("output", datum.cvOutputData)
cv2.waitKey(15)