YOLO26-pose による人体の姿勢推定(Windows 上)

【概要】

Windows 上で Ultralytics YOLO26-pose を使用し,画像および カメラ映像 から人体の キーポイント(関節位置)を推定する.YOLO26-pose は COCO Keypoints データセットで学習済みであり,1人の人物につき 17 個のキーポイントを出力する.

以前このページで扱っていた trustcoinmining/openpose-plus は,Python 3.7 と TensorFlow 1.15.5 を前提とし,Visual Studio 2017 による C++ ビルドを必要とする.これらは現在の Windows 環境では入手・構築が難しいため,同じ「人体のキーポイント抽出」を,現行の Python で動作する YOLO26-pose により行う手順に置き換えて説明する.

【目次】

【関連する外部ページ】

前準備

Python 3.12 のインストール(Windows 上) [クリックして展開]

以下のいずれかの方法で Python 3.12 をインストールする。Python 3.12 がインストール済みの場合、この手順は不要である。

方法1:winget によるインストール

管理者権限でコマンドプロンプトを起動する (手順:Windowsキーまたはスタートメニュー → cmd と入力 → 右クリック → 「管理者として実行」)。

winget install -e --id Python.Python.3.12 --scope machine --silent --accept-source-agreements --accept-package-agreements --override "/quiet InstallAllUsers=1 PrependPath=1 AssociateFiles=1 InstallLauncherAllUsers=1"

--scope machine を指定すると、システム全体(全ユーザー向け)にインストールされる。このオプションの実行には管理者権限が必要である。インストール完了後、コマンドプロンプトを再起動すると PATH が反映される。

