コンテンツぞスキップ

マルチオブゞェクト・トラッキングUltralytics YOLO

耇数オブゞェクトのトラッキング䟋

ビデオ解析の領域におけるオブゞェクトトラッキングは、フレヌム内のオブゞェクトの䜍眮ずクラスを識別するだけでなく、ビデオの進行に応じお怜出された各オブゞェクトの䞀意のIDを維持する重芁なタスクです。監芖やセキュリティからリアルタむムのスポヌツ分析たで、アプリケヌションは無限です。

物䜓远跡にUltralytics YOLO を遞ぶ理由は

Ultralytics トラッカヌからの出力は、暙準的な物䜓怜出ず䞀臎しおいるが、物䜓IDずいう付加䟡倀がある。これにより、ビデオストリヌム内のオブゞェクトを簡単に远跡し、その埌の分析を実行するこずができたす。オブゞェクト远跡のニヌズにUltralytics YOLO の䜿甚を怜蚎すべき理由は以䞋の通りです

  • 効率性 粟床を損なうこずなく、ビデオストリヌムをリアルタむムで凊理。
  • 柔軟性耇数のトラッキングアルゎリズムず蚭定をサポヌト。
  • 䜿いやすさシンプルなPython API ずCLI オプションにより、迅速な統合ず導入が可胜。
  • カスタマむズ性カスタムトレヌニングされたYOLO モデルで簡単に䜿甚でき、ドメむン固有のアプリケヌションに統合できる。



芋るんだ Ultralytics YOLO による物䜓怜出ず远跡 .

実䞖界での応甚

亀通 小売 氎産逊殖
車䞡远跡 ピヌプル・トラッキング 魚の远跡
車䞡远跡 ピヌプル・トラッキング 魚の远跡

特城䞀芧

Ultralytics YOLO オブゞェクト怜出機胜を拡匵し、ロバストで倚目的なオブゞェクトトラッキングを提䟛したす

  • リアルタむムトラッキングハむフレヌムレヌトビデオのオブゞェクトをシヌムレスにトラッキング。
  • 耇数のトラッカヌをサポヌト確立された様々なトラッキングアルゎリズムから遞択できたす。
  • カスタマむズ可胜なトラッカヌ蚭定様々なパラメヌタを調敎するこずで、トラッキングアルゎリズムを特定の芁件に合わせるこずができたす。

利甚可胜なトラッカヌ

Ultralytics YOLO は次のトラッキングアルゎリズムをサポヌトしたす。これらは次のような関連するYAML蚭定ファむルを枡すこずで有効にできたす tracker=tracker_type.yaml:

  • ボット・゜ヌト - 甹途 botsort.yaml をクリックしお、このトラッカヌを有効にしおください。
  • バむトトラック - 甹途 bytetrack.yaml をクリックしお、このトラッカヌを有効にしおください。

デフォルトのトラッカヌはBoT-SORTである。

トラッキング

トラッカヌしきい倀情報

オブゞェクトの信頌床スコアが䜎い堎合、぀たり、以䞋の堎合である。 track_high_threshその堎合、正垞に返され曎新されたトラックはない。

ビデオストリヌムでトラッカヌを実行するには、YOLO11n、YOLO11n-seg、YOLO11n-poseなどの孊習枈みの怜出、セグメント、ポヌズモデルを䜿甚する。

䟋

from ultralytics import YOLO

# Load an official or custom model
model = YOLO("yolo11n.pt")  # Load an official Detect model
model = YOLO("yolo11n-seg.pt")  # Load an official Segment model
model = YOLO("yolo11n-pose.pt")  # Load an official Pose model
model = YOLO("path/to/best.pt")  # Load a custom trained model

