Иногда у нас возникают проблемы с расчетом клиентопотока.
Мы можем посчитать очереди, заполненность общественных мест и т.д. Давайте представим, что нам дана задача посчитать поток машин в определенном месте в разное время.
Единственное, что приходит на ум, это то, что человеку фактически придется вручную производить приблизительный расчет тех или иных показателей.
Попробуем автоматизировать эту задачу, так как на данный момент у нас имеется огромное количество инструментов и вычислительных мощностей.
Для начала определимся с источником видеозаписей.
Например, вы можете взять портал 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 #глубокая сортировка
-
На Спам Ответим Робо-Флудом
19 Oct, 24 -
Электроэнцефалограф На Arduino
19 Oct, 24 -
Полная Родословная Браузеров
19 Oct, 24