MCPcopy Index your code
hub / github.com/Koldim2001/TrafficAnalyzer

github.com/Koldim2001/TrafficAnalyzer @TrafficAnalyzer_prod_v3.1.1_multiple_cameras_influx

Chat with this repo
repository ↗ · DeepWiki ↗ · release TrafficAnalyzer_prod_v3.1.1_multiple_cameras_influx ↗ · + Follow
107 symbols 399 edges 20 files 28 documented · 26%

Browse by type

Functions 89 Types & classes 18
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Анализ трафика на круговом движении (prod версия с множеством камер)

Версия с тайм сириес базой данных Influx

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

Подробный туториал по проекту - ссылка на видео

Установка:

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

Каждая новая камера добавляется как +1 инстанс бекенда traffic_analyzer_camera_N в котором надо указать лишь разные scr и конфигурации через переменные окружения

У каждой камеры сой дашборд между которыми можно переходит по кнопке:

grafana

Работа с программой:

Перед запуском необходимо в файле configs/app_config.yaml указать все желаемые параметры. Далее можно запускать код.

Чтобы запустить проект с определенным видео, необходимо указать путь к нему в докер компоузе переменной окружения


Примеры работы кода:

Пример работы алгоритма c выводом статистики: каждая машина отображается цветом, соответствующим дороге, с которой она прибыла к круговому движению + выводится значение числа видимых машин + значения интенсивности входного потока (число машин в минуту с каждой входящей дороги).

Отображается таким образом при выборе в конфигурации show_node.show_info_statistics=True

Traffic statistics 1 Traffic statistics 2

Отключить отображение окна со статистикой можно при выборе в конфигурации show_node.show_info_statistics=False

Чтобы наблюдать fps обработки как в первом представленном примере, необходимо в конфиге указать show_node.draw_fps_info=True.

При наличии GPU получается достигнуть порядка 30-40 кадров в секунду в случае запуска main_optimized.py

Дополнительные варианты запуска:

main_stream_optimized.py - вариант под риалтайм стрим, обеспечивающий актуальные кадры без буфера (так как в отдельном процессе гонятся кадры а в главном процессе всегда берется в обработку лишь самый последний актуальный)

main_stream_optimized_v2.py - доработанная версия main_stream_optimized.py с ключевой фичей что при падении люого из процессов завершатся сразу оба и кнтроль жизни ведется через process.is_alive()


Пример режима демонстрации трекинга машин (каждый id своим уникальным цветом отображается)

Отображается таким образом при выборе в конфигурации show_node.show_track_id_different_colors=True

Traffic Tracking


Включение сторонних сервисов для визуализации результатов:

Программа позволяет вести запись актуальной статистики о машинопотоке в базу данных PostgreSQL и тут же осуществлять визуализацию в виде интерактивного дашборда Grafana.

image

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

Вывод обработанного видеопотока в веб-интерфейс:

Обработанные кадры можно отображать в веб-интерфейсе (вместо отдельного окна OpenCV). Бэкенд сайта реализован с использованием Flask.

Для того, чтобы запустить проект таким образом, необходимо в файле configs/app_config.yaml в разделе pipeline указать show_in_web=True и в show_node указать imshow=False. Далее можно запускать main.py или main_optimized.py и переходить по ссылке http://localhost:8100/

Пример того, как можно запустить проект и иметь возможность одновременно смотреть стрим по порту 8100 и наблюдать интерактивный дашборд в Grafana по порту 3111:

web+grafana


Рассмотрим, как реализован код:

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

graph TD;
    A["VideoReader

Считывает кадры из видеофайла"] --> B["DetectionTrackingNodes

Реализует детектирование машин + трекинг"];
    B --> C["TrackerInfoUpdateNode

Обновляет информацию об актуальных треках"];
    C --> D["CalcStatisticsNode

Вычисляет загруженность дорог"];
    D --sent_info_db==False --> F;
    D --sent_info_db==True --> E["SentInfoDBNode

Отправляет результаты в базу данных"];
    E --> F["ShowNode

Отображает результаты на экране"];
    F --save_video==True --> H["VideoSaverNode

Сохраняет обработанные кадры"];
    F --show_in_web==True & save_video==False --> L["FlaskServerVideoNode

Обновляет кадры в веб-интерфейсе"];
    H --show_in_web==True --> L

Core symbols most depended-on inside this repo

Shape

Method 61
Function 28
Class 18

Languages

Python100%

Modules by API surface

byte_tracker/byte_tracker_model.py20 symbols
nodes/FlaskServerVideoNode.py11 symbols
byte_tracker/utils/matching.py11 symbols
byte_tracker/utils/basetrack.py9 symbols
byte_tracker/utils/kalman_filter.py8 symbols
utils_local/utils.py6 symbols
nodes/VideoSaverNode.py4 symbols
nodes/ShowNode.py4 symbols
nodes/DetectionTrackingNodes.py4 symbols
main_optimized.py4 symbols
nodes/VideoReader.py3 symbols
nodes/TrackerInfoUpdateNode.py3 symbols

For agents

$ claude mcp add TrafficAnalyzer \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page