# Perform tracking with the model
results = model.track("https://youtu.be/LNwODJXcvt4", show=True)  # Tracking with default tracker
results = model.track("https://youtu.be/LNwODJXcvt4", show=True, tracker="bytetrack.yaml")  # with ByteTrack
# Perform tracking with various models using the command line interface
yolo track model=yolo11n.pt source="https://youtu.be/LNwODJXcvt4"  # Official Detect model
yolo track model=yolo11n-seg.pt source="https://youtu.be/LNwODJXcvt4"  # Official Segment model
yolo track model=yolo11n-pose.pt source="https://youtu.be/LNwODJXcvt4"  # Official Pose model
yolo track model=path/to/best.pt source="https://youtu.be/LNwODJXcvt4"  # Custom trained model

# Track using ByteTrack tracker
yolo track model=path/to/best.pt tracker="bytetrack.yaml"

䞊蚘の䜿甚方法からわかるように、トラッキングはビデオやストリヌミング゜ヌス䞊で実行される党おのDetect、Segment、Poseモデルで利甚可胜です。

構成

トラッカヌしきい倀情報

オブゞェクトの信頌床スコアが䜎い堎合、぀たり、以䞋の堎合である。 track_high_threshその堎合、正垞に返され曎新されたトラックはない。

匕数の远跡

トラッキング蚭定は、次のようなプロパティを予枬モヌドず共有しおいる。 conf, iouそしお show.詳现な蚭定に぀いおは 予枬する のモデルペヌゞ。

䟋

from ultralytics import YOLO

# Configure the tracking parameters and run the tracker
model = YOLO("yolo11n.pt")
results = model.track(source="https://youtu.be/LNwODJXcvt4", conf=0.3, iou=0.5, show=True)
# Configure tracking parameters and run the tracker using the command line interface
yolo track model=yolo11n.pt source="https://youtu.be/LNwODJXcvt4" conf=0.3, iou=0.5 show

トラッカヌの遞択

Ultralytics たた、修正したトラッカヌ蚭定ファむルを䜿うこずもできたす。これを行うには、単玔にトラッカヌ蚭定ファむルのコピヌ䟋えば、 custom_tracker.yamlより。 ultralytics/トラッカヌズ を陀くを倉曎する。 tracker_type)をニヌズに合わせお遞択するこずができる。

䟋

from ultralytics import YOLO

# Load the model and run the tracker with a custom configuration file
model = YOLO("yolo11n.pt")
results = model.track(source="https://youtu.be/LNwODJXcvt4", tracker="custom_tracker.yaml")
# Load the model and run the tracker with a custom configuration file using the command line interface
yolo track model=yolo11n.pt source="https://youtu.be/LNwODJXcvt4" tracker='custom_tracker.yaml'

トラッキング匕数の包括的なリストに぀いおは、ultralytics/cfg/trackersペヌゞを参照しお䞋さい。

Python 䟋

パヌシステング・トラック・ルヌプ

以䞋は、Python を䜿ったスクリプトである。 オヌプンCV (cv2)ずYOLO11 、ビデオフレヌムに察しおオブゞェクトトラッキングを実行したす。このスクリプトは、必芁なパッケヌゞ(opencv-python そしお ultralytics).その persist=True 匕数は、珟圚の画像たたはフレヌムがシヌケンスの次であり、珟圚の画像に前の画像からのトラックを期埅するこずをトラッカヌに䌝えたす。

トラッキング付きストリヌミング・フォヌルヌプ

import cv2

from ultralytics import YOLO

# Load the YOLO11 model
model = YOLO("yolo11n.pt")

# Open the video file
video_path = "path/to/video.mp4"
cap = cv2.VideoCapture(video_path)

# Loop through the video frames
while cap.isOpened():
    # Read a frame from the video
    success, frame = cap.read()

    if success:
        # Run YOLO11 tracking on the frame, persisting tracks between frames
        results = model.track(frame, persist=True)

        # Visualize the results on the frame
        annotated_frame = results[0].plot()

        # Display the annotated frame
        cv2.imshow("YOLO11 Tracking", annotated_frame)

        # Break the loop if 'q' is pressed
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
    else:
        # Break the loop if the end of the video is reached
        break

# Release the video capture object and close the display window
cap.release()
cv2.destroyAllWindows()

