Централизованная система управления IP-камерами с онлайн-трансляцией, записью видеоархива и аналитикой на основе нейросетей.

Python 3.12 Dart / Flutter FastAPI PostgreSQL 17 WebRTC ONVIF GPU-аналитика

Что такое «Разгляди»

«Разгляди» — программное обеспечение для организации системы видеонаблюдения на базе IP-камер с поддержкой протоколов RTSP и ONVIF. Система обеспечивает централизованное управление камерами, непрерывную запись видеоархива на серверные узлы, онлайн-просмотр видеопотоков в реальном времени и аналитическую обработку видео на GPU.

Доступ к системе осуществляется через веб-браузер или мобильное приложение (iOS, Android, RuStore) без установки дополнительного ПО на стороне пользователя.

🎥

Онлайн-трансляция

Просмотр видеопотока в реальном времени по протоколу WebRTC с минимальной задержкой

💾

Видеоархив

Непрерывная запись на серверные узлы с хранением архива и навигацией по таймлайну

🧠

Аналитика

Детекция движения и объектов нейросетевыми моделями на GPU (ncnn, Vulkan, PP-YOLOE+)

📱

Мобильное приложение

Flutter-приложение для iOS, Android и RuStore с полным функционалом веб-версии

Возможности системы

В системе предусмотрены две роли: пользователь и администратор.

👤 Пользователь
  • Онлайн-просмотр видеопотока с камеры в реальном времени (WebRTC). Поддержка PTZ-управления для совместимых камер. Полноэкранный режим.
  • Просмотр видеоархива через таймлайн с навигацией по дате и времени. Отображение скриншотов событий при наведении.
  • Скачивание фрагментов архива с выбором временного диапазона.
  • Просмотр аналитики движения — временны́е отметки периодов активности в кадре.
  • Просмотр аналитики детекций — события обнаружения объектов заданных классов с привязкой к времени. Скриншоты с выделенными областями детекций.
⚙️ Администратор
  • Добавление серверных узлов (нод) в кластер записи. Настройка точек монтирования дисков. Просмотр статистики нод: дисковое пространство, статус, нагрузка.
  • Добавление IP-камер с указанием параметров подключения (адрес, протокол RTSP/ONVIF, учётные данные). Управление записью и настройка длительности хранения архива.
  • Создание учётных записей пользователей. Назначение прав доступа к камерам. Управление ролями (пользователь / администратор).
  • Настройка параметров аналитики для каждой камеры: классы объектов для детекции, чувствительность и пороги срабатывания нейросетевых моделей.

Компоненты ПО

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

razglyadi
Основное API-приложение. Бизнес-логика, REST API, административный интерфейс, веб-клиент (Dart/WASM), выдача ссылок на записи. FastAPI + hypercorn, порт 8000.
razglyadi_master
Управляющий компонент кластера. Распределяет камеры по нодам через Redis pub/sub, мониторит свободное место на дисках, восстанавливает состояние после сбоев.
razglyadi_recorder
Компонент записи. Захватывает RTSP-потоки с IP-камер и записывает на локальный диск. Транслирует потоки в mediamtx для WebRTC. Запускается на каждом узле записи.
razglyadi_streamer
Компонент стриминга для дополнительных серверов. Выдаёт ссылки на записи, хранящиеся на данном узле. На основном сервере эту функцию выполняет razglyadi.
razglyadi_ncnn_rq@
Воркер аналитики видео. Получает задания из очереди Redis, обрабатывает записи нейросетевыми моделями на GPU (ncnn, Vulkan, PP-YOLOE+).
razglyadi_store_rq
Воркер сохранения детекций. Получает результаты от воркера анализа видео, фильтрует дубликаты и сохраняет их в базу данных.

Инфраструктурные зависимости

Следующие компоненты являются инфраструктурными зависимостями, не входящими в состав разрабатываемого ПО: nginx (веб-сервер), PostgreSQL 17 (СУБД), Redis (брокер сообщений и очередей), mediamtx (ретрансляция WebRTC/RTSP).

Руководство по установке

Требования к серверу

Параметр Требование
ОС Debian Linux 13 (совместимо с другими современными дистрибутивами Linux)
Python 3.12+
СУБД PostgreSQL 17 с расширением PostGIS
Брокер сообщений Redis
Веб-сервер nginx
Доменное имя Обязательно — для автоматического выпуска HTTPS-сертификата Let's Encrypt
GPU (опционально) FFmpeg hwaccel Vulkan — для компонента аналитики видео razglyadi_ncnn_rq

Установка на основной сервер

Клонируйте репозиторий и запустите скрипт установки:

bash
# Клонирование репозитория
git clone https://github.com/liker383/razglyadi /srv/projects/razglyadi
cd /srv/projects/razglyadi

