1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

YOLO26 で姿勢を推定する方法

1
Last updated at Posted at 2026-10-06

本稿では YOLO26 で姿勢を推定する方法について述べる。

image.png

環境

  • Date: 2026/10/06
  • CPU: Intel Core i5-13400F
  • GPU: NVIDIA GeForce RTX 5070Ti
  • RAM: 32GB
  • OS: Windows 11 Home 25H2 日本語版
  • Camera: Logicool C922 Pro Stream Webcam
  • uv: 0.12.23
  • Python: 3.14
  • NVIDIA-SMI: 617.14
  • CUDA: 13.2.2
  • PyTorch: 2.14.1+cu132
  • ultralytics: 8.4.173

導入

  1. (任意)NVIDIA GPU を使用する場合は CUDA を導入
    1. 最新の NVIDIA ドライバーをインストール
      1. NVIDIA App で更新可能
        https://www.nvidia.com/ja-jp/software/nvidia-app/
    2. NVIDIA ドライバーの CUDA 対応バージョンを確認
      コマンドプロンプト
      nvidia-smi
      
      出力例
      +-----------------------------------------------------------------------------------------+
      | NVIDIA-SMI 617.14                 KMD Version: 617.14        CUDA UMD Version: 13.4     |
      +-----------------------------------------+------------------------+----------------------+
      | GPU  Name                  Driver-Model | Bus-Id          Disp.A | Volatile Uncorr. ECC |
      | Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
      |                                         |                        |               MIG M. |
      |=========================================+========================+======================|
      |   0  NVIDIA GeForce RTX 5070 Ti   WDDM  |   00000000:01:00.0  On |                  N/A |
      | 32%   40C    P0             35W /  300W |    1298MiB /  16303MiB |      1%      Default |
      |                                         |                        |                  N/A |
      +-----------------------------------------+------------------------+----------------------+
      
      NVIDIA バージョン : 617.14
      CUDA 対応バージョン : <=13.4
      ※ 出力の右上は、ドライバーが対応する CUDA バージョンの 上限
    3. 後段で導入する PyTorch の CUDA 対応バージョンを確認
      https://pytorch.org/get-started/locally/
      2026/10/06 : <=13.2
    4. GPU の CUDA 対応バージョンを確認
      https://developer.nvidia.com/cuda/gpus
      (参考)Wikipedia もわかりやすい
      https://en.wikipedia.org/wiki/CUDA#GPUs_supported
      1. GPU の Compute capability を確認
        NVIDIA GeForce RTX 5070Ti : cc 12.0
      2. Compute capability の CUDA 対応バージョンを確認
        cc 12.0 : CUDA 12.8 - 13.3
        以上より、今回は CUDA 13.2 を導入する
    5. CUDA 13.2.2 をインストール
      https://developer.nvidia.com/cuda-toolkit-archive
  2. Python (>=3.8) を導入
    1. uv をインストール
      https://github.com/astral-sh/uv
      PowerShell(Windows)
      powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
      
    2. uv を更新
      コマンドプロンプト
      uv self update
      
    3. プロジェクトを作成
      名前:yolo26(任意)
      コマンドプロンプト
      uv init yolo26
      
    4. プロジェクトフォルダに移動
      コマンドプロンプト
      cd yolo26
      
    5. Python 3.14 で仮想環境を作成
      コマンドプロンプト
      uv venv -p 3.14
      
  3. PyTorch (>=1.8) を導入
    1. PyTorch 公式サイトでインストールコマンドを確認
      https://pytorch.org/get-started/locally/
    2. uv pip で PyTorch をインストール
      コマンドプロンプト(CUDA 13.2 を使用する場合の例)
      uv pip install torch torchvision --index-url https://download.pytorch.org/whl/cu132
      
      コマンドプロンプト(CPU を使用する場合の例)
      uv pip install torch torchvision
      
  4. ultralytics を導入(YOLO本体)
    1. uv pip で ultralytics をインストール
      コマンドプロンプト
      uv pip install ultralytics
      

コーディング

プロジェクトフォルダに以下の main.py を配置する。

main.py
from ultralytics import YOLO
import cv2

