Камера ищет событие: почему точности на кадрах недостаточно
Система видеонаблюдения должна сообщить о событии один раз, а не прислать сотню одинаковых тревог. Перейдём от предсказаний на кадрах к эпизодам и посчитаем пропуски и ложные уведомления.
Что именно получает оператор
Камера проверяет, остаётся ли проход загромождённым. Детектор уверенно находит коробки на кадрах, но оператор жалуется на поток повторных сообщений. Кадровая метрика может быть высокой: на каждом кадре объект действительно есть. Операционная задача другая — вовремя заметить один эпизод и не отвлекать человека повторениями.
Зафиксируйте определение события: объект находится в заданной зоне не меньше нескольких секунд, соседние срабатывания с коротким перерывом объединяются, уведомление отправляется один раз. Эти параметры влияют на число тревог и задержку. Их надо выбирать вместе с владельцем процесса: короткое появление может быть допустимым действием сотрудника, а длительное — нарушением.
Для проверки разметьте интервалы событий в видео. Рядом сохраняйте интервалы тревог системы. Правило совпадения должно быть явным: например, тревога пересекается с событием и начинается не позже допустимой задержки. Одно событие сопоставляется максимум одной тревоге; остальные уведомления считаются дубликатами или ложными, в зависимости от принятого определения.
Объединим срабатывания в эпизоды
Покажем упрощённый расчёт: вход — секунды, в которые кадровая модель сработала. Срабатывания с разрывом не больше двух секунд объединяем. Истинные события заданы включёнными временными границами. Для этого учебного отчёта тревога считается полезной при любом пересечении с ещё не использованным событием.
Такой критерий нужно усилить для реальной приёмки: добавить минимальную длительность, задержку обнаружения и правила частичного пересечения. Сейчас задача примера — показать, как восемь кадровых срабатываний превращаются в три уведомления и как меняется единица подсчёта.
hits = [10, 11, 12, 14, 30, 31, 50, 51]
episodes = []
for second in hits:
if not episodes or second - episodes[-1][1] > 2:
episodes.append([second, second])
else:
episodes[-1][1] = second
truth = [(9, 15), (29, 33), (70, 75)]
used = set()
tp = 0
for start, end in episodes:
found = next((i for i, (a, b) in enumerate(truth)
if i not in used and max(start, a) <= min(end, b)), None)
if found is not None:
used.add(found)
tp += 1
fp, fn = len(episodes)-tp, len(truth)-tp
print("episodes:", episodes)
print("TP, FP, FN:", tp, fp, fn)
assert episodes == [[10, 14], [30, 31], [50, 51]]
assert (tp, fp, fn) == (2, 1, 1)
Получатся три эпизода: 10–14, 30–31 и 50–51. Первые два совпадут с событиями, третий окажется ложным. Событие 70–75 пропущено. В итоговом отчёте две полезные тревоги, одна ложная и один пропуск. Кадровая accuracy этих сведений не даёт.
Дальше измерьте задержку: для найденных событий вычтите время начала события из момента первого допустимого уведомления. Покажите не только среднее, но и медленные случаи. Короткие пропущенные события и долгие пропущенные события могут иметь разную цену; сохраните длительность рядом с каждым результатом.
Ложные тревоги удобно нормировать на часы работы камеры. Число кадров зависит от частоты выборки, поэтому «пять ложных кадров из тысячи» трудно связать с нагрузкой оператора. Две ложные тревоги на камеру в час понятнее для планирования смены. Считайте также дубликаты: объединение срабатываний может убрать лишние сообщения, не меняя сам детектор.
При настройке объединения не используйте финальное проверочное видео. Подберите интервалы на валидации, затем повторите полный сценарий на новых камерах и днях. Видеосистема включает детектор, временные правила и отправку события; качество конечного уведомления зависит от всей этой цепочки.
Для следующего шага пригодится разделение видео на обучение и проверку.
В платном курсе «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.
