12
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SAM 3 でバスケ動画のボールを追跡してシュートの物理挙動を可視化してみた

12
Last updated at Posted at 2025-12-03

はじめに

こんにちは、この記事は Link-U Technologies Advent Calendar 2025 の3日目の記事です!

Meta AIが開発したセグメンテーションモデル「Segment Anything Model (SAM)」の最新版である SAM 3 が公開されました。
今回は、このSAM 3を使って動画内のオブジェクト(バスケットボール)を自動で追跡し、その軌道を分析する方法を紹介します。

SAM 3とは

SAM 3 (Segment Anything Model 3) は、画像や動画内のあらゆる物体をセグメンテーション(領域分割)できるAIモデルです。
前バージョンのSAM 2と同様に動画にも対応しており、さらにSAM 3ではテキストプロンプトによる指示の精度や、複雑なシーンでの追跡能力が向上しています。

image.png

SAM 3の特徴

  • 高精度な動画トラッキング: 最初のフレームで対象を指定するだけで、動画全体を通して物体を追跡できます。
  • 多様なプロンプト: クリック(点)やボックスだけでなく、自然言語(テキスト)での指示が可能です(例: "basketball", "person", "a brown golden retriever")
  • オープンソース: コードとモデルが公開されており、誰でも試すことができます。

dog.gif

自分の環境

  • OS: Windows 11
  • GPU: NVIDIA GeForce RTX 4070
  • Python: 3.13
  • CUDA: 12.4

※ Windows環境では一部のライブラリ(tritonなど)が非対応のため、いくつかの修正が必要でした。
※ 試すときはLinuxが推奨です

環境構築

1. リポジトリのクローン

まず、SAM 3の公式リポジトリをクローンします。

git clone https://github.com/facebookresearch/sam3.git
cd sam3

2. ライブラリのインストール

必要なライブラリをインストールします。Windows環境の場合、triton がインストールできないため、依存関係の修正やCPUフォールバックの実装が必要になる場合があります。

pip install -e .
pip install opencv-python matplotlib pandas scikit-image scikit-learn omegaconf hydra-core

また、GPUを使用するためにPyTorchをCUDA対応版に入れ替えます。

pip uninstall torch torchvision torchaudio
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124

3. モデルのダウンロード認証

SAM 3のモデルを利用するには、Hugging Faceでの認証が必要です。

  1. Hugging Faceで facebook/sam3 の利用規約に同意、承認(すぐに承認されました)が必要
  2. アクセストークンを取得し、以下のコマンドでログインする。
huggingface-cli login

動作確認

「Person」で指定して確認したところ、しっかりトラッキングされている
※トラッキングのみなら公式サイトで試すことができます。かなりの精度で面白かったです

bedroom.gif

result.gif

バスケットボールの動画をトラッキングして軌跡を描画する

今回は、下記のバスケットボールのシュートシーンの動画 (basket.mp4) を用意し、ボールをトラッキングさせてみます。
※ そういえば、動画載せれなかったのでGifになります

basket3.gif

追跡用スクリプトの作成

SAM 3のAPIを使用して、以下の処理を行うPythonスクリプトを作成しました。

  1. 動画を読み込む
  2. 最初のフレームで "basketball" というテキストプロンプトを与えてボールを検出
  3. 全フレームにわたって追跡 (Propagate)
  4. トラッキングしているオブジェクトデータから軌跡を描画する
  5. 結果を動画とCSVファイルに出力

実行コマンド

python track_basketball.py sam3/assets/videos/basket.mp4 --output basket_result.mp4 --csv basket_center.csv --prompt "basketball"

実行結果

生成された動画では、ボールが正確にマスクされ、その軌跡が線で描画されました。

basket_result3.gif

トラッキングしたオブジェクトデータの活用方法

追跡結果として出力したCSVファイル (basket_center.csv) には、各フレームにおけるボールの中心座標 $(x, y)$ が記録されています。

frame_index,object_id,center_x,center_y
0,1,540,300
1,1,542,298
...

このデータを使えば、以下のような分析が可能です。

  • 軌道の可視化: シュートの放物線をグラフ化
  • 速度・加速度の算出: フレーム間の移動距離とフレームレートから算出
  • シュート成功率の判定: ゴールの座標と照らし合わせて判定

まとめ

SAM 3を使うことで、動画内の特定のオブジェクトを非常に簡単に、かつ高精度に追跡できることが分かりました。
特に、テキストで「何を追跡したいか」を指示できる点は非常に便利です。

スポーツのフォーム分析や、競技の戦術分析など、様々な分野への応用が期待できそうです

12
1
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
12
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?