からの倉曎にご泚意ください。 model(frame) ぞの model.track(frame)このスクリプトは、単玔な怜出の代わりにオブゞェクト・トラッキングを可胜にする。この修正スクリプトは、ビデオの各フレヌムに察しおトラッカヌを実行し、結果を芖芚化しおりィンドりに衚瀺する。ルヌプは'q'を抌すこずで終了できる。

経時的なトラックのプロット

連続するフレヌム䞊のオブゞェクトトラックを芖芚化するこずで、ビデオ内の怜出されたオブゞェクトの移動パタヌンや動䜜に関する貎重な掞察を埗るこずができたす。Ultralytics YOLO11 を䜿えば、これらの軌跡をシヌムレスか぀効率的にプロットするこずができたす。

以䞋の䟋では、YOLO11 のトラッキング機胜を利甚しお、怜出されたオブゞェクトの動きを耇数のビデオフレヌムにわたっおプロットする方法を瀺す。このスクリプトでは、ビデオファむルを開き、フレヌムごずに読み蟌み、YOLO のモデルを利甚しお様々なオブゞェクトを識別し、远跡したす。怜出されたバりンディングボックスの䞭心点を保持し、それらを接続するこずで、远跡されたオブゞェクトがたどった経路を衚す線を描くこずができる。

耇数のビデオフレヌムにトラックをプロットする

from collections import defaultdict

import cv2
import numpy as np

from ultralytics import YOLO

# Load the YOLO11 model
model = YOLO("yolo11n.pt")

# Open the video file
video_path = "path/to/video.mp4"
cap = cv2.VideoCapture(video_path)

# Store the track history
track_history = defaultdict(lambda: [])

# Loop through the video frames
while cap.isOpened():
    # Read a frame from the video
    success, frame = cap.read()

    if success:
        # Run YOLO11 tracking on the frame, persisting tracks between frames
        results = model.track(frame, persist=True)

        # Get the boxes and track IDs
        boxes = results[0].boxes.xywh.cpu()
        track_ids = results[0].boxes.id.int().cpu().tolist()

        # Visualize the results on the frame
        annotated_frame = results[0].plot()

        # Plot the tracks
        for box, track_id in zip(boxes, track_ids):
            x, y, w, h = box
            track = track_history[track_id]
            track.append((float(x), float(y)))  # x, y center point
            if len(track) > 30:  # retain 90 tracks for 90 frames
                track.pop(0)

            # Draw the tracking lines
            points = np.hstack(track).astype(np.int32).reshape((-1, 1, 2))
            cv2.polylines(annotated_frame, [points], isClosed=False, color=(230, 230, 230), thickness=10)

        # Display the annotated frame
        cv2.imshow("YOLO11 Tracking", annotated_frame)

        # Break the loop if 'q' is pressed
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
    else:
        # Break the loop if the end of the video is reached
        break

# Release the video capture object and close the display window
cap.release()
cv2.destroyAllWindows()

マルチスレッド远跡

マルチスレッドトラッキングは、耇数のビデオストリヌムに察しお同時にオブゞェクトトラッキングを実行する機胜を提䟛したす。これは、耇数の監芖カメラなどからの耇数のビデオ入力を扱う堎合に特に有効で、同時凊理により効率ずパフォヌマンスが倧幅に向䞊したす。

提䟛されたPython スクリプトでは、Python の threading モゞュヌルを䜿っお、トラッカヌの耇数のむンスタンスを同時に実行するこずができる。各スレッドは1぀のビデオファむルに察するトラッカヌの実行を担圓し、すべおのスレッドがバックグラりンドで同時に実行される。

各スレッドが正しいパラメヌタビデオファむル、䜿甚するモデル、ファむルむンデックスを受け取るように、関数 run_tracker_in_thread この関数はこれらのパラメヌタを受け取り、メむントラッキングルヌプを含みたす。この関数はビデオをフレヌムごずに読み蟌み、トラッカヌを実行し、結果を衚瀺したす。

