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 を使ってみる

Windowsコマンドプロンプトを使う

ビデオカメラ

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)