Подсчет Автомобильного Трафика С Помощью Компьютерного Зрения

Иногда у нас возникают проблемы с расчетом клиентопотока.

Мы можем посчитать очереди, заполненность общественных мест и т.д. Давайте представим, что нам дана задача посчитать поток машин в определенном месте в разное время.

Единственное, что приходит на ум, это то, что человеку фактически придется вручную производить приблизительный расчет тех или иных показателей.

Попробуем автоматизировать эту задачу, так как на данный момент у нас имеется огромное количество инструментов и вычислительных мощностей.

Для начала определимся с источником видеозаписей.

Например, вы можете взять портал https://weacom.ru/cams .

На этом портале размещены в открытом доступе различные камеры, имеющие качественное изображение и удачное расположение (хорошо видна дорога и автомобили) Давайте возьмем камеры в качестве примера https://weacom.ru/cams/view/akademmost2 Эта камера отлично подойдет для примера, после чего попробуем усложнить задачу.

Чтобы получать кадры с камеры, нам нужно подключиться к потоку самой камеры.

Заходим в исходный код и находим ссылку на видеопоток с текущей камеры.



Подсчет автомобильного трафика с помощью КОМПЬЮТЕРНОГО ЗРЕНИЯ

Имея эту ссылку, мы можем использовать Python и OpenCV для получения кадров из этого потока.

  
  
  
  
   

import cv2 import time video_stream_widget = cv2.VideoCapture(' https://cctv.baikal-telecom.net/Akademmost-2/index.m3u8 ') video_stream_widget.set(cv2.CAP_PROP_FPS, 5) success, frame = video_stream_widget.read() prev = 0 print(video_stream_widget.get(cv2.CAP_PROP_FPS)) while success: time_elapsed = time.time() - prev success, frame = video_stream_widget.read() if time_elapsed > 1. / 5: prev = time.time() cv2.imshow('Weacom', cv2.resize(frame, (1280, 1080))) cv2.waitKey(20) key = cv2.waitKey(1) if key == ord('s'): video_stream_widget.capture.release() cv2.destroyAllWindows() exit(1)

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

Теперь, когда у нас есть отснятый материал, наша задача — применить алгоритм для отслеживания автомобилей.

Для этого возьмем комбинацию Yolo + Deepsort. В качестве готовой реализации мы будем использовать — https://github.com/mikel-brostrom/Yolov5_DeepSort_Pytorch .

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

Для начала клонируем репозиторий:

>> git clone --recurse-submodules https://github.com/mikel-brostrom/Yolov5_DeepSort_Pytorch.git

И устанавливаем все необходимые библиотеки:

>> pip install -r requirements.txt

Так как yolo обучался на датасете MS Coco, нам нужно оставить в распознавании только те классы, которые нам нужны, а именно автобус, легковой автомобиль, грузовой автомобиль.

Давайте изменим конфигурацию на классы 4 6 8. Давайте запустим код из коробки и посмотрим результат. Ради интереса я попробовал запустить это на другой случайной камере: python track.py --источник https://cctv1.dreamnet.su:8090/hls/275779/8c728f28f72aea02c41d/playlist.m3u8 --classes 2 5 7 --show-vid

Подсчет автомобильного трафика с помощью КОМПЬЮТЕРНОГО ЗРЕНИЯ

В целом мы видим, что алгоритм работает, отслеживание идет. Понаблюдав некоторое время за алгоритмом, я закрыл окно.

Давайте вспомним нашу задачу — нам нужно посчитать трафик за определённый период времени.

Визуально алгоритм вроде бы уже это делает — но на самом деле точность алгоритма сильно страдает — введенные идентификаторы уже явно превышают количество визуально видимых автомобилей.

В этом случае нам просто нужно добавить счетчики к каждому новому идентификатору.

Для этого внесем изменения в track.py: Добавляем в список все уникальные идентификаторы идентифицированных машин:

for j, (output, conf) in enumerate(zip(outputs, confs)): bboxes = output[0:4] id = output[4] cls = output[5] ids_list.append(id)

А в конце просто удаляем дубликаты и отображаем длину списка

print(len(list(set(ids_list))))

Давайте еще раз запустим алгоритм и посмотрим на результаты — он выглядит лучше.



Подсчет автомобильного трафика с помощью КОМПЬЮТЕРНОГО ЗРЕНИЯ

В общем, этот алгоритм можно оставить для тестирования.

В следующих статьях мы рассмотрим многопоточное отслеживание потоков с разных камер.

Теги: #Машинное обучение #python #программирование #трафик #COMPUTER VISION4 #Yolo #глубокая сортировка

Вместе с данным постом часто просматривают: