Данная программа осуществляет анализ входящего трафика на участке кругового движения. Алгоритм определяет загруженность примыкающих дорог и выводит интерактивную статистику.
Подробный туториал по проекту - ссылка на видео
docker compose -p traffic_analyzer up -d --build
Необходимо в главной директории создать файл с переменными окружения, которые будут прокинуты во все контейнеры. Для этого создайте файл secrets.txt
и положите подобный текст с паролями:
POSTGRES_DB=traffic_analyzer_db
POSTGRES_USER=user
POSTGRES_PASSWORD=pwd
GF_SECURITY_ADMIN_USER=admin
GF_SECURITY_ADMIN_PASSWORD=admin
Перед запуском необходимо в файле configs/app_config.yaml указать все желаемые параметры. Далее можно запускать код.
Чтобы запустить проект с определенным видео, необходимо указать путь к нему в докер компоузе переменной окружения
Каждая новая камера добавляется как +1 инстанс бекенда traffic_analyzer_camera_N в котором надо указать лишь разные scr и конфигурации через переменные окружения
В Grafana у каждой камеры свой дашборд между которыми можно переходит по кнопке:
Пример работы алгоритма c выводом статистики: каждая машина отображается цветом, соответствующим дороге, с которой она прибыла к круговому движению + выводится значение числа видимых машин + значения интенсивности входного потока (число машин в минуту с каждой входящей дороги).
Отображается таким образом при выборе в конфигурации show_node.show_info_statistics=True
Отключить отображение окна со статистикой можно при выборе в конфигурации show_node.show_info_statistics=False
Чтобы наблюдать fps обработки как в первом представленном примере, необходимо в конфиге указать show_node.draw_fps_info=True.
При наличии GPU получается достигнуть порядка 30-40 кадров в секунду в случае запуска main_optimized.py
Пример режима демонстрации трекинга машин (каждый id своим уникальным цветом отображается)
Отображается таким образом при выборе в конфигурации show_node.show_track_id_different_colors=True
Программа позволяет вести запись актуальной статистики о машинопотоке в базу данных PostgreSQL и тут же осуществлять визуализацию в виде интерактивного дашборда Grafana.
Тем самым у конечного потребителя этого приложения имеется возможность запустить код один раз, подключив на вход RTSP поток или заготовленный видеофайл, и постоянно получать актуальную статистику, а также просматривать историю загруженности участка движения.
Каждый кадр последовательно проходит через ноды, и в атрибуты этого объекта постепенно добавляется все больше и больше информации.
graph TD;
A["VideoReader<br>Считывает кадры из видеофайла"] --> B["DetectionTrackingNodes<br>Реализует детектирование машин + трекинг"];
B --> C["TrackerInfoUpdateNode<br>Обновляет информацию об актуальных треках"];
C --> D["CalcStatisticsNode<br>Вычисляет загруженность дорог"];
D --sent_info_db==False --> F;
D --sent_info_db==True --> E["SentInfoDBNode<br>Отправляет результаты в базу данных"];
E --> F["ShowNode<br>Отображает результаты на экране"];
F --save_video==True --> H["VideoSaverNode<br>Сохраняет обработанные кадры"];
F --show_in_web==True & save_video==False --> L["FlaskServerVideoNode<br>Обновляет кадры в веб-интерфейсе"];
H --show_in_web==True --> L