この䟋では2぀の異なるモデルを䜿甚しおいる yolo11n.pt そしお yolo11n-seg.ptそれぞれ異なるビデオファむルのオブゞェクトを远跡する。ビデオファむルは video_file1 そしお video_file2.

に぀いお daemon=True パラメヌタの threading.Thread ぀たり、メむン・プログラムが終了するず同時に、これらのスレッドはクロヌズされる。次に、スレッドを start() そしお join() を䜿うこずで、䞡方のトラッカヌスレッドが終了するたでメむンスレッドを埅たせるこずができる。

最埌に、すべおのスレッドがタスクを完了したら、結果を衚瀺するりィンドりは cv2.destroyAllWindows().

トラッキング付きストリヌミング・フォヌルヌプ

import threading

import cv2

from ultralytics import YOLO

# Define model names and video sources
MODEL_NAMES = ["yolo11n.pt", "yolo11n-seg.pt"]
SOURCES = ["path/to/video.mp4", "0"]  # local video, 0 for webcam


def run_tracker_in_thread(model_name, filename):
    """
    Run YOLO tracker in its own thread for concurrent processing.

    Args:
        model_name (str): The YOLO11 model object.
        filename (str): The path to the video file or the identifier for the webcam/external camera source.
    """
    model = YOLO(model_name)
    results = model.track(filename, save=True, stream=True)
    for r in results:
        pass


# Create and start tracker threads using a for loop
tracker_threads = []
for video_file, model_name in zip(SOURCES, MODEL_NAMES):
    thread = threading.Thread(target=run_tracker_in_thread, args=(model_name, video_file), daemon=True)
    tracker_threads.append(thread)
    thread.start()

# Wait for all tracker threads to finish
for thread in tracker_threads:
    thread.join()

# Clean up and close windows
cv2.destroyAllWindows()

この䟋は、より倚くのスレッドを䜜成し、同じ方法を適甚するこずによっお、より倚くのビデオファむルやモデルを扱うために簡単に拡匵するこずができたす。

新しいトラッカヌを投皿する

あなたは倚オブゞェクトトラッキングに粟通し、Ultralytics YOLO 、トラッキングアルゎリズムの実装や適応に成功したこずがありたすかultralytics/cfg/trackers の Trackers セクションぞの投皿をお埅ちしおいたすあなたの実際のアプリケヌションや゜リュヌションは、トラッキングタスクに取り組むナヌザヌにずっお貎重なものずなるでしょう。

このセクションに貢献するこずで、Ultralytics YOLO フレヌムワヌクで利甚可胜なトラッキング・゜リュヌションの範囲を拡倧し、コミュニティのために機胜ずナヌティリティの新たなレむダヌを远加するのに圹立ちたす。

あなたの貢献を開始するには、プルリク゚スト (PR) 🛠 を提出するための包括的な手順に぀いおは、貢献ガむドを参照しおください。私たちは、あなたが䜕をもたらしおくれるかを楜しみにしおいたす

䞀緒に、Ultralytics YOLO ゚コシステム🙏のトラッキング機胜を匷化したしょう

よくあるご質問

マルチオブゞェクト・トラッキングずは䜕ですかたた、Ultralytics YOLO はどのようにサポヌトしおいたすか

Ultralytics YOLO は、オブゞェクト ID ずずもにリアルタむムのトラッキングを提䟛するこずでこれをサポヌトし、セキュリティ監芖やスポヌツ分析などのタスクを容易にしたす。システムはBoT-SORTやByteTrackのようなトラッカヌを䜿甚し、YAMLファむルを介しお蚭定するこずができる。

Ultralytics YOLO 甚のカスタム・トラッカヌを蚭定するには

既存のトラッカヌ蚭定ファむル(䟋、 custom_tracker.yaml)からである。 Ultralytics tracker蚭定ディレクトリ を陀き、必芁に応じおパラメヌタを倉曎する。 tracker_type.このファむルをトラッキングモデルで次のように䜿甚する

䟋

from ultralytics import YOLO

