Перейти к содержанию

Слежение за несколькими объектами с помощью Ultralytics YOLO

Примеры отслеживания нескольких объектов

Отслеживание объектов в сфере видеоаналитики - важнейшая задача, которая позволяет не только определять местоположение и класс объектов в кадре, но и сохранять уникальный идентификатор каждого обнаруженного объекта по мере продвижения видео. Сферы применения этой технологии безграничны - от видеонаблюдения и безопасности до спортивной аналитики в реальном времени.

Почему стоит выбрать Ultralytics YOLO для отслеживания объектов?

Результаты работы трекеров Ultralytics соответствуют стандартному обнаружению объектов, но имеют дополнительную ценность в виде идентификаторов объектов. Это позволяет легко отслеживать объекты в видеопотоке и проводить последующую аналитику. Вот почему вам следует рассмотреть возможность использования Ultralytics YOLO для отслеживания объектов:

  • Эффективность: Обрабатывайте видеопотоки в режиме реального времени без ущерба для точности.
  • Гибкость: Поддерживает множество алгоритмов и конфигураций отслеживания.
  • Простота использования: простой Python API и варианты CLI для быстрой интеграции и развертывания.
  • Настраиваемость: Простота использования с настраиваемыми моделями YOLO , что позволяет интегрировать их в приложения, ориентированные на конкретную область.



Смотреть: Обнаружение и отслеживание объектов с помощью Ultralytics YOLO .

Применение в реальном мире

Транспорт Розничная торговля Аквакультура
Отслеживание транспортных средств Отслеживание людей Отслеживание рыбы
Отслеживание транспортных средств Отслеживание людей Отслеживание рыбы

Характеристики с первого взгляда

Ultralytics YOLO Расширяет функции обнаружения объектов, обеспечивая надежное и универсальное отслеживание объектов:

  • Отслеживание в реальном времени: Бесшовное отслеживание объектов на видео с высокой частотой кадров.
  • Поддержка нескольких трекеров: Выбирайте из множества известных алгоритмов отслеживания.
  • Настраиваемые конфигурации трекера: Настраивайте алгоритм отслеживания в соответствии с конкретными требованиями, регулируя различные параметры.

Доступные трекеры

Ultralytics YOLO поддерживает следующие алгоритмы отслеживания. Их можно включить, передав соответствующий файл конфигурации YAML, например tracker=tracker_type.yaml:

  • BoT-SORT - Использование botsort.yaml чтобы включить этот трекер.
  • ByteTrack - Использование bytetrack.yaml чтобы включить этот трекер.

По умолчанию используется трекер BoT-SORT.

Отслеживание

Информация о пороге отслеживания

Если показатель доверия к объекту будет низким, то есть меньше, чем track_high_threshто ни один трек не будет успешно возвращен и обновлен.

Чтобы запустить трекер на видеопотоках, используйте обученную модель Detect, Segment или Pose, такую как 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то ни один трек не будет успешно возвращен и обновлен.

Отслеживание аргументов

Конфигурация отслеживания имеет общие свойства с режимом Predict, такие как 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/cfg/trackers и изменять любые конфигурации (кроме 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 , использующий OpenCV (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 30 tracks for 30 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's threading модуль для одновременного запуска нескольких экземпляров трекера. Каждый поток отвечает за запуск трекера на одном видеофайле, и все потоки работают одновременно в фоновом режиме.

Для того чтобы каждый поток получал правильные параметры (видеофайл, используемую модель и индекс файла), мы определяем функцию run_tracker_in_thread которая принимает эти параметры и содержит основной цикл отслеживания. Эта функция считывает видео кадр за кадром, запускает трекер и отображает результаты.

В этом примере используются две разные модели: yolo11n.pt и yolo11n-seg.ptКаждый из них отслеживает объекты в отдельном видеофайле. Видеофайлы указываются в SOURCES.

Сайт 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 ? Мы приглашаем вас внести свой вклад в наш раздел Trackers в ultralytics/cfg/trackers! Ваши реальные приложения и решения могут оказаться бесценными для пользователей, работающих над задачами отслеживания.

Внося свой вклад в этот раздел, вы помогаете расширить спектр решений для отслеживания, доступных в рамках Ultralytics YOLO , добавляя еще один уровень функциональности и полезности для сообщества.

Чтобы начать вносить свой вклад, обратитесь к нашему Руководству по внесению вклада, где даны исчерпывающие инструкции по отправке Pull Request (PR) 🛠️. Нам не терпится увидеть, что вы внесете!

Давайте вместе расширим возможности отслеживания экосистемы Ultralytics YOLO 🙏!

ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ

Что такое многообъектное отслеживание и как Ultralytics YOLO поддерживает его?

Многообъектное отслеживание в видеоаналитике предполагает как идентификацию объектов, так и сохранение уникального идентификатора для каждого обнаруженного объекта во всех видеокадрах. Ultralytics YOLO поддерживает эту задачу, обеспечивая отслеживание в реальном времени вместе с идентификаторами объектов, что облегчает такие задачи, как наблюдение за безопасностью и спортивная аналитика. Система использует такие трекеры, как BoT-SORT и ByteTrack, которые можно настраивать с помощью YAML-файлов.

Как настроить пользовательский трекер для Ultralytics YOLO ?

Вы можете настроить пользовательский трекер, скопировав существующий файл конфигурации трекера (например, custom_tracker.yaml) из Ultralytics каталог конфигурации трекера и изменять параметры по мере необходимости, за исключением 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's 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 год назад ✏️ Обновлено 4 дня назад

Комментарии