13.04.2026
Видеоаналитика, которая реально работает: как мы перестали просматривать терабайты записей вручную
8000 знаков боли, бессонных ночей и одной победы
Знаете, что общего между начальником службы безопасности торгового центра, владельцем парковки и системным администратором на заводе? Они тратят часы, а иногда и дни, на ручной просмотр архивов видеонаблюдения. «Прокрути вот этот отрезок с 14:00 до 16:00», — говорит следователь. И ты сидишь, всматриваясь в пиксели, пока глаза не начинают слезиться. А если камер 20? 50? Терабайты записей, которые физически невозможно просмотреть целиком.
Мы оказались в той же лодке. Заказчик попросил систему, которая сама найдёт момент, когда определённый автомобиль пересек границу периметра, и покажет лицо водителя. Без дорогих GPU, без ежемесячных платежей за облачные сервисы. И, главное, чтобы оператор потом мог щёлкнуть мышкой — и сразу оказаться в нужной секунде видео.
И мы сделали это. Не «лучшее решение на рынке», а работающий инструмент, который собрали из open-source кирпичиков, обожгли в Docker и запустили на обычном процессоре.
Почему готовые системы — это компромисс, а не решение
Большинство коммерческих VMS (видеоменеджеров) предлагают аналитику как платный модуль. За 20 камер — 2000 долларов в год. За распознавание номеров — ещё столько же. А если нужно ещё и лица детектировать— готовьте третий чек.
Мы пошли другим путём. Не потому, что жадные. Потому что хотели, чтобы система работала на любом сервере, не привязывала клиента к подписке и не требовала покупки NVIDIA GPU за 1000+ долларов только для того, чтобы запустить нейросеть.
Результат: система видеоаналитики, которая работает на CPU Intel Xeon или Core i7, обрабатывает видео1920x1080 в темпе 3-5 кадров в секунду, детектирует людей и автомобили, распознаёт российские госномера и запоминает, когда каждый объект появился в кадре. Всё это в Docker-контейнере, который разворачивается за 10 минут.
Технологии, которые мы собрали в один пайплайн
Мы не изобретали велосипед. Мы взяли лучшее из мира open-source и заставили это работать вместе на CPU.
RTMDetот OpenMMLab — детекция без GPU
Обычно все хватаются за YOLO. Но лицензия AGPL-3.0 —это ловушка для бизнеса: вы обязаны открыть код своего продукта, если используете YOLO в коммерческой системе. Мы выбрали RTMDet под лицензией Apache 2.0.Модель выдаёт 41-53% mAP на COCO, весит от 4.9до 94.9 млн параметров и работает на CPU со скоростью 10-15 мс на кадр.
ByteTrack— трекинг, который не теряет объекты
Обычные алгоритмы отбрасывают объекты с низкой уверенностью. ByteTrack использует почти все обнаружения, благодаря чему человек, который на секунду скрылся за колонной, не теряет свой ID. Алгоритм работает на CPU и требует минимум настроек.
EasyOCR— распознавание номеров без API
Никаких внешних сервисов. Модель скачивается один раз и работает локально. Мы обучили её на русских и английских символах. Даже на CPU распознавание одного номера занимает 0.5 -1 секунду. А если номер нечитаемый — система просто пропускает его, не создавая ложных срабатываний.
ByteTrack+ RTMDet в одном пайплайне
Самое сложное было подружить эти компоненты. RTMDet возвращает bounding boxes. ByteTrack ожидает детекции в формате [x1, y1, x2, y2, score]. Мы написали прослойку, которая конвертирует результаты, обновляет трекер и возвращает объекты с уникальными ID. Всё это — водном Python-скрипте без лишних зависимостей.
Чего мы добились на реальных видео
Мы тестировали систему на записях с уличных камер: 60 FPS, 1280x720, переменное освещение.
-
Точность детекци и людей: 87%при пороге 0.4
-
Точность распознавания номеров: 76%на чётких кадрах (в лоб, без сильного наклона)
-
Ускорение поиска: с 15 минут ручного просмотра до 20 секунд в интерфейсе
-
Нагрузка на CPU: 60-80% на одном ядре Intel Xeon при обработке 3кадров в секунду
И главное: оператор больше не смотрит архив целиком. Он открывает веб-интерфейс, видит таблицу с ID, таймкодами и превью лиц, кликает на нужное — и видео перематывается ровно на момент появления человека или автомобиля.
Интерфейс, который не требует обучения
Мы написали фронтенд на Streamlit. Не потому, что это «модно», а потому что это позволяет добавить веб-интерфейс к любому Python-скрипту за пару часов.
Что видит оператор:
-
Видеоплеер с рамками вокруг людей (зелёные) и автомобилей (синие). Над каждым объектом— его ID (P1, P2 для людей, C1, C2 для машин).
-
Горизонтальный скролл с превью для каждого человека и автомобиля. Под превью — таймкод первого появления и распознанный номер, если удалось.
-
Клик по превью —видео перематывается на нужный момент и автоматически запускается.
-
Таблица автомобилей с распознанными номерами — для быстрого поиска.
Всё в одном окне. Без переключения между вкладками. Без сложных фильтров.
Docker, который скрывает весь ад с зависимостями
Знаете, сколько времени мы потратили на то, чтобы подружить PyTorch (CPU-версия), MMDetection, EasyOCR и ByteTrack в одном окружении? Две недели. Конфликты версий NumPy, несовместимость OpenCV с разными кодеками, ошибки SSL при скачивании моделей из-за корпоративных прокси — мы прошли через всё.
В итоге система упакована в Docker-образ на основе python:3.10-slim. Внутри:
-
Установлен PyTorch CPU
-
Собраны MMDetection, MMCV, MMEngine
-
Загружены веса RTMDet-tiny
-
Установлены EasyOCR, ByteTrack, Streamlit
-
Прописаны переменные окружения для отключения GPU
Чтобы развернуть систему на новом сервере, нужно выполнить три команды:
bash
docker pull ваш_образ docker run -d -p 8501:8501 -v /путь/к/видео:/workspace/data ваш_образ
Всё. Никаких pip install, никаких компиляций OpenCV, никаких танцев с CUDA.
Анонимизация — потому что закон
GDPR и российское законодательство требуют скрывать лица и номера при публикации записей. Мы добавили в пайплайн детекцию лиц через MediaPipe (BlazeFace) и автоматическое размытие. В финальном отчёте вы получаете превью лиц, но исходные кадры в архиве — с заблюренными зонами. Система не хранит открытые лица дольше, чем нужно для обработки.
Цифры, в которые вы можете поверить
Потому что мы их замерили на своём железе.
|
Характеристика |
Значение |
|---|---|
| Обработка видео
|
3 - 5FPS на Intel Xeon (один поток)
|
| Память контейнера
|
4 - 6ГБ
|
| Размер Docker-образа
|
7.7ГБ
|
| Точность распознавания номеров
|
76% (при разрешении номера > 40x100 пикселей)
|
| Задержка при клике на превью
|
<100 мс (перемотка в браузере)
|
| Стоимость владения
|
0 рублей за лицензии (всё open-source)
|
Что мы не стали делать (и почему)
Не стали использовать GPU. Потому что заказчик отказался покупать NVIDIATesla за 3000 долларов. CPU-решение работает медленнее, но оно разворачивается на любом сервере.
Не стали внедрять распознавание лиц. Потому что это требует высокой точности и больших вычислительных ресурсов. Для 95% задач видеоаналитики достаточно детекции лиц для анонимизации.
Не стали писать свой трекер. ByteTrackуже решает задачу устойчивого присвоения ID. А если объект теряется на 30 кадров — он получит новый ID. Это допустимо для большинства сценариев.
Вопросы, которые нам задают до сих пор
Как внедрить эту систему на объекте, где уже стоят камеры Hikvision/Dahua?
Скрипт работает с любым видеофайлом. Вы можете экспортировать записи с регистратора в MP4 и скормить системе. В реальном времени мы пока не обрабатываем — только архивы.
А если номер распознался неверно?
Можно отредактировать JSON - отчёт вручную. Или переобучить EasyOCR на специфических номерах (например, грузовых или военных).
Почему вы не используете YOLO?
AGPL - 3.0. Мы не хотим открывать код коммерческой системы. RTMDet под Apache 2.0 даёт ту же точность и не требует отдавать наработки.
Сколько времени занимает обработка одного часа видео?
На CPU — около 20 минут реального времени(при 3 FPS). Это не «live», но для архивов — терпимо.
Можно ли обрабатывать несколько камер одновременно?
Да. Запустите несколько контейнеров на разных портах или используйте Docker Compose с масштабированием сервиса.
Вы отдаёте исходный код?
Да. Всё, кроме кастомных скриптов интеграции,— open-source. Вы можете форкнуть репозиторий, доработать под свои задачи и использовать без ограничений.
Часто задаваемые вопросы
Как система определяет, что лицо качественное, а не смазанное?
Мы оцениваем площадь области лица в пикселях. Чем больше лицо, тем выше вероятность, что его можно использовать для идентификации. Это примитивный, но эффективный метод для видеонаблюдения.
Что делать, если видео повреждено или имеет нестандартный кодек?
Контейнер включает FFmpeg с поддержкой большинства кодеков. Если OpenCV не может прочитать файл, система выдаст ошибку и остановится. В этом случае рекомендуем перекодировать видео в H.264 через FFmpeg перед загрузкой.
Почему трекер иногда присваивает человеку новый ID после перекрытия?
ByteTrack хранит трек в буфере 30 кадров. Если объект скрыт дольше — он считается потерянным. Это поведение можно изменить параметром track_buffer в конфиге. Но увеличение буфера замедляет работу и повышает шанс ошибочной склейки разных людей.
Можно ли использовать систему для подсчёта людей в магазине?
Да. Каждый уникальный ID в отчёте — это один человек. Но учтите: если человек выходит из кадра и заходит снова через минуту, система посчитает его дважды. Для точного подсчёта нужна калибровка зон интереса (мы это пока не реализовали).
Как часто нужно обновлять модели детекции?
RTMDet обучен на датасете COCO, который включает типовые сцены: улицы, магазины, офисы. Если ваша камера смотрит на склад с нестандартным освещением или ракурсом, лучше дообучить модель на своих данных. Мы можем это сделать за отдельную плату.
Система работает в реальном времени или только по архивам?
Сейчас— только по архивным файлам. Но ничто не мешает подавать на вход RTSP-поток с камеры и обрабатывать его в реальном времени. Вопрос в производительности: на CPU вы получите 3-5 кадров в секунду, что для многих задач достаточно. Для 25FPS понадобится GPU.
Вместо заключения
Мы не продаём «лучшую систему видеоаналитики». Мы предлагаем рабочий инструмент, который решил нашу конкретную проблему: перестать тратить часы на ручной просмотр записей. Если у вас такая же боль —попробуйте. Docker-образ собирается за 10минут, интерфейс запускается одной командой, а экономия времени будет заметна после первого же клика по превью.
И да, мы открыты к доработкам. Нужно распознавание лиц? Добавим. Хотите обрабатывать RTSP в реальном времени? Сделаем. Только позовите.

