Уявіть: серверна кімната банку, 3:00 ночі. Камера фіксує рух – система піднімає тривогу, охорона виїжджає, а це лише пакет, що впав з полиці. На об'єкті з 20 камерами до 30% усіх тривог — хибні. Оператори звикають ігнорувати попередження, і реальне вторгнення залишається непоміченим. Кожне таке хибне спрацьовування — потенційний збиток або адміністративні штрафи. Ми вирішуємо цю проблему дворівневою архітектурою детекції, яка відсіває 90% порожніх кадрів і дає recall >95% при <1 хибній тривозі на годину на камеру. Нижче розберемо технічні деталі.
Як дворівнева архітектура відсіває 90% порожніх кадрів?
Перший рівень — motion pre-filter на основі background subtractor MOG2. Він швидший за нейромережу — latency <5 мс на кадр. Якщо motion_level нижче порогу (0.001), кадр пропускається: ML-інференс не запускається. Це економить GPU — навантаження падає в 3-5 разів. Другий рівень — YOLO детекція з фільтрацією за зоною.
import cv2 import numpy as np from ultralytics import YOLO class IntrusionDetector: def __init__(self, model_path: str, zone_polygon: list, sensitivity: str = 'medium'): self.detector = YOLO(model_path) self.zone = np.array(zone_polygon, dtype=np.int32) self.bg_subtractor = cv2.createBackgroundSubtractorMOG2( history=500, varThreshold=16, detectShadows=True ) self.conf_thresholds = {'low': 0.7, 'medium': 0.5, 'high': 0.3} self.conf = self.conf_thresholds[sensitivity] self.confirmed_tracks = {} self.confirmation_frames = 3 def detect(self, frame: np.ndarray) -> dict: result = {'intrusion_detected': False, 'intruders': [], 'motion_level': 0.0} fg_mask = self.bg_subtractor.apply(frame) fg_mask[fg_mask == 127] = 0 motion_level = float(fg_mask.sum()) / (frame.shape[0] * frame.shape[1]) result['motion_level'] = motion_level if motion_level < 0.001: return result detections = self.detector(frame, conf=self.conf, classes=[0,2,3,5,7]) for box in detections[0].boxes: x1,y1,x2,y2 = map(int, box.xyxy[0]) cx,cy = (x1+x2)//2, (y1+y2)//2 in_zone = cv2.pointPolygonTest(self.zone, (float(cx),float(cy)), False) >=0 if in_zone: result['intruders'].append({ 'class': self.detector.model.names[int(box.cls)], 'confidence': float(box.conf), 'bbox': [x1,y1,x2,y2], 'center': (cx,cy) }) if result['intruders']: result['intrusion_detected'] = True return result Такий підхід дозволяє задіяти нейромережу тільки на кадрах з рухом. На практиці це знижує навантаження на GPU з 100% до 20–30%, що особливо важливо при паралельній обробці 8–16 камер на одному сервері.
Чому фільтрація за площею та підтвердженням кадрів знижує false alarm до <1?
Хибні спрацьовування найчастіше викликані дрібними тваринами, листям, що падає, або тінями. Для їх відсіву застосовуються два фільтри. Перший — мінімальна площа bounding box (2000 пікселів): об'єкти менші за цю площу не вважаються вторгненням. Другий — підтвердження на 3 послідовних кадрах: якщо об'єкт зник на наступному кадрі, тривога не піднімається.
class FalsePositiveFilter: def __init__(self): self.event_buffer = [] self.cooldown_seconds = 30 def should_trigger_alarm(self, intrusion_event: dict, current_time: float) -> bool: for intruder in intrusion_event.get('intruders', []): x1,y1,x2,y2 = intruder['bbox'] area = (x2-x1)*(y2-y1) if area < 2000: return False if self.event_buffer: last_event_time = self.event_buffer[-1] if current_time - last_event_time < self.cooldown_seconds: return False self.event_buffer.append(current_time) self.event_buffer = self.event_buffer[-10:] return True Така комбінація дає стабільно низький false alarm rate — менше 1 хибної тривоги на годину на камеру при збереженні recall >95%.
Налаштування мультизонної конфігурації з розкладом та whitelist
Кожна зона описується полігоном з параметрами alert_level (warning/critical), schedule (always/after_hours) та списком allowed_persons. Наприклад, серверна кімната може бути налаштована як critical, активна лише в неробочий час та ігнорувати авторизованих співробітників.
zones_config = { 'perimeter': { 'polygon': [[0,300],[1920,300],[1920,1080],[0,1080]], 'alert_level': 'warning', 'schedule': 'always' }, 'server_room': { 'polygon': [[500,200],[900,200],[900,600],[500,600]], 'alert_level': 'critical', 'schedule': 'after_hours', 'allowed_persons': ['id_001', 'id_002'] } } Така гнучкість дозволяє налаштувати систему під будь-які сценарії: від периметра з низьким пріоритетом до критичних зон з whitelist співробітників.
Робота в темний час доби: ІЧ та тепловізори
Стандартні RGB-камери непридатні для детекції в повній темряві. Рішення — використання ІЧ-підсвітки (850/940 нм) з донавченою моделлю на ІЧ-кадрах або теплових камер (FLIR, Axis). Комбінація RGB та теплового каналу дає найкращий результат: detection rate 90–94% при нульовій освітленості.
| Метрика | Типове значення |
|---|---|
| Detection Rate (recall) | 95–98% |
| False Alarm Rate | < 2 на годину (хороші умови) |
| Latency до тривоги | < 2 секунди |
| Робота в темряві (ІЧ) | 90–94% DR |
| Масштаб | Термін впровадження |
|---|---|
| 1–4 камери, прості зони | 2–3 тижні |
| 8–20 камер, складні зони + розклад | 4–7 тижнів |
| 50+ камер, інтеграція з PSIM | 10–16 тижнів |
Що входить в роботу
- Документація: схема архітектури, конфіги зон, інструкція оператора.
- Доступи: до репозиторію з кодом, дашборду метрик, REST API для інтеграції.
- Навчання: 2-годинний вебінар для охорони та адміністраторів.
- Підтримка: 3 місяці безкоштовного супроводу з реакцією на інциденти протягом 24 годин.
Процес впровадження: від аудиту до підтримки
- Аналітика об'єкта. Візит інженера, заміри освітленості, розташування камер, складання карти зон.
- Проектування. Вибір архітектури (single-server vs distributed), підготовка конфігів.
- Розробка. Кастомізація моделі YOLOv8 на ваших кадрах (RGB, ІЧ, тепло). Додаємо data augmentation: ніч, туман, дощ.
- Інтеграція. Підключення до існуючої системи відеоспостереження та PSIM.
- Тестування. Прогін сценаріїв: реальні вторгнення, перешкоди, замір recall та false alarm rate.
- Документація та навчання. Інструкція для операторів, передача коду та конфігурацій.
- Підтримка. 3 місяці безкоштовного супроводу з реакцією на інциденти протягом 24 годин.
На кожному етапі ви отримуєте звіт та демонстрацію результатів.
Приклад розрахунку економії
При 10 хибних тривогах на день оператор витрачає по 5 хвилин на перевірку — 30 годин на місяць. При ставці оператора $360–520./міс. економія за рахунок скорочення хибних спрацьовувань становить понад $1.4k–1.9k. на рік. На системі з 20 камерами впровадження окупається за 4–6 місяців.Забезпечення стабільної точності: трекінг та data augmentation
Щоб система не втрачала ціль при тимчасових перекриттях, використовується трекінг об'єктів на основі алгоритму SORT. Додатково кожна модель проходить навчання з аугментацією: нічні кадри, туман, дощ, відблиски. Це гарантує стабільну роботу в будь-яких погодних умовах та часі доби. Наша команда має 5+ років досвіду в Computer Vision та реалізувала понад 30 проєктів відеоаналітики різної складності.
Отримайте консультацію по вашому об'єкту – наші інженери підберуть оптимальне рішення. Замовте пілотний проєкт на 2 камери та переконайтеся в ефективності технології. Зв'яжіться з нами для детального аудиту.







