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

Оценка скорости с помощью Ultralytics YOLOv8 🚀.

Что такое оценка скорости?

Оценка скорости - это процесс вычисления скорости движения объекта в заданном контексте, часто используемый в приложениях компьютерного зрения. С помощью Ultralytics YOLOv8 ты можешь рассчитать скорость объекта, используя отслеживание объекта наряду с данными о расстоянии и времени, что крайне важно для таких задач, как наблюдение за дорожным движением. Точность оценки скорости напрямую влияет на эффективность и надежность различных приложений, что делает ее ключевым компонентом в развитии интеллектуальных систем и процессов принятия решений в реальном времени.

Преимущества оценки скорости?

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

Применение в реальном мире

Транспорт Транспорт
Оценка скорости на дороге с помощью Ultralytics YOLOv8 Оценка скорости на мосту с помощью Ultralytics YOLOv8
Оценка скорости на дороге с помощью Ultralytics YOLOv8 Оценка скорости на мосту с помощью Ultralytics YOLOv8

Оценка скорости с помощью YOLOv8 Пример

from ultralytics import YOLO
from ultralytics.solutions import speed_estimation
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("speed_estimation.avi",
                               cv2.VideoWriter_fourcc(*'mp4v'),
                               fps,
                               (w, h))

line_pts = [(0, 360), (1280, 360)]

# Init speed-estimation obj
speed_obj = speed_estimation.SpeedEstimator()
speed_obj.set_args(reg_pts=line_pts,
                   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 = speed_obj.estimate_speed(im0, tracks)
    video_writer.write(im0)

cap.release()
video_writer.release()
cv2.destroyAllWindows()
Скорость - это оценка

Скорость будет приблизительной и может быть не совсем точной. Кроме того, оценка может меняться в зависимости от скорости GPU.

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

Имя Тип По умолчанию Описание
reg_pts list [(20, 400), (1260, 400)] Точки, определяющие область региона
names dict None Названия классов
view_img bool False Отображение кадров с подсчетами
line_thickness int 2 Увеличьте толщину ограничительных рамок
region_thickness int 5 Толщина для области счетчика объектов или линии
spdl_dist_thresh int 10 Порог евклидова расстояния для линии контроля скорости

Аргументы 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-01-15
Авторы: glenn-jocher (2), AyushExel (1), chr043416@gmail.com (1)

Комментарии