Ultralytics YOLO27:
Get Started

Расчёт расстояния с помощью Ultralytics YOLO26#

Что такое расчёт расстояния?#

Расчёт расстояния — это процесс измерения промежутка между двумя обнаруженными объектами на изображении или видеокадре. В Ultralytics YOLO26 для расчёта расстояния между выделенными пользователем объектами используется центр ограничивающей рамки.



Смотри: Как оценивать расстояние между обнаруженными объектами в пикселях с помощью Ultralytics YOLO 🚀

Иллюстрации#

Расчёт расстояния с помощью Ultralytics YOLO26
Расчёт расстояния с помощью Ultralytics YOLO26

Преимущества расчёта расстояния#

  • Точность локализации: повышает точность пространственного позиционирования в задачах компьютерного зрения.
  • Оценка размера: позволяет оценивать размер объектов для лучшего понимания контекста.
  • Понимание сцены: улучшает понимание трёхмерной сцены и помогает принимать более обоснованные решения в таких приложениях, как автономные транспортные средства и системы видеонаблюдения.
  • Предотвращение столкновений: позволяет системам выявлять возможные столкновения, отслеживая расстояния между движущимися объектами.
  • Пространственный анализ: помогает анализировать взаимосвязи и взаимодействия объектов в наблюдаемой среде.
Расчёт расстояния
  • Щёлкни левой кнопкой мыши по любым двум ограничивающим рамкам, чтобы рассчитать расстояние.
  • Щёлкни правой кнопкой мыши, чтобы удалить все нарисованные точки.
Расстояние является приблизительным

Расстояние является приблизительным и может быть неточным, поскольку рассчитывается по двумерным данным, в которых отсутствует информация о глубине.

Расчёт расстояний с помощью YOLO26#

Решение DistanceCalculation отслеживает объекты между кадрами и измеряет евклидово расстояние в пикселях между центрами любых двух ограничивающих рамок, выбранных тобой мышью. Запусти пример ниже, затем щёлкни левой кнопкой мыши по двум объектам, чтобы провести соединительную линию и увидеть расстояние; щёлкни правой кнопкой, чтобы сбросить выбор.

Расчёт расстояния с помощью Ultralytics YOLO
import cv2

from ultralytics import solutions

cap = cv2.VideoCapture("path/to/video.mp4")
assert cap.isOpened(), "Error reading video file"

