AIパーソナル・ラーニング
と実践的なガイダンス
TRAE

Trackers: ビデオオブジェクト追跡のためのオープンソースツールライブラリ

はじめに

Trackerは、動画中のマルチオブジェクトトラッキングに特化したオープンソースのPythonツールライブラリです。SORTやDeepSORTのような様々な主要トラッキングアルゴリズムを統合しており、ユーザーは柔軟なビデオ解析のために異なるオブジェクト検出モデル(例えばYOLOやRT-DETR)を組み合わせることができます。ユーザーは、交通監視、産業オートメーション、その他のシナリオのために、シンプルなコードでビデオフレームを検出、追跡、注釈を付けることができます。

Trackers: ビデオオブジェクト追跡のためのオープンソースツールライブラリ-1


 

機能一覧

  • SORTやDeepSORTを含む複数のトラッキング・アルゴリズムがサポートされており、今後さらに追加される予定である。
  • YOLO、RT-DETR、RFDETRなどの主要な物体検出モデルに対応。
  • トレースIDとバウンディングボックスの表示をサポートするビデオフレームアノテーションを提供します。
  • モジュール設計により、検出器とトラッカーを自由に組み合わせることができる。
  • ビデオファイルやライブビデオストリームのフレームを処理できます。
  • オープンソースで無料、Apache 2.0ライセンスに基づき、オープンで透明性のあるコード。

 

ヘルプの使用

設置プロセス

Trackerを使用するには、依存関係をPython環境にインストールする必要があります。詳しいインストール手順は以下の通りです:

  1. 環境を整える
    Python 3.6以降がシステムにインストールされていることを確認してください。依存関係の衝突を避けるために仮想環境を推奨します:

    python -m venv venv
    source venv/bin/activate  # Windows 用户使用 venv\Scripts\activate
    
  2. トラッカーズ・ライブラリのインストール
    最新版はGitHubからインストールできる:

    pip install git+https://github.com/roboflow/trackers.git
    

    または、リリースされた安定版をインストールする:

    pip install trackers
    
  3. 依存ライブラリのインストール
    トラッカーの依存関係 supervisionそしてtorch およびその他のライブラリをインストールする。使用する検出モデルによっては、追加のインストールが必要になる場合があります:

    • YOLOモデルの場合:
      pip install ultralytics
      
    • RT-DETRモデルの場合:
      pip install transformers
      
    • 設置の確認 opencv-python ビデオ処理用:
      pip install opencv-python
      
  4. インストールの確認
    以下のコードを実行して、インストールが成功したかどうかを確認する:

    from trackers import SORTTracker
    print(SORTTracker)
    

使用方法

トラッカーの中核機能は、オブジェクト検出とトラッキングアルゴリズムを通してビデオフレームを処理することです。以下は、YOLOモデルと組み合わせてSORTTrackerを使用するための詳細な手順です:

例:YOLOとSORTTrackerによるビデオオブジェクト追跡

  1. ビデオファイルの準備
    入力ビデオファイルがあることを確認する。 input.mp4.プロジェクト・ディレクトリに置く。
  2. コードを書く
    以下は、YOLOモデルをロードし、ビデオ内のオブジェクトをトラッキングし、出力ビデオにトラッキングIDをラベル付けするための完全なサンプルコードです:

    import supervision as sv
    from trackers import SORTTracker
    from ultralytics import YOLO
    # 初始化跟踪器和模型
    tracker = SORTTracker()
    model = YOLO("yolo11m.pt")
    annotator = sv.LabelAnnotator(text_position=sv.Position.CENTER)
    # 定义回调函数处理每帧
    def callback(frame, _):
    result = model(frame)[0]
    detections = sv.Detections.from_ultralytics(result)
    detections = tracker.update(detections)
    return annotator.annotate(frame, detections, labels=detections.tracker_id)
    # 处理视频
    sv.process_video(
    source_path="input.mp4",
    target_path="output.mp4",
    callback=callback
    )
    

    コードの説明::

    • YOLO("yolo11m.pt") 事前にトレーニングされたYOLO11モデルをロードする。
    • SORTTracker() SORT トラッカーを初期化する。
    • sv.Detections.from_ultralytics YOLOの検査結果をSupervisionフォーマットに変換。
    • tracker.update(detections) トレースステータスを更新し、トレース ID を割り当てる。
    • annotator.annotate フレームにバウンディングボックスとIDを描画する。
    • sv.process_video ビデオをフレームごとに処理し、結果を保存する。
  3. 実行コード
    コードを track.pyそして実行する:

    python track.py
    

    ビデオ出力 output.mp4 にはトラッキングIDのアノテーションが含まれる。