# モデルを準備
model = YOLO("yolo26n-pose.pt")

# カメラを準備
cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)

# メインループ
while True:

	# 1フレーム取得
	ret, frame = cap.read()
	if not ret:
		break

	# 姿勢を推定
	results = model(frame)

	# プレビューを描画
	preview = results[0].plot()

	# プレビューを表示
	cv2.imshow("yolo26", preview)

	# qキーで終了
	if cv2.waitKey(1) & 0xFF == ord("q"):
		break

# 終了処理
cap.release()
cv2.destroyAllWindows()

モデルを準備

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

初回実行時、モデルのファイルが自動でダウンロードされる。
使用可能なモデルは以下のとおり。

カメラを準備

cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)

Webカメラを用いる。
カメラ番号 0 番が何であるかは時と場合による。

たとえば以下のように調べることができる。

コマンドプロンプト
uv pip install pygrabber
scan_camera.py
from pygrabber.dshow_graph import FilterGraph

graph = FilterGraph()

for index, name in enumerate(graph.get_input_devices()):
	print(index, name)
コマンドプロンプト
uv run scan_camera.py
出力例
0 c922 Pro Stream Webcam
1 Live Gamer EXTREME 3

今回はカメラ番号 0 で c922 Pro Stream Webcam が起動することがわかる。

カメラ名でカメラ番号を探索したい場合は以下のように書ける。

from pygrabber.dshow_graph import FilterGraph

def find_camera_index(camera_name: str) -> int:
	graph = FilterGraph()
	cameras = graph.get_input_devices()

	for index, name in enumerate(cameras):
		if camera_name.lower() in name.lower():
			return index

	raise RuntimeError(
		f"カメラ \"{camera_name}\" が見つかりません。\n"
		f"カメラ一覧: {cameras}"
	)
CAMERA_NAME = "C922"
cap = cv2.VideoCapture(find_camera_index(CAMERA_NAME), cv2.CAP_DSHOW)

メインループ / 1フレーム取得

while True:
	ret, frame = cap.read()
	if not ret:
		break

cap.read() で最新の 1 フレームを取得。
ループを回し、連続して処理する。

姿勢を推定

results = model(frame)

1 フレームを姿勢推定器にかける。

numpy.ndarray を渡せるので、そのまま model(frame) と書ける。

結果の詳細は以下のとおり。

たとえば

print(results[0].keypoints.xy)

とすれば、結果の各点の座標を取得できる。

results[0] とは、1枚目の結果である。
今回は 1 フレームを渡しているため、1枚分しかない。

keypoints.xy は [人物][関節][x,y] という構造である。
関節は17点、対応は以下のとおり。

たとえば

left_wrist = results[0].keypoints.xy[0][9]
x = left_wrist[0]
y = left_wrist[1]

とすれば、1人目の左手首の座標を取得できる。

ただし、results[0].keypoints.xy[0][9] は人物が検出されていない場合にエラーとなる。また、どの人を指すか固定できるとは限らない。

プレビューを描画 / 表示

preview = results[0].plot()
cv2.imshow("yolo26", preview)

OpenCV で描画。
ここでの "yolo26" はウィンドウのタイトル。

qキーで終了

if cv2.waitKey(1) & 0xFF == ord("q"):
    break

ウィンドウイベントを処理するため waitKey() で毎ループ OpenCV を呼ぶ。基本的にはキーイベントを少なくとも 1ms 待つ。
waitKey() の戻り値は押下キーの情報を含む。下位 8 ビットが「q」の ASCII コードならば、「q」キーが入力されたと判断できる。
ここでは break、すなわちループを抜ける。

終了処理

cap.release()
cv2.destroyAllWindows()

ループ終了後、カメラ占有を解放し、ウィンドウを閉じる。
解放を忘れると他のプログラムが使用できなくなる。

実行

プロジェクトフォルダで以下のコマンドを実行する。

Webカメラが起動する。
起動には少し時間がかかる。

コマンドプロンプト
uv run main.py

成功すると姿勢推定結果が表示される。

image.png
※ 本イメージ画像はWebカメラの代わりに仮想カメラを入力して撮影した。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?