【Python】OpenCVで簡単に姿勢推定してみる -OpenPose

OpenCVでは様々な画像処理ができることをこれまでに紹介してきました。今回は画像から人物の姿勢を推定してみます。

姿勢推定とは、いわゆる骨格の検出です。画像に映る人物の骨格を検出することで、その人物の姿勢、関節の角度などがより明確になります。

姿勢推定はスポーツや医療など様々な場面で用いられています。OpenCVを使えば、姿勢推定が簡単にできます。今回はPythonでOpenCVを使って姿勢推定をやってみます。

OpenPoseの導入

OpenPoseとはオープンソースとして世間一般に公開されている骨格推定のプログラムコードです。このOpenPoseもOpenCVをもとに作られています。

learnopencvというサイトがGithub上で提供するソースコードをダウンロードします。

https://github.com/spmallick/learnopencv

このサイト自体もOpenCVにおける画像処理の手順を体系的にまとめており、非常にわかりやすいです(英語ですが)。

展開するとOpenPoseというプロジェクトがあるので、これを使います。なおフォルダの構成は以下のようになっています。

OpenPoseのフォルダ構成

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」を押せばファイルをダウンロードできるので、それを先ほどの場所に置きます。

画像で姿勢推定

まずは画像で姿勢推定をやってみます。サンプル画像として以下の画像が用意されています。

single.jpeg
single.jpeg

画像による姿勢推定はOpenPoseImage.pyで行います。スクリプトをそのまま実行してみます。コマンドプロンプトを開き、以下を実行してください。なお、カレントディレクトリはOpenPosenの場所を指定してください。

cd OpenPoseのパス
python OpenPoseImage.py

すると、以下のような画像が出力されるはずです。

Skeleton
Keypoints

左側の画像では人物の骨格が、右側では関節点が番号とともに描画されています。OpenPoseでは最大18点の関節を検出できます。

インプットとなる画像を指定する場合は、以下のコマンドで実行します。

python OpenPoseImage.py --image_file=画像ファイル名

もちろんPythonスクリプトなので、SpyderやVisual Studio Codeなどから直接実行することもできます。

コードをいじれば関節座標の出力などもできるので試してみて下さい。

注意

今回紹介しているOpenPoseプロジェクトでは、複数名の骨格検出ができません。試しに、以下の画像で実行してみます。

multiple.jpeg
multiple.jpeg
python OpenPoseImage.py --image_file=multiple.jpeg
Skeleton
Keypoints

このようにバラバラになってしまいます。複数名まとめて骨格検出する場合は、OpenPose-Multi-Personというプロジェクトを利用する必要があります。

動画で姿勢推定

動画で姿勢推定をしたい場合はOpenPoseVideo.pyを使用します。コマンドからの実行方法は先ほどとほとんど同じです。

cd OpenPoseのパス
python OpenPoseVideo.py

ファイルを指定したい場合は

python OpenPoseVideo.py --video_file=動画ファイル名

として実行します。すると、動画に骨格情報が付与されて出力されるはずです。ちなみに、動画で実行しようとするとそれなりにPCスペックが求められるのであしからず、、

OpenCVの学習におすすめ書籍

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

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

まとめ

PythonとOpenCV(OpenPose)で画像から姿勢推定をする方法を紹介しました。オープンソースで公開されており、手軽に使えるのが非常にありがたいです。Pythonに慣れている人であれば、コードを編集して座標データを出力したりなど用途はかなりあると思います。

複数名検出できるOpenPose-Multi-Personもいずれ紹介しようと思います!

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

ではでは👋