Ultralytics YOLO27:

Расчёт расстояния с использованием Ultralytics YOLO26#

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

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



Watch: How to estimate distance between detected objects with Ultralytics YOLO in Pixels 🚀

Визуальные материалы#

Расчёт расстояния с использованием Ultralytics YOLO26
Расчёт расстояния с Ultralytics YOLO26

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

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

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

Расчёт расстояния с YOLO26#

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

Расчёт расстояния с использованием Ultralytics YOLO
import cv2

from ultralytics import solutions

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

# Video writer
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))

# Initialize distance calculation object
distancecalculator = solutions.DistanceCalculation(
    model="yolo26n.pt",  # path to the YOLO26 model file.
    show=True,  # display the output
)

# Process video
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)  # access the output

    video_writer.write(results.plot_im)  # write the processed frame.

cap.release()
video_writer.release()
cv2.destroyAllWindows()  # destroy all opened windows

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

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

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

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

АргументТипПо умолчаниюОписание
trackerstr'botsort.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 даёт несколько преимуществ:

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

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

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

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

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

Комментарии