物体検出結果をもとに物体の移動を追跡するライブラリです。
プラットフォームを選び、YOLOX-S 検出と ByteTrack の組合せで動画中の物体を追跡してみましょう。
ailia Tracker と、検出に使う ailia SDK、サンプルで使う opencv-python をインストールします。
pip3 install ailia ailia_tracker opencv-python
Python や git をまだインストールしていない方は、Python 環境のセットアップ(Windows / Mac / Linux) を先にご覧ください。
PyPI で見るailia-models から example_tracker.py をダウンロードして実行します。YOLOX-S で検出した物体を ByteTrack で追跡し、ID 付きのバウンディングボックスを表示します。モデルは自動ダウンロードされます。デフォルトは Web カメラ入力で、-v video.mp4 で動画ファイルも指定できます。
wget https://raw.githubusercontent.com/ailia-ai/ailia-models/master/object_tracking/bytetrack/example_tracker.py
python3 example_tracker.py
Windows の場合は python3 の代わりに python を使用してください。
ailia Tracker はデスクトップとモバイルで動作します。物体検出部分は Windows / Linux で GPU 推論に対応しています。
Python / C / C# / Flutter / JNI API で利用できる物体追跡機能。
既存の検出器に ByteTrack の追跡処理を組み合わせる最小サンプル。
import ailia_tracker
tracker = ailia_tracker.AiliaTracker() # ByteTrack with default settings
# Per frame: feed detector outputs, compute, read tracked objects
for obj in detections: # ailia.Detector results
tracker.add_target(obj["category"], obj["prob"],
obj["box"]["x"], obj["box"]["y"],
obj["box"]["w"], obj["box"]["h"])
tracker.compute()
for obj in tracker.get_objects():
print(f"ID {obj.id} bbox {obj.x:.2f} {obj.y:.2f} {obj.w:.2f} {obj.h:.2f}")
tracker.release()
ailia Tracker についてのよくある質問。
フレームごとの物体検出を 80 の COCO カテゴリで行うのが YOLOX-S、フレーム間で検出結果を安定した追跡 ID に対応付けるのが ByteTrack です。
YOLOX-S の重みと prototxt。
yolox_s.opt.onnx
yolox_s.opt.onnx.prototxt
両方のファイルをサンプルバイナリと同じフォルダに配置してください。
各 AILIATrackerObject には COCO ラベルに対応する整数の category 属性があります。アプリ側でフィルタしてください — たとえば人物だけ追跡するなら category == 0 のみ残す、必要なラベルだけのルックアップを作るなど。
各追跡オブジェクトに対して、フレーム間で一貫した id、category、検出 prob、および正規化バウンディングボックス (x, y, w, h) が得られます。0 が左 / 上端、1 が右 / 下端です。
検出スコア閾値、トラッキングバッファ長、IoU マッチング閾値などは AILIATrackerSettings 構造体で設定します。各フィールドの意味と推奨値、ByteTrack の挙動については API ドキュメントの ailia Tracker のパラメータ セクションを参照してください。
はい。Python サンプルはデフォルトで Web カメラ入力です (-v <index> でカメラ番号を指定)。C++ サンプルでは -w <index> を渡すとファイルの代わりに Web カメラ入力になります。Unity バインディングも ailia-tracker-unity パッケージで同じカメラ入力モードを提供します。
macOS / iOS では Metal が自動的に使用されます。Windows / Linux では CUDA Toolkit と cuDNN のインストールが必要です。詳しい手順は CUDA Toolkit / cuDNN インストールガイド を参照してください。GPU アクセラレーションは物体検出処理に適用され、ByteTrack の対応付けは CPU 上で動作します。
C++ バインディングは評価版パッケージの ailia.lic をランタイムライブラリと同じ場所に配置する必要があります。
Windows: ailia.dll と同じフォルダ。
macOS: ~/Library/SHALO/
Linux: ~/.shalo/
Unity と JNI バインディングは初回実行時に評価ライセンスを自動ダウンロードします。商用配布には製品ライセンスを申請してください。詳細は ailia ライセンス規約 を参照してください。
ailia Tech Blog のモデル解説・リリースノート・チュートリアルです。