AI видеонаблюдение на PyTorch — как развернуть нейросеть с задержкой 200 мс
Зачем 200 миллисекунд критичны
200 миллисекунд — это порог между превентивной охраной и постфактум анализом. 8-15 секунд задержки (как обещают многие облачные сервисы) означает что пожар или вторжение уже произошло. При 200 мс реагирование становится real-time: модель видит инцидент в момент начала события, и оператор может отреагировать на несколько секунд раньше.
Это критично для:
- Fire Detection — каждая секунда экономит м² выгоревшего здания
- Intrusion Detection — поймать воров в момент попытки входа
- Shelf Monitoring — заметить кражу товара сразу
- Retail Analytics — отследить аномалию в очереди до её разрастания
Подробнее о разнице между edge и cloud решениями читайте в статье Edge vs Cloud для AI видеоаналитики.
Выбор модели для real-time инференса
Главное правило: скорость > точность при условии точности ≥94%.
| Модель | FPS (Orin Nano) | Точность | Размер |
|---|---|---|---|
| YOLOv8 nano | 32-38 FPS | 94.3% mAP | 3.2 MB |
| YOLOv8 small | 22-27 FPS | 96.9% mAP | 11.2 MB |
| EfficientNet-B0 | 18-22 FPS | 96.1% ImageNet | 21 MB |
| ViT base | 2-4 FPS | 97.8% ImageNet | 345 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Ключевые компоненты:
- Jetson Orin Nano — 8-ядерный ARM CPU, 8GB CUDA-capable VRAM, 128GB NVMe. Потребление ~15W.
- IP-камеры — любые с RTSP (Hikvision DS-2CD2T47G2-L от 45k ₸, Dahua IPC-HFW2431S-S-0280B от 38k ₸).
- PoE Injectors — 4-8 портовые для питания камер (от 15k ₸).
- 1U Rackmount (опция) — для датацентра (30k ₸).
Альтернативный вариант — 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:
- RTSP read: 30-50ms
- YOLOv8 inference: 80-120ms
- Post-processing + alert: 10-20ms
- Network I/O (TG/email): 20-50ms
Итого: 150-240ms в зависимости от размера фрейма и сети.
Калибровка под специфику объекта
После первого запуска модель работает с precision 92-94%. Для достижения 96%+ нужна калибровка:
- Сбор данных (3-5 дней) — снимаете 500-1000 примеров нормальной работы + инцидентов
- Разметка (3-5 дней) — LabelImg или CVAT, 3-5 часов работы
- Fine-tuning (1-2 дня) — 10-20 эпох на Jetson или в облаке
- Validation (1 день) — тестируете на новых данных
Итого: ~2-3 недели до production-ready модели. Но первый запуск уже даёт 92%+ точность и спасает от явных ошибок.
Интеграция с популярными камерами
Все IP-камеры работают через RTSP, но есть нюансы:
- Hikvision — default username/password иногда locked по IP. Используйте hikvision-tools для сброса.
- Dahua — поддерживает RTSP, но может требовать сертификат для RTSP/SSL. Отключите SSL если есть проблемы.
- Axis — самые надёжные, чистый RTSP, поддержка analytics API (запросите у Axis по контракту).
- Uniview — бюджетные, RTSP работает стабильно, но документация скудная.
Тестирование RTSP потока через ffmpeg:
ffplay -rtsp_transport tcp rtsp://192.168.1.100:554/stream1
Если видео не потекло — IP камера недоступна, firewall, или RTSP отключен в настройках.
Развёртывание на Jetson Orin Nano — за 1 час
- Скачайте JetPack 6.0 (Ubuntu 22.04 + CUDA 12.2 + cuDNN) на microSD
- Установите PyTorch для ARM:
pip install torch torchvision torchaudio - Установите YOLOv8:
pip install ultralytics - Скопируйте скрипт выше в
main.py - Запустите:
python3 main.py - Подтвердите задержку < 250ms в консоли
Если видео не потекло — проверьте IP камеру ping, RTSP URL через ffplay.
Мониторинг и оптимизация
После запуска мониторьте:
- FPS — если < 5, сбавьте качество на камере (720p вместо 1080p)
- CPU/RAM —
htopна Jetson, должно быть < 80% - Температура GPU —
tegrastats, норма 60-75°C, выше 85°C — проблемы с охлаждением - Ложные срабатывания — отслеживайте в Telegram, маркируйте и добавляйте в training set
Для мониторинга интегрируйтесь с AI Dashboard чтобы видеть метрики в реальном времени.
Когда cloud лучше, чем edge
Edge (Jetson) выбираем для:
- Критичных объектов (пожар, вторжение) где 200ms имеет значение
- Офис/завод с 4-16 камер
- Плохой интернет или требования по приватности (видео не покидает объект)
Cloud выбираем для:
- 1-2 камер на стартапе (дешевле чем железо)
- Временных систем (<6 месяцев)
- Когда задержка 5-15 сек приемлема