Расчёт расстояния с помощью Ultralytics YOLO26#
Что такое расчёт расстояния?#
Расчёт расстояния — это процесс измерения промежутка между двумя обнаруженными объектами на изображении или видеокадре. В Ultralytics YOLO26 для расчёта расстояния между выделенными пользователем объектами используется центр ограничивающей рамки.
Смотри: Как оценивать расстояние между обнаруженными объектами в пикселях с помощью Ultralytics YOLO 🚀
Иллюстрации#
| Расчёт расстояния с помощью Ultralytics YOLO26 |
|---|
![]() |
Преимущества расчёта расстояния#
- Точность локализации: повышает точность пространственного позиционирования в задачах компьютерного зрения.
- Оценка размера: позволяет оценивать размер объектов для лучшего понимания контекста.
- Понимание сцены: улучшает понимание трёхмерной сцены и помогает принимать более обоснованные решения в таких приложениях, как автономные транспортные средства и системы видеонаблюдения.
- Предотвращение столкновений: позволяет системам выявлять возможные столкновения, отслеживая расстояния между движущимися объектами.
- Пространственный анализ: помогает анализировать взаимосвязи и взаимодействия объектов в наблюдаемой среде.
Расчёт расстояния
- Щёлкни левой кнопкой мыши по любым двум ограничивающим рамкам, чтобы рассчитать расстояние.
- Щёлкни правой кнопкой мыши, чтобы удалить все нарисованные точки.
Расстояние является приблизительным
Расстояние является приблизительным и может быть неточным, поскольку рассчитывается по двумерным данным, в которых отсутствует информация о глубине.
Расчёт расстояний с помощью YOLO26#
Решение DistanceCalculation отслеживает объекты между кадрами и измеряет евклидово расстояние в пикселях между центрами любых двух ограничивающих рамок, выбранных тобой мышью. Запусти пример ниже, затем щёлкни левой кнопкой мыши по двум объектам, чтобы провести соединительную линию и увидеть расстояние; щёлкни правой кнопкой, чтобы сбросить выбор.
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:
| Аргумент | Тип | По умолчанию | Описание |
|---|---|---|---|
model | str | None | Путь к файлу модели Ultralytics YOLO. |
line_width | int | 2 | Толщина линий рамок, ключевых точек и счётчиков, которые рисует решение. |
verbose | bool | True | Включает журнал решения для каждого кадра с указанием формы входных данных, количества объектов по классам и скорости обработки. Сам вызов отслеживания всегда выполняется без вывода сообщений. |
В решении DistanceCalculation также можно использовать различные аргументы track.
| Аргумент | Тип | По умолчанию | Описание |
|---|---|---|---|
tracker | str | 'tracktrack.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 даёт несколько преимуществ:
- Точность локализации: обеспечивает точное пространственное позиционирование объектов.
- Оценка размера: помогает оценивать физические размеры объектов и лучше понимать контекст.
- Понимание сцены: улучшает понимание трёхмерной сцены и помогает принимать более обоснованные решения в таких приложениях, как автономное вождение и видеонаблюдение.
- Обработка в реальном времени: выполняет вычисления на лету, поэтому подходит для анализа видео в реальном времени.
- Возможности интеграции: легко взаимодействует с другими решениями YOLO26, такими как отслеживание объектов и оценка скорости.
Да, с помощью Ultralytics YOLO26 можно рассчитывать расстояние в видеопотоках в реальном времени. Для этого нужно захватывать видеокадры с помощью OpenCV, запускать обнаружение объектов с YOLO26 и использовать класс
DistanceCalculationдля расчёта расстояний между объектами в последовательных кадрах. Подробный пример реализации см. в примере обработки видеопотока.Чтобы удалить точки, нарисованные при расчёте расстояния с помощью Ultralytics YOLO26, щёлкни правой кнопкой мыши. Так ты удалишь все нарисованные точки. Подробнее см. в примечании к примеру расчёта расстояния.
К основным аргументам для инициализации класса
DistanceCalculationв Ultralytics YOLO26 относятся:model: путь к файлу модели YOLO26.tracker: алгоритм отслеживания (по умолчанию в решениях используетсяtracktrack.yaml).conf: порог уверенности для обнаружений.show: флаг отображения результата.
Полный список аргументов и их значений по умолчанию см. в описании аргументов DistanceCalculation.
