AI видеонаблюдение на PyTorch — как развернуть нейросеть с задержкой 200 мс

Коротко (TL;DR)PyTorch + YOLOv8 на Jetson Orin Nano даёт 150-200ms задержку (8 камер, 5 FPS). Стартовая стоимость сервера ~300 тыс ₸. RTSP интеграция через OpenCV за 10 строк кода. Калибровка под Hikvision/Dahua/Axis/Uniview занимает 2-3 дня. Результат — real-time алерты вместо постфактум анализа.

Зачем 200 миллисекунд критичны

200 миллисекунд — это порог между превентивной охраной и постфактум анализом. 8-15 секунд задержки (как обещают многие облачные сервисы) означает что пожар или вторжение уже произошло. При 200 мс реагирование становится real-time: модель видит инцидент в момент начала события, и оператор может отреагировать на несколько секунд раньше.

Это критично для:

Подробнее о разнице между edge и cloud решениями читайте в статье Edge vs Cloud для AI видеоаналитики.

Выбор модели для real-time инференса

Главное правило: скорость > точность при условии точности ≥94%.

МодельFPS (Orin Nano)ТочностьРазмер
YOLOv8 nano32-38 FPS94.3% mAP3.2 MB
YOLOv8 small22-27 FPS96.9% mAP11.2 MB
EfficientNet-B018-22 FPS96.1% ImageNet21 MB
ViT base2-4 FPS97.8% ImageNet345 MB

Рекомендация: YOLOv8 small — оптимальный баланс скорости и точности для production. YOLOv8 nano используем для бюджетных вариантов с 1-2 камер на офисный ПК.

Архитектура Edge AI решения

Типовая схема для 8 камер (750 тыс ₸):

IP-камеры (Hikvision/Dahua/Axis/Uniview)
    ↓ RTSP @5-15 FPS
Jetson Orin Nano (280-350k ₸)
    ↓ YOLOv8 inference (150-200ms)
Event Database (SQLite/PostgreSQL)
    ↓
Cloud Dashboard + TG/Email alerts
    ↓
Operator + SKUD integration

Ключевые компоненты:

Альтернативный вариант — Cloud (AWS Lambda / GCP Cloud Run / Azure), но он обходится дороже (1-5$ за 1000 кадров) и имеет задержку 5-15 сек. Для критичных объектов нужен Edge.

Code snippet: базовая интеграция

import cv2
import torch
from ultralytics import YOLO
import time

# Загружаем модель (уже оптимизирована для Jetson)
model = YOLO('yolov8s-pytorch.pt').cuda()

# Подключаемся к RTSP камере (Hikvision example)
cap = cv2.VideoCapture('rtsp://admin:password@192.168.1.100:554/stream1')

# Сокращаем FPS для встраивания в 200ms window
cap.set(cv2.CAP_PROP_FPS, 5)

while True:
    t0 = time.perf_counter()
    ret, frame = cap.read()
    if not ret: continue

    # Инференс (основная часть задержки)
    results = model(frame, conf=0.65, imgsz=416)

    # Парсим результаты
    for box in results[0].boxes:
        x1, y1, x2, y2 = box.xyxy[0].cpu().numpy()
        conf = box.conf[0].item()
        cls = int(box.cls[0].item())
        label = model.names[cls]

        if conf > 0.8:  # Трешхолд алерта
            print(f"ALERT: {label} {conf:.2f}")
            # Send to TG, email, SKUD, etc.

    latency_ms = (time.perf_counter() - t0) * 1000
    print(f"Frame latency: {latency_ms:.1f}ms")

Типовое распределение задержки на Orin Nano:

Итого: 150-240ms в зависимости от размера фрейма и сети.

Калибровка под специфику объекта

После первого запуска модель работает с precision 92-94%. Для достижения 96%+ нужна калибровка:

  1. Сбор данных (3-5 дней) — снимаете 500-1000 примеров нормальной работы + инцидентов
  2. Разметка (3-5 дней) — LabelImg или CVAT, 3-5 часов работы
  3. Fine-tuning (1-2 дня) — 10-20 эпох на Jetson или в облаке
  4. Validation (1 день) — тестируете на новых данных

Итого: ~2-3 недели до production-ready модели. Но первый запуск уже даёт 92%+ точность и спасает от явных ошибок.

Интеграция с популярными камерами

Все IP-камеры работают через RTSP, но есть нюансы:

Тестирование RTSP потока через ffmpeg:

ffplay -rtsp_transport tcp rtsp://192.168.1.100:554/stream1

Если видео не потекло — IP камера недоступна, firewall, или RTSP отключен в настройках.

Развёртывание на Jetson Orin Nano — за 1 час

  1. Скачайте JetPack 6.0 (Ubuntu 22.04 + CUDA 12.2 + cuDNN) на microSD
  2. Установите PyTorch для ARM: pip install torch torchvision torchaudio
  3. Установите YOLOv8: pip install ultralytics
  4. Скопируйте скрипт выше в main.py
  5. Запустите: python3 main.py
  6. Подтвердите задержку < 250ms в консоли

Если видео не потекло — проверьте IP камеру ping, RTSP URL через ffplay.

Мониторинг и оптимизация

После запуска мониторьте:

Для мониторинга интегрируйтесь с AI Dashboard чтобы видеть метрики в реальном времени.

Когда cloud лучше, чем edge

Edge (Jetson) выбираем для:

Cloud выбираем для:

Частые вопросы

Какой GPU нужен для 200ms задержки на 8 камерах?+
Jetson Orin Nano (8-ядро, 8GB RAM, 128GB storage) справляется с 8 камерами × 5 FPS при задержке ~150-200ms. Стоит в Казахстане около 280-350 тыс ₸. Для 16+ камер нужен Jetson Orin NX или Orin AGX.
Какую модель выбрать — YOLOv8, EfficientNet или ViT?+
Для real-time 200ms: YOLOv8 nano/small оптимален (38-47ms per frame на Orin). EfficientNet медленнее (80-150ms). ViT слишком тяжёлый. Рекомендуем YOLOv8 + custom fine-tune под вашу специфику (smoke, fire, intrusion).
Можно ли запустить на обычном CPU?+
Теоретически да, но 200ms недостижимо. Intel i9 12-gen даёт ~800-1200ms на одну камеру. GPU — обязателен. Бюджетный вариант — Nvidia T4 в облаке (0.35$/hour на AWS) или локальный Jetson.
Как интегрировать RTSP от Hikvision/Dahua?+
OpenCV + ffmpeg: cv2.VideoCapture('rtsp://192.168.1.100:554/stream1'). Тестируйте задержку через time.perf_counter() в начале и конце frame processing. Добавьте буферизацию (fps=5 вместо 25) если задержка растёт.