Расчёт расстояния с использованием Ultralytics YOLO26#
Что такое расчёт расстояния?#
Расчёт расстояния — это процесс измерения пространства между двумя обнаруженными объектами в изображении или кадре видео. В случае Ultralytics YOLO26 для расчёта расстояния между ограничивающими прямоугольниками, выделенными пользователем, используется центроид ограничивающего прямоугольника.
Watch: How to estimate distance between detected objects with Ultralytics YOLO in Pixels 🚀
Визуальные материалы#
| Расчёт расстояния с использованием Ultralytics YOLO26 |
|---|
![]() |
Преимущества расчёта расстояния#
- Точность локализации Precision: Повышает точность пространственного позиционирования в задачах компьютерного зрения.
- Оценка размера: Позволяет оценивать размер объектов для лучшего понимания контекста.
- Понимание сцены: Улучшает понимание 3D-сцены для принятия более эффективных решений в таких приложениях, как автономные транспортные средства и системы видеонаблюдения.
- Предотвращение столкновений: Позволяет системам обнаруживать потенциальные столкновения, отслеживая расстояния между движущимися объектами.
- Пространственный анализ: Облегчает анализ взаимосвязей и взаимодействий объектов в контролируемой среде.
Расчёт расстояния
- Щёлкни левой кнопкой мыши по любым двум ограничивающим прямоугольникам, чтобы рассчитать расстояние.
- Используй правую кнопку мыши, чтобы удалить все нарисованные точки.
Расстояние является приблизительным
Расстояние является приблизительным и может быть не совсем точным, так как оно вычисляется на основе двумерных данных, в которых отсутствует информация о глубине.
Расчёт расстояния с YOLO26#
Решение DistanceCalculation отслеживает объекты между кадрами и измеряет евклидово расстояние в пикселях между центроидами любых двух ограничивающих прямоугольников, выбранных тобой с помощью мыши. Запусти пример ниже, затем щёлкни левой кнопкой мыши по двум объектам, чтобы провести соединяющую линию и увидеть расстояние; щёлкни правой кнопкой мыши, чтобы отменить выбор.
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:
| Аргумент | Тип | По умолчанию | Описание |
|---|---|---|---|
model | str | None | Путь к файлу модели Ultralytics YOLO. |
line_width | int | 2 | Толщина линий для рамок, ключевых точек и счётчиков, которые рисует решение. |
verbose | bool | True | Включает покадровый журнал решения с указанием формы входных данных, количества классов и скорости обработки. Сам вызов отслеживания всегда выполняется без вывода. |
Ты также можешь использовать различные аргументы track в решении DistanceCalculation.
| Аргумент | Тип | По умолчанию | Описание |
|---|---|---|---|
tracker | str | 'botsort.yaml' | Определяет используемый алгоритм отслеживания. Встроенные варианты: botsort.yaml, bytetrack.yaml, ocsort.yaml, deepocsort.yaml, fasttrack.yaml, tracktrack.yaml. |
conf | float | 0.25 | Задаёт порог уверенности для детекций: более низкие значения позволяют отслеживать больше объектов, но могут включать ложноположительные результаты. |
iou | float | 0.7 | Задаёт порог пересечения над объединением (IoU) для фильтрации перекрывающихся детекций. |
classes | list | None | Фильтрует результаты по индексу класса. Например, classes=[0, 2, 3] отслеживает только указанные классы. |
device | str | None | Определяет устройство для инференса (например, cpu, cuda:0 или 0). Позволяет выбрать CPU, конкретный GPU или другое вычислительное устройство для выполнения модели. |
imgsz | int or tuple | 640 | Целевой размер изображения для вывода: целое число для квадрата или пара (height, width). Формы подстраиваются под шаг модели. |
max_det | int | 300 | Максимальное количество обнаружений, сохраняемых на кадр перед трекингом, ограничивает объекты, обрабатываемые решением в плотных сценах. |
quantize | int or str | None | Точность вывода: 16 (FP16) или 32/не задано (FP32) для моделей PyTorch и TorchScript; остальные форматы выполняют вычисления с точностью, выбранной их артефактом и средой выполнения. Заменяет устаревший флаг half. |
Кроме того, доступны следующие аргументы визуализации:
| Аргумент | Тип | По умолчанию | Описание |
|---|---|---|---|
show | bool | False | Если True, аннотированные изображения или видео отображаются в окне. Это полезно для получения визуальной обратной связи в процессе разработки или тестирования. |
show_conf | bool | True | Отображает показатель уверенности для каждой детекции рядом с её меткой. Показывает, насколько модель уверена в каждой детекции. |
show_labels | bool | True | Отображает метки каждой детекции в визуальном результате. Даёт непосредственное представление об обнаруженных объектах. |
Детали реализации#
Класс DistanceCalculation отслеживает объекты между кадрами видео и рассчитывает евклидово расстояние между центроидами выбранных ограничивающих прямоугольников. Когда ты нажимаешь на два объекта, решение выполняет следующие действия:
- Извлекает центроиды (центральные точки) выбранных ограничивающих прямоугольников
- Рассчитывает евклидово расстояние между этими центроидами в пикселях
- Отображает расстояние на кадре и соединяет объекты линией
В реализации используется метод mouse_event_for_distance для обработки взаимодействий с мышью, благодаря чему пользователи могут выбирать объекты и при необходимости отменять выбор. Метод process обрабатывает каждый кадр, отслеживает объекты и рассчитывает расстояния.
Применения#
Расчёт расстояния с YOLO26 имеет множество практических применений:
- Аналитика розничной торговли: Измерение расстояния от покупателей до товаров и анализ эффективности планировки магазина
- Промышленная безопасность: Контроль безопасных расстояний между работниками и оборудованием
- Управление дорожным движением: Анализ интервалов между транспортными средствами и обнаружение опасного приближения
- Спортивная аналитика: Расчёт расстояний между игроками, мячом и ключевыми позициями на поле
- Здравоохранение: Обеспечение соблюдения дистанции в зонах ожидания и контроль перемещения пациентов
- Робототехника: Помощь роботам в поддержании безопасного расстояния от препятствий и людей
Часто задаваемые вопросы#
Чтобы рассчитать расстояния между объектами с помощью Ultralytics YOLO26, необходимо определить центроиды ограничивающих прямоугольников обнаруженных объектов. Для этого нужно инициализировать класс
DistanceCalculationиз модуляsolutionsUltralytics и использовать результаты отслеживания модели для расчёта расстояний.Расчёт расстояния с помощью Ultralytics YOLO26 даёт несколько преимуществ:
- Точность локализации: Обеспечивает точное пространственное позиционирование объектов.
- Оценка размера: Помогает оценивать физические размеры, обеспечивая лучшее понимание контекста.
- Понимание сцены: Улучшает понимание 3D-сцены и помогает принимать более эффективные решения в таких приложениях, как автономное вождение и видеонаблюдение.
- Обработка в реальном времени: Выполняет расчёты на лету, что делает решение подходящим для анализа видео в реальном времени.
- Возможности интеграции: Беспрепятственно работает с другими решениями YOLO26, такими как отслеживание объектов и оценка скорости.
Да, ты можешь рассчитывать расстояния в потоковом видео в реальном времени с помощью Ultralytics YOLO26. Процесс включает захват кадров видео с помощью OpenCV, выполнение обнаружения объектов с помощью YOLO26 и использование класса
DistanceCalculationдля расчёта расстояний между объектами в последовательных кадрах. Подробную реализацию см. в примере потокового видео.Чтобы удалить точки, нарисованные во время расчёта расстояния с помощью Ultralytics YOLO26, щёлкни правой кнопкой мыши. Это действие удалит все нарисованные тобой точки. Подробнее см. в разделе с примечанием под примером расчёта расстояния.
К основным аргументам для инициализации класса
DistanceCalculationв Ultralytics YOLO26 относятся:model: Путь к файлу модели YOLO26.tracker: Используемый алгоритм отслеживания (по умолчанию решения используютbotsort.yaml).conf: Порог уверенности для обнаружений.show: Флаг отображения результата.
Полный список аргументов и их значения по умолчанию см. в разделе аргументы DistanceCalculation.