注目の機能操作

  • 検出モデルの切り替え
    トラッカーズは様々な検出モデルをサポートしている。例えば、RT-DETRモデルが使用されている:

    import torch
    from transformers import RTDetrV2ForObjectDetection, RTDetrImageProcessor
    tracker = SORTTracker()
    processor = RTDetrImageProcessor.from_pretrained("PekingU/rtdetr_v2_r18vd")
    model = RTDetrV2ForObjectDetection.from_pretrained("PekingU/rtdetr_v2_r18vd")
    annotator = sv.LabelAnnotator()
    def callback(frame, _):
    inputs = processor(images=frame, return_tensors="pt")
    with torch.no_grad():
    outputs = model(**inputs)
    h, w, _ = frame.shape
    results = processor.post_process_object_detection(
    outputs, target_sizes=torch.tensor([(h, w)]), threshold=0.5
    )[0]
    detections = sv.Detections.from_transformers(results, id2label=model.config.id2label)
    detections = tracker.update(detections)
    return annotator.annotate(frame, detections, labels=detections.tracker_id)
    sv.process_video(source_path="input.mp4", target_path="output.mp4", callback=callback)
    
  • カスタムラベル
    注釈のスタイルは、ラベルの位置を変えたり、バウンディングボックスを追加するなどして調整することができます:

    annotator = sv.LabelAnnotator(text_position=sv.Position.TOP_LEFT)
    box_annotator = sv.BoundingBoxAnnotator()
    def callback(frame, _):
    result = model(frame)[0]
    detections = sv.Detections.from_ultralytics(result)
    detections = tracker.update(detections)
    frame = box_annotator.annotate(frame, detections)
    return annotator.annotate(frame, detections, labels=detections.tracker_id)
    
  • ライブ・ビデオ・ストリームの処理
    カメラの入力を処理する必要がある場合は、コードを変更することができます:

    import cv2
    cap = cv2.VideoCapture(0)  # 打开默认摄像头
    while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
    break
    annotated_frame = callback(frame, None)
    cv2.imshow("Tracking", annotated_frame)
    if cv2.waitKey(1) & 0xFF == ord("q"):
    break
    cap.release()
    cv2.destroyAllWindows()
    

ほら

  • パフォーマンス最適化長い動画を処理するとメモリ使用量が多くなる場合があります。環境変数を設定することで、バッファサイズを制限することができます:
    export VIDEO_SOURCE_BUFFER_SIZE=2
    
  • モデルの選択検出モデルがトラッカーと互換性があることを保証するために、YOLOとRT-DETRが推奨されるオプションです。
  • テスト中にコンポーネントを調整するトラッキングIDが頻繁に切り替わる場合は、検出モデルの信頼しきい値やトラッカーのパラメーターを調整してみてください。 track_buffer.

 

アプリケーションシナリオ

  1. トラフィックモニタリング
    トラッカーは、道路上の車両や歩行者の軌跡を分析するために使用することができます。例えば、都市部の交通カメラにおける車両のYOLO検出と組み合わせて、SORTTrackerは各車両の軌跡を追跡し、交通統計や違反記録を生成します。
  2. 産業オートメーション
    生産ラインでは、Trackerはベルトコンベア上の製品などの移動体を追跡します。製品の種類を識別する検査モデルと組み合わせることで、Trackerは品質管理や在庫管理のために各製品の移動経路を記録します。
  3. 運動解析
    スポーツビデオでは、トラッカーズは選手やボールの動きを追跡します。例えば、サッカーの試合で選手の走路を分析し、ヒートマップや統計を生成します。
  4. セーフティ・モニタリング
    セキュリティ・システムでは、トラッカーは不審なターゲットの動きを追跡することができる。例えば、ショッピングモールのカメラでは、特定の人物を検知して追跡し、その後の分析のためにその経路を記録する。

 

品質保証

  1. Trackerはどのようなトラッキング・アルゴリズムに対応していますか?
    現在、SORTとDeepSORTがサポートされており、将来のリリースではByteTrackなどのアルゴリズムが追加される予定である。
  2. トラッキングの安定性を向上させるには?
    信頼しきい値(例えば、0.5)を調整するか、あるいはトラッカーの track_buffer パラメータを使用することで、IDの切り替えを減らすことができる。
  3. リアルタイムのビデオ処理に対応していますか?
    はい、Trackerはカメラ入力のようなライブビデオストリームをサポートしています。フレームをキャプチャし、OpenCVを使用してフレームごとに処理する必要があります。
  4. メモリのオーバーフロー問題にどう対処するか?
    環境変数の設定 VIDEO_SOURCE_BUFFER_SIZE=2 フレームバッファを制限するか、YOLO11nのような軽量モデルを使用する。
無断転載を禁じます:チーフAIシェアリングサークル " Trackers: ビデオオブジェクト追跡のためのオープンソースツールライブラリ
ja日本語