見出し画像

YOLOv8を使ってサッカー選手をトラッキング【超簡単!】

YOLOv8を使ってサッカー選手をトラッキング

相談があり動画のトラッキングをしたいとのこと。

これは私には無理、無理。

でも自分は『いつも偏見にとらわれている

やってみたら、時間がかかったけどできた!

猛反省の日曜日。


さて本題は下記のようなことをやりたい

https://www.reddit.com/r/dataisbeautiful/comments/119szzy/oc_football_players_tracking_with_yolov5/

YOLOv5とByteTrackを組み合わせて、OpenCVを使ってサッカー選手をトラッキング

この記事が古かったようだ。おそらく記事が古くて私の環境では依存関係が整理できずにうまくいかず。Google Colbに切り替えてみたりもした。3時間くらい何度もチャレンジしたがうまくいかずYOLOv8で実施したらすぐにできた。
まあその過程もすごく勉強になった。

さて行ってみましょう!

概念的なフロー

  1. 物体検出

    • ビデオフレームごとに物体検出

    • 各フレームで検出された物体の位置とクラスを取得

  2. 物体追跡

    • 追跡アルゴリズムを使用して、連続するフレーム間で物体の位置を追跡

    • 物体のIDを割り当てて、一貫性を持たせる

  3. 結果の保存および表示

    • 追跡結果をフレームに描画する

    • アノテーション付きビデオを保存


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の主要なプロジェクト

  1. YOLOv5:

    • YOLOv5は、物体検出モデルの中でも特に人気があり、幅広く利用されています。簡単に使えるAPI、豊富なドキュメント、および様々な用途に対応した高いパフォーマンスが特徴です。

    • YOLOv5はPyTorchをベースにしており、カスタムデータセットでのトレーニングや推論が容易に行えます。

  2. YOLOv8:

    • YOLOv8は、さらに進化したバージョンで、性能や精度が向上しています。YOLOv8もPyTorchをベースにしており、最新の技術とベストプラクティスを取り入れています。


まとめ

素人でもトラッキングできた。この革命はやばいね

サッカー動画のトラッキングはYOLOv8でできることがわかりました。

おそるべしPython、恐るべしライブラリたち
最恐はopenAIだけど、、、

onetech.jp



この記事が気に入ったらサポートをしてみませんか?