【Python】OpenCVで複数人の姿勢推定 -OpenPose

前回はOpenCVで姿勢推定ができるOpenPoseを紹介しました。

前回紹介したものは画像内の1人の姿勢推定しかできず、複数人の姿勢をまとめて推定することはできませんでした。

しかし、前回同様複数人の姿勢推定ができるオープンソースのコードも提供されています。そこで今回はそのコードを使って画像内の複数人の姿勢推定をやっていこうと思います。

OpenPoseの導入

前回同様learnopencvというサイトがGitHubで提供しているソースコードをダウンロードします。

https://github.com/spmallick/learnopencv

解凍するとOpenPose-Multi-Personというプロジェクト(フォルダ)があり、今回はこれを使います。

OpenPose-Multi-Person

pose_iter_440000.caffemodelがないとき

プログラム内でpose_iter_440000.caffemodelというファイルを使用しているのですが、デフォルトでこのファイルがない場合があります(筆者はそのパターンでした)。

pose_iter_440000.caffemodelはOpenPose>pose>cocoに存在しているはずです。

learnopencv-master\OpenPose\pose\coco

もしこのフォルダになければ、下記URLからダウンロードしてくる必要があります。

https://github.com/foss-for-synopsys-dwc-arc-processors/synopsys-caffe-models/blob/master/caffe_models/openpose/caffe_model/pose_iter_440000.caffemodel

https://github.com/foss-for-synopsys-dwc-arc-processors/synopsys-caffe-models/blob/master/caffe_models/openpose/caffe_model/pose_iter_440000.caffemodel

「Download」を押せばファイルをダウンロードできるので、それを先ほどの場所に置きます。

画像で姿勢推定

今回のプロジェクトでは画像での姿勢推定用コードしか用意されていません(もちろんソースコードを少しいじれば動画にも対応できます)。

次の画像で姿勢推定をやってみます。

実行するプログラムはmulti-person-openpose.pyです。コマンドプロンプトを立ち上げ、次のコマンドを実行します。

cd OpenPose-Multi-Personのパス
python multi-person-openpose.py

実行すると、以下2種類の画像が出力されます。

骨格情報
取得点の座標

左の画像では検出された骨格点を結んだ骨格情報が、右の画像では骨格点の情報のみがプロットされています。

複数人の骨格がなかなかの精度で取得できています。

首元から足が生えているように見えなくもないですが、OpenPoseでは右腰、左腰を検出し、その2点は線で結ばれないようになっているのでそのように見えるだけです。

自分の好きな画像で実行したい場合は以下のようにコマンドを実行します。

python multi-person-openpose.py --image_file=画像ファイル名

OpenCVの学習におすすめ書籍

PythonでOpenCV始めてみようという方におすすめなのが以下書籍です。実装例も豊富なので、1からコードを書かずとも学習を進めることができます。

オライリーの1冊は読み物というより辞書としての利用におすすめです。お値段結構しますが、細かい情報までしっかりと詰め込まれています。

まとめ

OpenCVを使って複数人の姿勢推定を行うOpenPose-Multi-Personを使ってみました。

今回は画像のみでしたが、実際の場面では動画を用いた姿勢推定をやりたいケースが多いと思います。近いうちに、動画で実行する方法も紹介していきたいとおもいます。

OpenCVの基礎を身につけるためのロードマップは以下を参考にしてください。

ではでは👋