# Запуск установки
bash install.sh

Скрипт в интерактивном режиме запросит:

  • Доменное имя сервера
  • Имя пользователя и пароль базы данных
  • ID ноды (числовой идентификатор сервера в кластере)

Что делает скрипт установки

Шаги установки
1. Создаёт .env из шаблона, генерирует секретный ключ
2. Устанавливает системные зависимости (apt)
3. Создаёт Python-окружение через uv, устанавливает зависимости
4. Инициализирует БД, применяет миграции Alembic
5. Заполняет начальные данные (seed), создаёт учётную запись admin
6. Создаёт systemd-сервисы для всех компонентов
7. Настраивает Redis с паролем
8. Настраивает nginx, выпускает HTTPS-сертификат через certbot

Запуск сервисов после установки

bash
sudo systemctl enable --now razglyadi
sudo systemctl enable --now razglyadi_master
sudo systemctl enable --now razglyadi_recorder
sudo systemctl enable --now razglyadi_ncnn_rq@0.service
sudo systemctl enable --now razglyadi_store_rq.service

Установка на дополнительные серверы (стримеры)

На дополнительных серверах запускаются только компоненты razglyadi_recorder и razglyadi_streamer. Полная установка с СУБД и nginx не требуется. Компоненты подключаются к PostgreSQL и Redis основного сервера через сеть.

Первый вход

После запуска сервисов веб-интерфейс доступен по адресу установленного домена. Учётная запись администратора создаётся в процессе установки. Пароль администратора задаётся установщиком. После первого входа рекомендуется изменить пароль.

Руководство пользователя

Комплексная инструкция для конечных пользователей по работе с системой видеонаблюдения через веб-браузер и мобильные приложения.

Ключевые операции

  • Вход в систему: авторизация по учётным данным, регистрация девайса, восстановление пароля
  • Открытие списка камер: просмотр всех камер, доступных пользователю, фильтрация и поиск
  • Просмотр трансляции: онлайн-трансляция в качестве реального времени, управление звуком
  • Поиск архива: навигация по видеоархиву с выбором даты и времени, просмотр прошлых рекордингов
  • Просмотр множественных камер: расположение нескольких камер на одном экране в режиме сетки
  • Скачивание записей: экспорт видео с выбранным диапазоном времени, режимы сжатия
  • Работа с детекциями: просмотр результатов аналитики, видео с выявленными объектами
  • Карты: просмотр камер на интерактивных картах, фильтрация по начинальным территориям

📹 Видео-инструкция

Наглядное видеоруководство по основным операциям в системе.

Руководство администратора

Администраторская консоль доступна по адресу /razglyadi/admin и предоставляет полный контроль над системой видеонаблюдения.

📊 Главный дашборд

При входе в админку вы видите дашборд со статистикой системы:

  • Статистика по всем камерам в системе
  • Нагрузка на нодах рекордеров (CPU, память)
  • Информация о занятом и свободном дисковом пространстве
  • Количество камер, ведущих запись в данный момент
  • Статус всех активных нод

📋 Организации

Раздел для управления аккаунтами и пользователями системы.

  • Аккаунты: основная единица управления, привязана к одной организации или группе камер. В каждом аккаунте находятся камеры и пользователи
  • Пользователи: создание пользователей в рамках аккаунта с управлением доступом к камерам
  • Права доступа: новые пользователи автоматически получают доступ ко всем камерам аккаунта, новые камеры автоматически доступны всем пользователям. Высокие права администратора выдаются только техническому персоналу, занимающемуся обслуживанием серверной части

📹 Устройства

Управление камерами, аналитикой и доступом к видеопотокам.

Камеры

  • Добавление: интеграция IP-камер через RTSP поток и стандарт ONVIF
  • Конфигурация: указание RTSP URL потока и дополнительных параметров подключения
  • Привязка: камеры привязываются к конкретному аккаунту для управления доступом
  • Публичность: опция public включается для отображения камеры в картах на сайте
  • Размещение: просмотр информации о том, на какую ноду рекордера пишется камера
  • Миграция: возможность переместить камеру с одной ноды на другую для оптимизации нагрузки
  • Просмотр видео: встроенное воспроизведение видеопотока камеры прямо из административной консоли

Права доступа

  • Настройка: управление разрешениями пользователей к различным камерам
  • По умолчанию: новому пользователю предоставляется доступ ко всем камерам его аккаунта
  • Ограничение: администратор может заблокировать доступ пользователя к отдельным камерам

Запросы и настройки аналитики

  • Статистика: просмотр отчётов по аналитике детекций на камерах
  • Параметры: изменение настроек детекции для каждой камеры отдельно
  • Модели: указание требуемых моделей нейросетей для различных типов детекции (движение, объекты, люди и т.д.)
  • Точность: настройка уровня доверия для срабатывания детекции

