← Обзор проекта

Документация проекта

Архитектура и потоки данных

Цели архитектуры

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

Основной видеоконвейер

RTSP reader→Последний кадр→Motion и Tracking→YOLO→JPEG / HLS→Web-клиент

Захват кадров, детекция движения, сопровождение, нейросетевой inference и кодирование HLS выполняются независимо. Медленный этап не блокирует всю систему. Полнокадровый YOLO и YOLO сопровождаемых целей работают отдельными контурами, а координатор объединяет результаты.

Управление задержкой

Для большинства границ используется стратегия последнего актуального значения. Очереди имеют ограниченную глубину, поэтому при перегрузке устаревшие кадры отбрасываются. Аналитический FPS может снизиться, но задержка не растёт со временем.

Клиентский видеопоток формируется отдельно от аналитики. Буфер отображения сглаживает сетевой джиттер, а HLS-кодировщик получает только последний подготовленный кадр.

Серверные реализации

C++20, Python и Rust поддерживают одинаковый REST-контракт и структуру конфигурации. Один JavaScript-клиент работает со всеми реализациями. Это позволяет сравнивать производительность, проверять совместимость общими контрактными запросами и переносить архитектурные решения без изменения внешнего API.

Публичный VPS

Все внешние подключения стенда проходят через alex-video-analytics.ru/demo. VPS завершает HTTPS-соединение и маршрутизирует разрешённые REST- и HLS-запросы. Камеры, база данных и внутренние сервисы не открываются браузеру напрямую.

Состояние и конфигурация

REST-обработчики изменяют защищённое состояние и публикуют запрос на применение конфигурации. Видеопоток принимает изменения в своей точке синхронизации. Настройки камер и областей хранятся отдельно от runtime-файлов; пароли камер не возвращаются клиенту.

История событий

Tracking History хранит жизненный цикл объекта: появление, уточнение класса, объединение дубликатов и потерю цели. YOLO History ведёт отдельную историю полнокадровых детекций. PostgreSQL получает параметризованные запросы; при недоступности базы обработка видео продолжается.