Перейти к содержимому

Вычисление расстояния с помощью Ultralytics YOLOv8 🚀.

Что такое вычисление расстояния?

Измерение промежутка между двумя объектами известно как вычисление расстояния в заданном пространстве. В случае с Ultralytics YOLOv8для вычисления расстояния до выделенных пользователем границ используется центроид ограничительного поля.



Смотри: Вычисление расстояния с помощью Ultralytics YOLOv8

Визуалы

Вычисление расстояния с помощью Ultralytics YOLOv8
Ultralytics YOLOv8 Расчет расстояния

Преимущества расчета расстояний?

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

Вычисление расстояния с помощью YOLOv8 Пример

from ultralytics import YOLO
from ultralytics.solutions import distance_calculation
import cv2

model = YOLO("yolov8n.pt")
names = model.model.names

cap = cv2.VideoCapture("path/to/video/file.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
video_writer = cv2.VideoWriter("distance_calculation.avi",
                               cv2.VideoWriter_fourcc(*'mp4v'),
                               fps,
                               (w, h))

# Init distance-calculation obj
dist_obj = distance_calculation.DistanceCalculation()
dist_obj.set_args(names=names, view_img=True)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break

    tracks = model.track(im0, persist=True, show=False)
    im0 = dist_obj.start_process(im0, tracks)
    video_writer.write(im0)

cap.release()
video_writer.release()
cv2.destroyAllWindows()
Примечание
  • Щелчок правой кнопкой мыши удалит все нарисованные точки
  • Левый клик мыши можно использовать для рисования точек

Необязательные аргументы set_args

Имя Тип По умолчанию Описание
names dict None Названия классов
view_img bool False Отображение кадров с подсчетами
line_thickness int 2 Увеличьте толщину ограничительных рамок
line_color RGB (255, 255, 0) Цвет линии для отображения центроидов на двух ограничительных коробках
centroid_color RGB (255, 0, 255) Цвет центроида для каждого ограничительного поля

Аргументы model.track

Имя Тип По умолчанию Описание
source im0 None исходный каталог для изображений или видео
persist bool False Сохранение треков между кадрами
tracker str botsort.yaml Метод отслеживания 'bytetrack' или 'botsort'
conf float 0.3 Порог доверия
iou float 0.5 Порог IOU
classes list None Фильтруй результаты по классам, то есть classes=0, или classes=[0,2,3]
verbose bool True Отображение результатов отслеживания объектов


Создано 2024-01-05, Обновлено 2024-03-01
Авторы: chr043416@gmail.com (5), glenn-jocher (2), AyushExel (1)

Комментарии