01
Ситуация: камеры есть, наблюдения нет
Типовой объект — от десятка до сотни камер, регистратор, журнал проходов СКУД и человек, который физически не может смотреть все потоки одновременно. Видео де-факто работает посмертным архивом: к нему обращаются после инцидента, чтобы понять, что уже случилось.
Когда объектов становится несколько, добавляется вторая проблема: у каждого свой регистратор, своя учётка, свой вендор камер и контроллеров. Единой картины нет ни у службы безопасности, ни у собственника.
- Реакция задним числом. Событие обнаруживается при разборе, а не в момент.
- Стоимость канала. Гнать поток в облако с удалённой площадки дорого, а на сотовом канале — неподъёмно.
- Приватность. Чем больше кадров покидает объект, тем шире периметр персональных данных.
- Зоопарк вендоров. Камеры и контроллеры доступа разных производителей не складываются в одну картину.
Задача, которую мы решали: не «показать больше видео», а сократить объём того, на что человек должен смотреть — до списка фактов, требующих решения.
02
Архитектура: три слоя вместо одного облака
Ошибка «всё в облако» ломается о физику: видеопоток — самый дорогой из возможных способов передать факт. Поэтому контур разделён на три слоя, и каждый решает свою задачу там, где это дешевле всего.
ОБЪЕКТ (EDGE) КАНАЛ ПЛАТФОРМА (облако/контур)
───────────────────────────── ────────── ───────────────────────────────
камеры ─► аппаратный декод события мультитенантное хранилище
детекция (NPU/GPU/CPU) ~сотни байт ─► AI-разбор смены (агенты)
журнал событий на диск вместо корреляция «видео + проход»
СКУД ─► локальные правила мегабит/с сводка, алерты, роли, аудит
│ │
└─ кадры и записи остаются на объекте └─ наружу — только обезличенное
- Edge — видит кадры, считает детекцию, хранит записи, работает автономно при обрыве связи.
- Шлюз событий — превращает поток детекций в поток фактов и гарантирует доставку.
- Платформа — сводит объекты и вендоров в одну картину, разбирает смену AI-конвейером, раздаёт роли, ведёт аудит и биллинг.
Правило слоя: вверх передаётся только то, что нельзя вычислить внизу. Кадр — самый низкий слой; смысл — самый верхний.
03
Edge: локальный инференс рядом с камерами
Слой Edge собран и замерен на трёх классах узлов. Класс выбирается не по паспортным TOPS, а по замеру сквозного пути на реальных потоках объекта — «декод → препроцессинг → инференс → постобработка».
| Класс узла |
Типовая роль |
Замеренная работа |
Когда выбираем |
x86-узел с аппаратным декодом 4 ядра · iGPU |
Объектовый NVR: группа камер, запись, детекция |
p95 31.8 мс на детектор, два параллельных воркера, 0 пропущенных кадров; видеодвижок GPU загружен на 3.3%, запись идёт копированием потока без перекодирования |
Есть серверная и питание; нужен архив на объекте |
SoC-плата с NPU ~1 TOPS 1 ядро · 180 МБ ОЗУ |
Автономная точка: одна камера, плохой канал, щиток или опора |
Лёгкая специализированная модель 26.6 мс (ограничитель — частота камеры), детектор общего назначения 88.5 мс ≈ 10 кадров/с; после ограничения частоты NPU-ноги загрузка ядра упала с 87% → 47% |
Нет места и питания под сервер; канал сотовый или спутниковый |
Edge-GPU модуль десятки TOPS · CUDA |
Тяжёлые модели: распознавание, эмбеддинги, поиск по архиву |
Сборка оптимизированных движков на самом устройстве, аттестация ускорителя fail-closed; узел отказывается стартовать, если GPU занят другой нагрузкой, вместо тихого отката на CPU |
Нужны сложные модели и семантический поиск на объекте |
Три инженерных вывода, которые экономят железо
- Дешевле всего — не декодировать лишнее. Суб-потоки камер были настроены на источнике на 5 кадров/с вместо штатных 15–25: декодер обязан развернуть кадр до того, как его отбросит фильтр частоты. Одна настройка на камере сократила декодирующую работу примерно втрое — без покупки ускорителя.
- Сенсор → NPU без декода. Там, где камера подключена к плате напрямую, кадр идёт из ISP в NPU, а показ обслуживает аппаратный энкодер. Декодирования нет нигде в контуре, и показ картинки не стоит процессорного времени.
- Резерв считается по пику, а не по среднему. Один детектор дал бы всего 1.6× запаса к наблюдённому пику движения, два — 3.3×. Экономия одного воркера стоила бы пропущенных кадров ровно в тот момент, ради которого система и стоит.
Грабли, оплаченные нами: стандартный протокол управления камерами у части бюджетных вендоров молча переписывал кодеки обоих потоков, продолжая рапортовать прежние значения. Лечение: работать вендорным каналом, сохранять весь объект настроек целиком, требовать точного обратного чтения и перезагружать камеры по одной с проверкой реального потока.
04
События вместо кадров: что уходит по каналу
Покадровые детекции хранить и передавать бессмысленно: на 15 кадрах в секунду это поток, а на платном канале — статья расходов. Между детектором и платформой стоит агрегатор, который сводит детекции к изменениям состояния: объект появился, сколько продержался, каким был пик.
-
Гистерезис в обе стороны
Появление подтверждается тремя подряд кадрами, исчезновение — тремя секундами отсутствия. Без первого один плохой кадр выдумывает событие; без второго мерцание детектора порождает очередь событий.
-
Сначала на диск, потом наружу
Событие пишется в локальный журнал до попытки отправки. Нет связи — данные остаются на устройстве; неотправленный хвост дотягивается по сохранённому смещению и переживает перезагрузку. Потери события при обрыве канала не происходит.
-
Резервный канал без ручного переключения
Интерфейс не форсируется: маршрутные метрики делают сотовую сеть автоматическим резервом проводного канала. Проверено снятием проводных маршрутов — событие ушло через сотовый интерфейс, и в самом событии зафиксировано, через какой линк оно доставлено.
-
Устройство не носит человеческий пароль
ГРАНИЦА ДОВЕРИЯ
Приём событий авторизуется отдельным токеном устройства, а не учётной записью оператора. Веб-интерфейс и приёмный эндпоинт разведены по разным механизмам аутентификации: компрометация платы на объекте не даёт доступа к консоли.
Что это меняет экономически: по каналу идут сотни байт на факт вместо мегабит в секунду на поток. Стоимость подключения удалённой площадки перестаёт зависеть от количества камер и начинает зависеть от количества событий.
05
Платформа: мультитенантность и AI-разбор смены
Верхний слой — мультитенантный SaaS: видео и события контроля доступа от площадок разных заказчиков сводятся в одну картину, где AI-агенты сами говорят оператору, что заслуживает внимания.
Изоляция данных — на уровне СУБД, а не приложения
- Схема на арендатора — данные каждого клиента живут в отдельной схеме базы.
- Роль на арендатора — приложение подключается служебной учёткой и переключает роль в каждой транзакции. Кросс-арендаторский запрос падает на правах СУБД, даже если в коде приложения ошибка.
- Адаптеры источников — камеры и контроллеры доступа разных вендоров подключаются через единый слой адаптеров, поэтому смена вендора не переписывает продукт.
Конвейер разбора: пять агентов, один результат
Ночной прогон превращает поток событий смены в отчёт: нормализация и дедупликация → поиск аномалий относительно семидневной базовой линии → сопоставление событий доступа с видеофрагментами в окне ±10 секунд → связный текст «что произошло за сутки» → предложения по эксплуатации (мёртвые камеры, перегруженные двери).
Приватность на границе модели
- Обезличивание до вызова. Идентификаторы карт, ФИО сотрудников, телефоны, почта и адреса заменяются устойчивыми метками до того, как данные покидают контур приложения.
- Внешняя модель никогда не получает исходные имена — это запрещено на уровне кода, а не инструкции. Локальная модель может работать с реальными именами ради качества текста.
- Аудит вызовов с ограниченным сроком хранения, шифрование секретов в базе, бюджет обращений на арендатора со ступенями предупреждения и блокировки, кэш ответов и автоматический размыкатель на отказавшем провайдере.
Проверка на злоупотребление: набор состязательных тестов на промпт-инъекции (скрытые символы, кодированные вставки, «забудь предыдущие инструкции») проверяет два инварианта — в ответе нет персональных данных и агент не выходит за пределы объявленных инструментов.
06
Приёмка: как мы отклоняем собственные гипотезы
Самая ценная часть кейса — не то, что мы внедрили, а то, что не внедрили. Мы проверяли гипотезу, что специализированная модель «человек / транспорт / велосипед» точнее и уместнее текущего лёгкого детектора.
- Собран приватный корпус из 32 реальных кадров объекта — по восемь с каждой камеры, с реальными срабатываниями.
- Текущая модель подтвердила 30 из 32 рамок. Кандидат в лучшей своей конфигурации — 20 из 32.
- Через штатный разборщик выхода кандидат дал 0 из 32: несовместимая раскладка выходного тензора, то есть требовался бы отдельный адаптер.
- Ускоренная квантованная версия кандидата оказалась быстрее своей же полной, но втрое медленнее текущей модели.
Решение: кандидат отклонён, продакшн не тронут. Правило приёмки зафиксировано: новая модель едет в прод, только если побеждает текущую на реальном пути через препроцессинг и разборщик продукта, на отложенной выборке «день / ночь / ИК / дождь», и отдельно проверена на ложные срабатывания.
Тот же принцип действует на слое ускорителей: узел не «пробует» GPU, а требует доказательства, что ускоритель реально инициализирован и модель загружена в него — иначе запуск отклоняется. Тихий откат на процессор запрещён: он превращает измеримую систему в непредсказуемую.
07
Эффект и честные границы применимости
Что даёт контур
- Реакция перестаёт зависеть от канала. Детекция локальная; авария связи не выключает наблюдение, а откладывает синхронизацию.
- Стоимость подключения площадки падает на порядок — по каналу идут события, а не видеопоток.
- Периметр персональных данных сужается. Кадры остаются на объекте, наружу уходит обезличенное описание факта.
- Оператор смотрит на список, а не на стену. Смена сворачивается в сводку с аномалиями и связками «проход ↔ видеофрагмент».
- Изоляция арендаторов доказуема — она держится на правах СУБД, а не на аккуратности разработчика.
- Железо подбирается замером. Три класса узлов покрывают объекты от одной камеры на опоре до серверной с архивом.
Чего мы не обещаем
- «AI видит всё» — не бывает. Модель ловит то, что подтверждено на вашем корпусе кадров в ваших условиях освещения и погоды. Без такой выборки любая цифра точности — маркетинг.
- TOPS в спецификации ≠ количество камер. Пропускная способность считается сквозным замером, а не арифметикой по паспорту ускорителя.
- Мы не заменяем ваш NVR и СКУД, а добавляем поверх слой смысла и единую картину по площадкам.
- Обещание = поставка. Если функция не прошла приёмку на ваших данных — она не попадает ни в прод, ни в презентацию.
Первый шаг обычно дешёвый: один объект, существующие камеры, узел на границе и две недели наблюдения — чтобы получить замеры на ваших потоках и понять, какой класс железа нужен, до закупки.