# Запись видео
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))
video_writer = cv2.VideoWriter("distance_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

# Инициализация объекта расчёта расстояния
distancecalculator = solutions.DistanceCalculation(
    model="yolo26n.pt",  # путь к файлу модели YOLO26.
    show=True,  # отобразить результат
)

# Обработка видео
while cap.isOpened():
    success, im0 = cap.read()

    if not success:
        print("Video frame is empty or processing is complete.")
        break

    results = distancecalculator(im0)

    print(results)  # доступ к результату

    video_writer.write(results.plot_im)  # запись обработанного кадра.

cap.release()
video_writer.release()
cv2.destroyAllWindows()  # закрытие всех открытых окон

Аргументы DistanceCalculation()#

Вот таблица с аргументами DistanceCalculation:

АргументТипПо умолчаниюОписание
modelstrNoneПуть к файлу модели Ultralytics YOLO.
line_widthint2Толщина линий рамок, ключевых точек и счётчиков, которые рисует решение.
verboseboolTrueВключает журнал решения для каждого кадра с указанием формы входных данных, количества объектов по классам и скорости обработки. Сам вызов отслеживания всегда выполняется без вывода сообщений.

В решении DistanceCalculation также можно использовать различные аргументы track.

АргументТипПо умолчаниюОписание
trackerstr'tracktrack.yaml'Задаёт алгоритм отслеживания. Встроенные варианты: botsort.yaml, bytetrack.yaml, ocsort.yaml, deepocsort.yaml, fasttrack.yaml, tracktrack.yaml.
conffloat0.25Задаёт порог уверенности для обнаружений: при более низких значениях можно отслеживать больше объектов, но возрастает вероятность ложноположительных срабатываний.
ioufloat0.7Задаёт порог пересечения над объединением (IoU) для фильтрации перекрывающихся обнаружений.
classeslistNoneФильтрует результаты по индексу класса. Например, classes=[0, 2, 3] отслеживает только указанные классы.
devicestrNoneЗадаёт устройство для инференса (например, cpu, cuda:0 или 0). Позволяет выбрать CPU, определённый GPU или другое вычислительное устройство для выполнения модели.
imgszint or tuple640Целевой размер изображения для инференса: целое число для квадратного изображения или пара (height, width). Размеры корректируются с учётом шага модели.
max_detint300Максимальное количество обнаружений, сохраняемых в каждом кадре перед отслеживанием; ограничивает число объектов, обрабатываемых решением в насыщенных сценах.
quantizeint or strNoneТочность инференса: 16 (FP16) или 32/не задано (FP32) для моделей PyTorch и TorchScript; другие форматы используют точность, выбранную артефактом и средой выполнения. Заменяет устаревший флаг half.

Кроме того, доступны следующие аргументы визуализации:

АргументТипПо умолчаниюОписание
showboolFalseЕсли True, показывает аннотированные изображения или видео в окне. Полезно для мгновенной визуальной проверки во время разработки или тестирования.
show_confboolTrueПоказывает оценку уверенности каждой детекции рядом с меткой. Позволяет оценить уверенность модели в каждой детекции.
show_labelsboolTrueПоказывает метки каждой детекции на визуализации. Помогает сразу понять, какие объекты обнаружены.

Подробности реализации#

Класс DistanceCalculation отслеживает объекты между видеокадрами и рассчитывает евклидово расстояние между центрами выбранных ограничивающих рамок. Когда ты щёлкаешь по двум объектам, решение:

  1. Извлекает центры выбранных ограничивающих рамок
  2. Рассчитывает евклидово расстояние между этими центрами в пикселях
  3. Отображает расстояние на кадре и соединяет объекты линией

В реализации используется метод mouse_event_for_distance для обработки действий мышью: пользователь может выбирать объекты и при необходимости сбрасывать выбор. Метод process обрабатывает кадры по очереди, отслеживает объекты и рассчитывает расстояния.

Применение#

Расчёт расстояния с помощью YOLO26 находит множество практических применений:

  • Аналитика розничной торговли: измерение близости покупателей к товарам и анализ эффективности планировки магазина
  • Промышленная безопасность: контроль безопасного расстояния между работниками и оборудованием
  • Управление дорожным движением: анализ интервалов между транспортными средствами и выявление опасного сближения
  • Спортивная аналитика: расчёт расстояния между игроками, мячом и ключевыми точками поля
  • Здравоохранение: обеспечение необходимой дистанции в зонах ожидания и отслеживание перемещения пациентов
  • Робототехника: помощь роботам в поддержании безопасного расстояния до препятствий и людей

Часто задаваемые вопросы#

  • Чтобы рассчитать расстояние между объектами с помощью Ultralytics YOLO26, нужно определить центры ограничивающих рамок обнаруженных объектов. Для этого инициализируй класс DistanceCalculation из модуля solutions Ultralytics и используй результаты отслеживания модели для расчёта расстояний.

  • Расчёт расстояния с помощью Ultralytics YOLO26 даёт несколько преимуществ:

    • Точность локализации: обеспечивает точное пространственное позиционирование объектов.
    • Оценка размера: помогает оценивать физические размеры объектов и лучше понимать контекст.
    • Понимание сцены: улучшает понимание трёхмерной сцены и помогает принимать более обоснованные решения в таких приложениях, как автономное вождение и видеонаблюдение.
    • Обработка в реальном времени: выполняет вычисления на лету, поэтому подходит для анализа видео в реальном времени.
    • Возможности интеграции: легко взаимодействует с другими решениями YOLO26, такими как отслеживание объектов и оценка скорости.
  • Да, с помощью Ultralytics YOLO26 можно рассчитывать расстояние в видеопотоках в реальном времени. Для этого нужно захватывать видеокадры с помощью OpenCV, запускать обнаружение объектов с YOLO26 и использовать класс DistanceCalculation для расчёта расстояний между объектами в последовательных кадрах. Подробный пример реализации см. в примере обработки видеопотока.

  • Чтобы удалить точки, нарисованные при расчёте расстояния с помощью Ultralytics YOLO26, щёлкни правой кнопкой мыши. Так ты удалишь все нарисованные точки. Подробнее см. в примечании к примеру расчёта расстояния.

  • К основным аргументам для инициализации класса DistanceCalculation в Ultralytics YOLO26 относятся:

    • model: путь к файлу модели YOLO26.
    • tracker: алгоритм отслеживания (по умолчанию в решениях используется tracktrack.yaml).
    • conf: порог уверенности для обнаружений.
    • show: флаг отображения результата.

    Полный список аргументов и их значений по умолчанию см. в описании аргументов DistanceCalculation.

Комментарии