🗺️ Карты

Создание и управление объектами карт для встраивания на сайт.

  • Создание объектов: добавление камер и элементов на интерактивную карту
  • Встраивание: получение готовой ссылки для встраивания карты в модуль <iframe> на вашем сайте
  • Публичность: для отображения в карте камера должна иметь включённую опцию public

⚙️ Настройки платформы

Конфигурирование инфраструктуры и интеграций системы.

Ноды рекордера

  • Регистрация: добавление серверных узлов для записи видеоархива
  • Параметры: указание IP адреса и URL для подключения ноды
  • Доступ: убедитесь, что мастер-нода имеет сетевой доступ к рекордеру

Точки монтирования

  • Диски: указание доступных дисков для записи видеоархивов на нодах
  • Аналитика: на нодах с поддержкой аналитики желательно указать папку analytic folder для сохранения скриншотов детекций
  • Управление: мониторинг свободного места и управление периодом хранения архива

API ключи

  • Интеграция: создание ключей доступа для внешних приложений и сервисов
  • Документация: полное описание API доступно на странице /razglyadi/docs
  • Безопасность: регулярно проверяйте используемые ключи и удаляйте неиспользуемые

📋 Логи и диагностика

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

  • Расположение логов: все логи системы находятся в директории app/logs
  • Поиск ошибок: для диагностики проблем проверьте логи на наличие записей с error или disaster
  • Мониторинг в реальном времени: используйте команду journalctl -u razglyadi -f для просмотра логов в реальном времени
  • Техническая поддержка: при возникновении внештатных ситуаций и критических ошибок обратитесь в службу поддержки с копией релевантных логов

Инструкция по обновлению

Пошаговые инструкции для администраторов по безопасному обновлению системы на новые версии.

При подготовке к обновлению

  • Остановите модули системы
  • Сохраните резервную копию базы данных и конфигурации

Процесс обновления

  1. Откройте терминал на сервере и перейти в директорию проекта:
    cd /srv/projects/razglyadi
  2. Скачайте новую версию из репозитория:
    git pull
  3. Обновите зависимости текущего окружения:
    uv pip sync requirements.txt
  4. Выполните миграции базы данных:
    ALEMBIC_RUNNING=1 PYTHONPATH=. alembic -c app/alembic/razglyadi/alembic.ini upgrade head
  5. Перезапустите все модули системы:
    sudo systemctl restart razglyadi razglyadi_master razglyadi_recorder razglyadi_ncnn_rq@0.service razglyadi_store_rq.service

После обновления

  • Проверьте статус модулей: systemctl status razglyadi razglyadi_master
  • Откройте веб-интерфейс и проверьте версию
  • При проблемах откатите git и миграции к предыдущей версии Восстановите резервную копию базы данных и конфигурацию

Контакты техподдержки

Telegram
@ae_polyakov
ВКонтакте
vk.com/polae

Время ответа: обычно в течение 24 часов

Используемые технологии

Серверная часть

🐍
Python 3.12
Язык программирования
⚡
FastAPI
Веб-фреймворк
🚀
Hypercorn
ASGI-сервер
🗄️
PostgreSQL 17
СУБД + PostGIS
⚙️
SQLAlchemy
ORM
🔄
Alembic
Миграции БД
📨
Redis + RQ
Очередь задач
🌐
nginx
Веб-сервер

Аналитика видео

🔥
ncnn
Нейросети
👁️
FFmpeg (hwaccel Vulkan)
Обработка видео

Клиентская часть

🎯
Dart / Flutter
Веб + мобильное
🌊
WebAssembly
Веб-клиент
📡
WebRTC
Онлайн-трансляция
📷
RTSP / ONVIF
Протоколы камер

Требования к окружению

  • ОС: Debian Linux 13, Ubuntu 24.04 LTS и совместимые
  • Python: 3.12+
  • СУБД: PostgreSQL 17 с расширением PostGIS
  • Брокер сообщений: Redis 7.0+
  • Веб-сервер: nginx
  • Веб-браузер клиента: любой с поддержкой WebRTC
  • GPU (опционально): ncnn, Vulkan, PP-YOLOE+
  • Дисковое пространство: зависит от количества камер и периода хранения
  • Нагрузка на канал и стример: 4-12 Мбит/s на каждую IP-камеру

Исходный код

Исходный код ПО размещён в двух репозиториях на GitHub. Репозитории закрытые — доступ предоставляется отдельно.

🖥️
github.com/liker383/razglyadi
Серверная часть, API, веб-клиент (Dart/WASM) — Python 3.12 / FastAPI
→
📱
github.com/liker383/razglyadi_mobile_app
Мобильное приложение — Flutter (iOS, Android, RuStore)
→