CV на камерах: как выбрать место обработки и проверить запуск
Детектор хорошо работает на записанном видео. Теперь его хотят подключить к двенадцати камерам в магазине. Возникает другой вопрос: где декодировать поток, сколько кадров обрабатывать и что произойдёт при потере сети. До покупки оборудования полезно составить маршрут одного кадра и проверить, какое звено ограничит всю систему.
Начните с события и его срока
Камера снимает двадцать пять кадров в секунду, но это ещё не требование запускать модель двадцать пять раз. Для проверки заполненности полки иногда достаточно редкой выборки. Для короткого события у кассы такой режим может пропустить нужный момент. Частоту обработки выбирают по длительности события и проверяют на размеченном видео с той же выборкой кадров.
Укажите максимальный срок уведомления: от появления события до получения сигнала оператором. В него входят ожидание очередного кадра, декодирование, подготовка, модель, постобработка и отправка. Отдельно определите поведение при устаревшем кадре. Система, которая после перегрузки усердно распознаёт минутную историю, может выдавать точные, но уже бесполезные предупреждения.
Посчитайте минимальную нагрузку
Допустим, для выбранного процесса проверено пять обрабатываемых кадров в секунду на каждую из двенадцати камер. Нужны шестьдесят кадров в секунду. Испытанный полный обработчик на выбранном устройстве даёт сорок пять. Для планирования оставим тридцать процентов его производительности свободными. Это договорённый запас сценария, который затем уточнят испытания.
from math import ceil
cameras, selected_fps = 12, 5
measured_fps, reserve = 45, 0.30
per_device_budget = measured_fps * (1 - reserve)
required_fps = cameras * selected_fps
devices = ceil(required_fps / per_device_budget)
camera_mbps = 4
print("required_fps", required_fps, "devices", devices)
print("input_mbps", cameras * camera_mbps)
assert devices == 2 and required_fps == 60Получаются два устройства при распределяемой нагрузке: одно не покрывает выбранный запас. Суммарный поток сжатого видео составляет сорок восемь мегабит в секунду при четырёх мегабитах на камеру. Выбор пяти кадров для модели сам по себе не уменьшает этот трафик: если сервер получает полный поток, сеть продолжает передавать все закодированные кадры.
Проверьте, что исходные сорок пять кадров измерены вместе с декодированием и подготовкой, а не только вызовом модели на готовом тензоре. Производительность нескольких камер может ограничивать декодер, память или копирование. Если модель использует пакет кадров, измеряйте также время ожидания его заполнения. Большая пропускная способность не обязательно даёт приемлемый срок уведомления.
Разместите вычисления по ограничениям
Обработка рядом с камерами уменьшает необходимость отправлять полный видеопоток за пределы площадки. Она полезна при нестабильной внешней сети и требованиях к локальному хранению. Однако устройства нужно обновлять, обслуживать и заменять в нескольких местах. Для этого заранее назначают владельца, способ удалённой диагностики и процедуру восстановления.
Центральный сервер позволяет делить ресурсы между камерами и обслуживать меньше узлов. Ему нужна сеть с достаточной пропускной способностью и понятным поведением при обрывах. Для сравнения посчитайте не только ускорители, но и передачу видео, хранение, выезды и резервирование. Местом вычисления может стать и локальный сервер магазина: выбор шире, чем только камера или облако.
При использовании OpenVINO режимы производительности для задержки и пропускной способности решают разные задачи. Сначала задайте требование своего процесса, затем сравнивайте настройки на целевой машине. Название режима не заменяет измерения полного видеомаршрута.
Испытайте неприятные случаи
Подключайте все камеры одновременно и используйте характерную сцену: ночь, движение людей, изменение освещения. Сохраняйте время получения кадра, завершения обработки и доставки события. Рядом нужны число отброшенных кадров и размер очереди по камерам. Иначе одна активная камера займёт систему, а средний результат скроет молчащий поток.
Затем кратко оборвите связь на тестовом контуре. Определите заранее, будет ли система догонять историю или переходить к свежему кадру. Для текущего предупреждения полезнее свежий кадр; для расследования важна сохранённая запись. Эти задачи можно обслуживать разными путями. После восстановления проверьте отсутствие повторных уведомлений об одном событии.
Что принимают перед расширением
В акте пилота сохраните число камер, настройки потока, частоту выборки, версии модели и постобработки, конфигурацию машины и результаты испытаний. Качество событий считайте на видео, прошедшем фактический маршрут. Экспорт, уменьшение разрешения и пропуск кадров могут изменить его даже при прежних весах модели.
Расширение на следующую площадку начинается с проверки её камер, сети и условий съёмки. Если они отличаются, прежняя цифра производительности становится гипотезой для нового теста. Так команда покупает оборудование под проверенное действие оператора, а не под красивое время инференса одного кадра.
Следующий шаг в практике
В Computer Vision Engineer вы работаете с видеопотоками и трекингом, экспортом в ONNX, TensorRT и OpenVINO, ускорением инференса и контролем задержки и стоимости. Следующий шаг — собрать CV-сервис и измерить весь путь на своей конфигурации, сохранив отчёт качества и ресурсов. Откройте программу платного курса «Computer Vision Engineer: от детекции и Doc-AI до продакшна».
Связанный разбор: как принимать результат по событиям, а не кадрам.
Продолжить на практике
- Computer Vision Engineer: от детекции и Doc-AI до продакшна ↗
Практический курс по Computer Vision. Соберёте продакшн-сервис: датасет → обучение (YOLO/RT-DETR, SAM), трекинг, OCR/Doc-AI, веб-приложение (UI+API) и мониторинг. Экспорт в ONNX/TensorRT/OpenVINO, батчинг/квантование под CPU/GPU. Плюс профессиональные блоки: mAP/IoU/Dice и калибровка доверия, QA разметки и аугментации, p95/стоимость, дрейф данных и алерты, guardrails (NMS/правила), A/B-тесты, Triton/gRPC/FastAPI.
