はじめに
こんにちは、この記事は 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ではテキストプロンプトによる指示の精度や、複雑なシーンでの追跡能力が向上しています。
SAM 3の特徴
- 高精度な動画トラッキング: 最初のフレームで対象を指定するだけで、動画全体を通して物体を追跡できます。
- 多様なプロンプト: クリック(点)やボックスだけでなく、自然言語(テキスト)での指示が可能です(例: "basketball", "person", "a brown golden retriever")
- オープンソース: コードとモデルが公開されており、誰でも試すことができます。
自分の環境
- 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での認証が必要です。
- Hugging Faceで facebook/sam3 の利用規約に同意、承認(すぐに承認されました)が必要
- アクセストークンを取得し、以下のコマンドでログインする。
huggingface-cli login
動作確認
「Person」で指定して確認したところ、しっかりトラッキングされている
※トラッキングのみなら公式サイトで試すことができます。かなりの精度で面白かったです
バスケットボールの動画をトラッキングして軌跡を描画する
今回は、下記のバスケットボールのシュートシーンの動画 (basket.mp4) を用意し、ボールをトラッキングさせてみます。
※ そういえば、動画載せれなかったのでGifになります
追跡用スクリプトの作成
SAM 3のAPIを使用して、以下の処理を行うPythonスクリプトを作成しました。
- 動画を読み込む
- 最初のフレームで "basketball" というテキストプロンプトを与えてボールを検出
- 全フレームにわたって追跡 (Propagate)
- トラッキングしているオブジェクトデータから軌跡を描画する
- 結果を動画とCSVファイルに出力
実行コマンド
python track_basketball.py sam3/assets/videos/basket.mp4 --output basket_result.mp4 --csv basket_center.csv --prompt "basketball"
実行結果
生成された動画では、ボールが正確にマスクされ、その軌跡が線で描画されました。
トラッキングしたオブジェクトデータの活用方法
追跡結果として出力したCSVファイル (basket_center.csv) には、各フレームにおけるボールの中心座標 $(x, y)$ が記録されています。
frame_index,object_id,center_x,center_y
0,1,540,300
1,1,542,298
...
このデータを使えば、以下のような分析が可能です。
- 軌道の可視化: シュートの放物線をグラフ化
- 速度・加速度の算出: フレーム間の移動距離とフレームレートから算出
- シュート成功率の判定: ゴールの座標と照らし合わせて判定
まとめ
SAM 3を使うことで、動画内の特定のオブジェクトを非常に簡単に、かつ高精度に追跡できることが分かりました。
特に、テキストで「何を追跡したいか」を指示できる点は非常に便利です。
スポーツのフォーム分析や、競技の戦術分析など、様々な分野への応用が期待できそうです





