YOLOv8のposeで動画ファイルから姿勢推定をしてみた

  • このエントリーをはてなブックマークに追加

Pythonの外部ライブラリultralyticsを用いれば、YOLOを使ってバウンディングボックスの描画だけでなく、高度な姿勢推定も実現可能です。この記事では、動画ファイルに対してposeモデルを利用した姿勢推定コードの作成と利用方法を分かりやすく紹介します。

こんにちは。wat(@watlablog)です。ここではYOLOv8を使って姿勢推定を行う方法を紹介します

YOLOによる姿勢推定とは?

YOLOYou Only Look Once)とは、コンピュータを使った物体検出手法です。この手法は従来よりも短時間で何の物体が画像内のどこにあるかを推定できます。YOLOを使った物体検出は以下の記事でPythonによるコードを紹介していますので、是非参考にしてください。
Python/ultralyticsでYOLOv8をただ使ってみた

YOLOを使うとこんな感じで物体検出ができます。この時、物体を囲っている四角形はバウンディングボックスと呼ばれます。

YOLOによる物体検出結果例

そして姿勢推定とは、検出した人間の姿勢ポーズ)を推定する技術です。例えば以下の図はYOLOによる物体検出で人物が検出されていますが、そのバウンディングボックスの中にカラフルな線が入っています。この線は手足、頭等の骨格を示しており姿勢推定結果を意味します。

今回はこのような写真による姿勢推定の他に、動画ファイルに対する姿勢推定を行うPythonコードを紹介します。

Pythonで姿勢推定するコード

動作環境

この記事のコードは以下の環境で動作確認をしました。

  
Mac OSmacOS Ventura 13.2.1
CPU1.4[GHz]
メモリ8[GB]
Python Python 3.9.6
PyCharm (IDE) PyCharm CE 2020.1
opencv-python 4.2.0.76
ultralytics 8.0.154

写真から姿勢推定するコード

動画ファイルを扱う前に、単一の写真を使って基本的な使い方を習得しましょう。

サンプルの写真素材

姿勢推定コードを検証するにあたり、人物の写った、しかも色々な姿勢になっている写真を用意するのがなかなか面倒かも知れません。今回はphotoAC(https://www.photo-ac.com/)さんのフリー素材を使います。

全コード

画像関係はOpenCVcv2)を使い、姿勢推定はultraliticsYOLOからモデルを呼び出します。.pyファイルと同じ場所にsample.jpgを置いてコードを実行することで姿勢推定の結果がオーバーレイされた画像pose-out.jpgが保存されるプログラムになっています。

実行結果

こちらが実行結果です。.plot(boxes=False)とすることでバウンディングボックスを非表示にしています。今回はyolov8s-pose.ptを使いましたが、sの部分を変更することでモデルの精度を変更できます(n→s→m→l→xの順で精度が上がる)。

写真の姿勢推定をした例

動画ファイルから姿勢推定するコード

サンプルの動画素材

写真と同様に、フリーの動画素材をvideoAC(https://video-ac.com/)さんからダウンロードして使いました。

全コード

写真に対する姿勢推定と同じ書き方で動画ファイルを使った姿勢推定コードを以下に示します。

実行結果

実行結果はこちら。姿勢推定といったらスポーツだと思いゴルフの動画をダウンロードして使ってみました。物陰に隠れると精度が悪化する様子等も確認できました。

ダンス動画も姿勢推定してみましたが、人が重なると難しいようですね。

カメラからリアルタイムに姿勢推定するコード

こちらはおまけです。以下のコードはカメラからリアルタイムに姿勢推定を行うコードです。qキーを押すまで推定を続け、姿勢推定結果がオーバーレイされた動画を保存します。

まとめ

この記事ではultraliticsのyolo-poseを使ったPythonによる姿勢推定方法を紹介しました。
写真、動画、カメラ…の場合の姿勢推定コードを紹介しましたが、どれも同じように書くことができました。

今回は使い方のみを取り扱いましたが、次回は姿勢情報を使って何かできないか試してみたいと思います。

既に学習済みのモデルを使うことで誰でも簡単に最先端の技術が使えるのはすごいですね!
Xでも関連情報をつぶやいているので、wat(@watlablog)のフォローをYOLOしくお願いします!

SNSでもご購読できます。

コメントを残す

*