方法2:インストーラーによるインストール

  1. Python 公式サイト(https://www.python.org/downloads/)から Windows 用インストーラーをダウンロードする。
  2. ダウンロードしたインストーラーを実行する。
  3. 初期画面の下部にある「Add python.exe to PATH」にチェックを入れてから「Customize installation」を選択する。このチェックを入れないと、コマンドプロンプトから python コマンドを実行できない。
  4. 「Install Python 3.xx for all users」にチェックを入れ、「Install」をクリックする。

インストールの確認

コマンドプロンプトで次のコマンドを実行する。

py -3.12 --version

バージョン番号(例:Python 3.12.x)が表示されればインストールできている。

AIエディタ Windsurf のインストール(Windows 上) [クリックして展開]

Python プログラムの編集・実行に使用するエディタとして、ここでは Windsurf のインストール手順を示す。Windsurf がインストール済みの場合、この手順は不要である。

管理者権限でコマンドプロンプトを起動する (手順:Windowsキーまたはスタートメニュー → cmd と入力 → 右クリック → 「管理者として実行」)。

winget install --scope machine --id Codeium.Windsurf -e --silent --disable-interactivity --force --accept-source-agreements --accept-package-agreements --custom "/SP- /SUPPRESSMSGBOXES /NORESTART /CLOSEAPPLICATIONS /DIR=""C:\Program Files\Windsurf"" /MERGETASKS=!runcode,addtopath,associatewithfiles,!desktopicon"
powershell -Command "$env:Path=[System.Environment]::GetEnvironmentVariable('Path','Machine')+';'+[System.Environment]::GetEnvironmentVariable('Path','User'); windsurf --install-extension MS-CEINTL.vscode-language-pack-ja --force; windsurf --install-extension ms-python.python --force; windsurf --install-extension Codeium.windsurfPyright --force"

--scope machine を指定すると、システム全体(全ユーザー向け)にインストールされる。このオプションの実行には管理者権限が必要である。インストール完了後、コマンドプロンプトを再起動すると PATH が反映される。

【関連する外部ページ】

Windsurf の公式ページ: https://windsurf.com/

ultralytics のインストール

管理者権限でコマンドプロンプトを起動する (手順:Windowsキーまたはスタートメニュー → cmd と入力 → 右クリック → 「管理者として実行」)。次のコマンドを実行する。

pip install -U --no-user pip setuptools
pip install -U --no-user ultralytics opencv-python

上のコマンドにより、PyTorch(torch, torchvision)を含む依存パッケージが同時にインストールされる。CPU 版の PyTorch が入るため、NVIDIA GPU で実行する場合は、次のコマンドで CUDA 対応版の PyTorch に入れ替える(CUDA 12.4 対応版の例)。

pip install -U --no-user --index-url https://download.pytorch.org/whl/cu124 torch torchvision

インストールの確認を行う。コマンドプロンプトを起動する (手順:Windowsキーまたはスタートメニュー → cmd と入力)。次のコマンドを実行する。

py -3.12 -c "import ultralytics; print(ultralytics.__version__)"
py -3.12 -c "import torch; print(torch.__version__, torch.cuda.is_available())"

バージョン番号が表示されればインストールできている。torch.cuda.is_available() が True であれば GPU が使用される。False の場合は CPU で実行される。

YOLO26-pose のモデル

YOLO26 の姿勢推定モデルは、ファイル名の末尾が -pose である。モデルファイルは初回実行時に自動でダウンロードされる。モデルは大きさの順に yolo26n-pose.pt(最小・最速)、yolo26s-pose.pt、yolo26m-pose.pt、yolo26l-pose.pt、yolo26x-pose.pt(最大・最高精度)がある。

17 個のキーポイント

COCO Keypoints で学習した YOLO26-pose は、1人につき次の 17 点を出力する。インデックスの順は、0: 鼻、1: 左目、2: 右目、3: 左耳、4: 右耳、5: 左肩、6: 右肩、7: 左肘、8: 右肘、9: 左手首、10: 右手首、11: 左腰、12: 右腰、13: 左膝、14: 右膝、15: 左足首、16: 右足首である。

このページで説明のために使用する画像

人物が写った画像 bus.jpg, zidane.jpg をダウンロードする。 管理者権限でコマンドプロンプトを起動する (手順:Windowsキーまたはスタートメニュー → cmd と入力 → 右クリック → 「管理者として実行」)。次のコマンドを実行する。

mkdir c:\image
cd c:\image
curl -L https://ultralytics.com/images/bus.jpg -o bus.jpg
curl -L https://ultralytics.com/images/zidane.jpg -o zidane.jpg
Ultralytics が公開しているサンプル画像 bus.jpg, zidane.jpg を使用する(謝辞:画像の作者に感謝します)。

コマンドによる姿勢推定

ultralytics のインストールにより yolo コマンドが使用できる。 コマンドプロンプトを起動する (手順:Windowsキーまたはスタートメニュー → cmd と入力)。次のコマンドを実行する。

yolo pose predict model=yolo26n-pose.pt source=c:\image\bus.jpg save=True

結果画像は runs\pose\predict の下に保存される。保存先はコマンド実行時のメッセージに表示される。source にはフォルダ、動画ファイル、画像の URL も指定できる。

Python プログラムによる姿勢推定

次の Python プログラムは、画像を読み込み、YOLO26-pose でキーポイントを推定し、結果を画面表示する。あわせて、検出された人物ごとのキーポイント座標を表示する。 Windsurf などのエディタで pose1.py の名前で保存し、実行する。

import cv2
from ultralytics import YOLO

model = YOLO("yolo26n-pose.pt")

img = cv2.imread("c:/image/bus.jpg")
results = model(img)

for r in results:
    # 検出された人物ごとのキーポイント座標(画素単位, 17点 × (x, y))
    print(r.keypoints.xy)
    # 信頼度付きのキーポイント(x, y, conf)
    print(r.keypoints.data)
    cv2.imshow("YOLO26-pose", r.plot())

cv2.waitKey(0)
cv2.destroyAllWindows()

r.plot() は、推定結果(バウンディングボックス、キーポイント、骨格の線)を描画した画像を返す。r.keypoints.xy は画素単位の座標、r.keypoints.xyn は画像サイズで正規化した座標である。

実行は、コマンドプロンプトを起動して行う (手順:Windowsキーまたはスタートメニュー → cmd と入力)。次のコマンドを実行する。

py -3.12 pose1.py

カメラ映像での姿勢推定

パソコンに接続したカメラの映像に対して、連続的に姿勢推定を行うプログラムである。q キーで終了する。 Windsurf などのエディタで pose2.py の名前で保存し、実行する。

import cv2
from ultralytics import YOLO

model = YOLO("yolo26n-pose.pt")

cap = cv2.VideoCapture(0)

while True:
    ret, frame = cap.read()
    if not ret:
        break
    results = model(frame, verbose=False)
    cv2.imshow("YOLO26-pose", results[0].plot())
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

実行は、コマンドプロンプトを起動して行う (手順:Windowsキーまたはスタートメニュー → cmd と入力)。次のコマンドを実行する。

py -3.12 pose2.py

処理が遅い場合は、model = YOLO("yolo26n-pose.pt") の最小モデルを使用し、model(frame, imgsz=320) のように入力サイズを小さくする。精度を優先する場合は yolo26m-pose.pt などの大きいモデルを使用する。