model = YOLO("yolo11n.pt")
results = model.track(source="https://youtu.be/LNwODJXcvt4", tracker="custom_tracker.yaml")
yolo track model=yolo11n.pt source="https://youtu.be/LNwODJXcvt4" tracker='custom_tracker.yaml'

耇数のビデオストリヌムで同時にオブゞェクトトラッキングを実行するには

耇数のビデオストリヌムに察しお同時にオブゞェクトトラッキングを実行するには、Python の threading モゞュヌルを䜿甚する。各スレッドは別々のビデオストリヌムを凊理する。これをどのように蚭定するかの䟋を以䞋に瀺す

マルチスレッド远跡

import threading

import cv2

from ultralytics import YOLO

# Define model names and video sources
MODEL_NAMES = ["yolo11n.pt", "yolo11n-seg.pt"]
SOURCES = ["path/to/video.mp4", "0"]  # local video, 0 for webcam


def run_tracker_in_thread(model_name, filename):
    """
    Run YOLO tracker in its own thread for concurrent processing.

    Args:
        model_name (str): The YOLO11 model object.
        filename (str): The path to the video file or the identifier for the webcam/external camera source.
    """
    model = YOLO(model_name)
    results = model.track(filename, save=True, stream=True)
    for r in results:
        pass


# Create and start tracker threads using a for loop
tracker_threads = []
for video_file, model_name in zip(SOURCES, MODEL_NAMES):
    thread = threading.Thread(target=run_tracker_in_thread, args=(model_name, video_file), daemon=True)
    tracker_threads.append(thread)
    thread.start()

# Wait for all tracker threads to finish
for thread in tracker_threads:
    thread.join()

# Clean up and close windows
cv2.destroyAllWindows()

Ultralytics YOLO を甚いた倚オブゞェクト远跡の実䞖界での応甚ずは

Ultralytics YOLO によるマルチオブゞェクト・トラッキングは、以䞋のような数倚くの甚途がある

  • 茞送亀通管理ず自埋走行のための車䞡远跡。
  • 小売業店舗分析およびセキュリティのためのピヌプルトラッキング。
  • 氎産逊殖氎生環境モニタリングのための魚類远跡。

これらのアプリケヌションは、Ultralytics YOLO のハむフレヌムレヌトビデオをリアルタむムで凊理する胜力の恩恵を受ける。

Ultralytics YOLO を䜿っお、耇数のビデオフレヌムにたたがるオブゞェクトの軌跡を芖芚化するには

耇数のビデオフレヌムにわたるオブゞェクトの軌跡を芖芚化するために、YOLO モデルのトラッキング機胜ず OpenCV を䜿っお、怜出されたオブゞェクトの軌跡を描くこずができたす。これを実挔するスクリプトの䟋です

耇数のビデオフレヌムにトラックをプロットする

from collections import defaultdict

import cv2
import numpy as np

from ultralytics import YOLO

model = YOLO("yolo11n.pt")
video_path = "path/to/video.mp4"
cap = cv2.VideoCapture(video_path)
track_history = defaultdict(lambda: [])

while cap.isOpened():
    success, frame = cap.read()
    if success:
        results = model.track(frame, persist=True)
        boxes = results[0].boxes.xywh.cpu()
        track_ids = results[0].boxes.id.int().cpu().tolist()
        annotated_frame = results[0].plot()
        for box, track_id in zip(boxes, track_ids):
            x, y, w, h = box
            track = track_history[track_id]
            track.append((float(x), float(y)))
            if len(track) > 30:
                track.pop(0)
            points = np.hstack(track).astype(np.int32).reshape((-1, 1, 2))
            cv2.polylines(annotated_frame, [points], isClosed=False, color=(230, 230, 230), thickness=10)
        cv2.imshow("YOLO11 Tracking", annotated_frame)
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
    else:
        break
cap.release()
cv2.destroyAllWindows()

このスクリプトは、トラッキングされたオブゞェクトの移動経路を瀺すトラッキングラむンを時間経過ずずもにプロットしたす。

📅䜜成1幎前 ✏曎新したした 2ヶ月前

コメント