Video Analytics System for Security

We design and deploy artificial intelligence systems: from prototype to production-ready solutions. Our team combines expertise in machine learning, data engineering and MLOps to make AI work not in the lab, but in real business.
Showing 1 of 1 servicesAll 1566 services
Video Analytics System for Security
Complex
~1-2 weeks
FAQ
AI Development Areas
AI Solution Development Stages
Latest works
  • image_web-applications_feedme_466_0.webp
    Development of a web application for FEEDME
    1161
  • image_ecommerce_furnoro_435_0.webp
    Development of an online store for the company FURNORO
    1041
  • image_logo-advance_0.png
    B2B Advance company logo design
    561
  • image_crm_enviok_479_0.webp
    Development of a web application for Enviok
    823
  • image_logo-aider_0.jpg
    AIDER company logo development
    762
  • image_crm_chasseurs_493_0.webp
    CRM development for Chasseurs
    848

System Development видеоаналитики для безопасности

Видеоаналитика для безопасности — это не запись видео для последующего ручного просмотра, а автоматический анализ потока в реальном времени с генерацией оповещений при значимых событиях. Разрыв между системой «камеры пишут на NVR» и «камеры анализируют и сигнализируют» — это переход к Active Security.

Architecture системы видеоаналитики

IP Cameras (RTSP)
    ↓
Stream Ingestion Layer (GStreamer/FFmpeg)
    ↓
AI Analytics Engine (GPU Cluster)
    ├── Object Detection (YOLOv8)
    ├── Object Tracking (ByteTrack)
    ├── Event Detection (Rules Engine)
    └── Behavior Analysis (ML Models)
    ↓
Event Processing (Kafka/Redis Streams)
    ↓
Alert & Response System
    ├── Security Dashboard
    ├── Mobile Notifications
    ├── Guard Dispatch
    └── Access Control Integration
from ultralytics import YOLO
import numpy as np
from dataclasses import dataclass, field

@dataclass
class SecurityEvent:
    event_type: str
    camera_id: str
    timestamp: str
    confidence: float
    bbox: list
    track_id: int | None = None
    metadata: dict = field(default_factory=dict)

class SecurityAnalyticsEngine:
    def __init__(self, camera_id: str, config: dict):
        self.camera_id = camera_id
        self.detector = YOLO(config['model_path'])
        self.tracker = config['tracker']
        self.event_rules = config['event_rules']
        self.zones = config['security_zones']

    def process_frame(self, frame: np.ndarray,
                       timestamp: str) -> list[SecurityEvent]:
        # Детекция и трекинг
        detections = self.detector(frame, conf=0.5, classes=[0])  # person only
        tracks = self.tracker.update(detections[0])

        events = []
        for track in tracks:
            # Проверка зон
            for zone_name, zone_polygon in self.zones.items():
                if self._in_zone(track.center, zone_polygon):
                    rule_result = self.event_rules.check(
                        zone_name, track, timestamp
                    )
                    if rule_result.triggered:
                        events.append(SecurityEvent(
                            event_type=rule_result.event_type,
                            camera_id=self.camera_id,
                            timestamp=timestamp,
                            confidence=rule_result.confidence,
                            bbox=track.bbox,
                            track_id=track.track_id,
                            metadata=rule_result.metadata
                        ))

        return events

Детектируемые события

Событие Метод Точность
Вторжение в запретную зону Детекция + геозона 94–98%
Оставленный предмет Детекция + temporal 88–93%
Скопление людей Плотность + порог 91–96%
Падение человека Action recognition 87–93%
Бегущий человек Скорость трека 92–96%
Драка/агрессивное поведение Behavior detection 78–86%
Несанкционированный доступ Face recognition 95–99%

Система зон безопасности

class SecurityZone:
    def __init__(self, name: str, polygon: list, rules: dict):
        self.name = name
        self.polygon = np.array(polygon, dtype=np.int32)
        self.rules = rules  # time-based rules, allowed persons, etc.

    def is_point_inside(self, point: tuple) -> bool:
        return cv2.pointPolygonTest(
            self.polygon,
            (float(point[0]), float(point[1])),
            False
        ) >= 0

    def is_allowed(self, track_id: int, timestamp: str) -> bool:
        """Проверка по расписанию и whitelist"""
        if not self.rules.get('time_restricted'):
            return True

        current_hour = int(timestamp.split(':')[0])
        allowed_hours = self.rules.get('allowed_hours', range(8, 18))

        if current_hour not in allowed_hours:
            return False

        if self.rules.get('whitelist_only'):
            return track_id in self.rules.get('whitelist', set())

        return True

Масштабирование: обработка 100+ камер

Одна A100 GPU обрабатывает ~32 потока 1080p@30fps с YOLOv8n. Для 100+ камер — GPU кластер с балансировкой нагрузки:

class CameraLoadBalancer:
    def __init__(self, gpu_workers: list):
        self.workers = gpu_workers
        self.camera_assignments = {}

    def assign_camera(self, camera_id: str) -> str:
        """Round-robin с учётом нагрузки"""
        least_loaded = min(self.workers, key=lambda w: w.load)
        self.camera_assignments[camera_id] = least_loaded
        return least_loaded.worker_id

Integration с физической охраной

  • PSIM (Physical Security Information Management): централизованное управление всеми системами безопасности
  • VMS (Video Management System): хранение видео с возможностью криминалистического поиска по атрибутам
  • Access Control: автоматическая блокировка дверей при тревоге
Масштаб системы Срок
До 16 камер, базовые события 6–8 недель
16–64 камеры, продвинутая аналитика 10–16 недель
Enterprise 100+ камер 18–28 недель