YOLOv8を使ってサッカー選手をトラッキング【超簡単!】
YOLOv8を使ってサッカー選手をトラッキング
相談があり動画のトラッキングをしたいとのこと。
これは私には無理、無理。
でも自分は『いつも偏見にとらわれている』
やってみたら、時間がかかったけどできた!
猛反省の日曜日。
さて本題は下記のようなことをやりたい
https://www.reddit.com/r/dataisbeautiful/comments/119szzy/oc_football_players_tracking_with_yolov5/
YOLOv5とByteTrackを組み合わせて、OpenCVを使ってサッカー選手をトラッキング
この記事が古かったようだ。おそらく記事が古くて私の環境では依存関係が整理できずにうまくいかず。Google Colbに切り替えてみたりもした。3時間くらい何度もチャレンジしたがうまくいかずYOLOv8で実施したらすぐにできた。
まあその過程もすごく勉強になった。
さて行ってみましょう!
概念的なフロー
物体検出
ビデオフレームごとに物体検出
各フレームで検出された物体の位置とクラスを取得
物体追跡
追跡アルゴリズムを使用して、連続するフレーム間で物体の位置を追跡
物体のIDを割り当てて、一貫性を持たせる
結果の保存および表示
追跡結果をフレームに描画する
アノテーション付きビデオを保存
YOLO (You Only Look Once) v8
高速物体検出: 一度に画像全体を処理して物体を検出。
リアルタイム: 高速で効率的な物体検出が可能。
汎用性: 多種多様な物体を検出できる。
ByteTrack(これは不要)
物体トラッキング: 検出された物体の位置とIDをフレーム間で追跡。
高精度: 物体の連続的な動きを高精度に追跡。
リアルタイム対応: 高速な処理でリアルタイムのトラッキングが可能。
OpenCV (Open Source Computer Vision Library)
画像処理ライブラリ: 幅広い画像処理機能を提供。
クロスプラットフォーム: さまざまなプラットフォームで動作。
リアルタイム: 高速な画像処理が可能。
PyTorch
機械学習ライブラリ: ディープラーニングモデルの構築と訓練が可能。
動的計算グラフ: 柔軟なモデル設計が容易。
GPUサポート: 高速な計算が可能。
さあ行ってみましょう!
用意した動画
https://www.pexels.com/ja-jp/video/6079618/
VSCODEで実装
soccer_ai_projectというフォルダに
val_soccer.mp4を置く
仮想環境を作る
cd /Users/kawamotonaoki/soccer_ai_project
Python 3.11をインストール
python3 -m venv venv
source venv/bin/activate
必要なライブラリのインストール
pip install ultralytics opencv-python
football_tracking.pyを作る
football_tracking.pyを作る
import cv2
from ultralytics import YOLO
# 学習済みのモデルをロード
model = YOLO('yolov8n.pt')
# 動画ファイルのパスを指定
video_path = "/Users/kawamotonaoki/soccer_ai_project/val_soccer.mp4"
cap = cv2.VideoCapture(video_path)
# 出力ファイルの設定
output_path = "/Users/kawamotonaoki/soccer_ai_project/val_soccer_tracked.mp4"
fourcc = cv2.VideoWriter_fourcc(*'mp4v') # 出力ファイル形式
fps = cap.get(cv2.CAP_PROP_FPS)
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
out = cv2.VideoWriter(output_path, fourcc, fps, (width, height))
# キーが押されるまでループ
while cap.isOpened():
# 1フレーム読み込む
success, frame = cap.read()
if success:
# YOLOv8でトラッキング
results = model.track(frame, persist=True)
# 結果を画像に変換
annotated_frame = results[0].plot()
# フレームを出力ファイルに書き込む
out.write(annotated_frame)
# OpenCVで表示&キー入力チェック
cv2.imshow("YOLOv8 Tracking", annotated_frame)
key = cv2.waitKey(1)
if key != -1:
print("STOP PLAY")
break
else:
break
# リソースの解放
cap.release()
out.release()
cv2.destroyAllWindows()
Ultralyticsは、YOLO (You Only Look Once) モデルの開発と普及において重要な役割を果たしている企業だそうです。特にYOLOv5とYOLOv8の開発で知られています。これらのモデルは、高速かつ高精度な物体検出を実現するために設計されています。
Ultralyticsの主要なプロジェクト
YOLOv5:
YOLOv5は、物体検出モデルの中でも特に人気があり、幅広く利用されています。簡単に使えるAPI、豊富なドキュメント、および様々な用途に対応した高いパフォーマンスが特徴です。
YOLOv5はPyTorchをベースにしており、カスタムデータセットでのトレーニングや推論が容易に行えます。
YOLOv8:
YOLOv8は、さらに進化したバージョンで、性能や精度が向上しています。YOLOv8もPyTorchをベースにしており、最新の技術とベストプラクティスを取り入れています。
まとめ
素人でもトラッキングできた。この革命はやばいね
サッカー動画のトラッキングはYOLOv8でできることがわかりました。
おそるべしPython、恐るべしライブラリたち
最恐はopenAIだけど、、、
onetech.jp