Представь, что твоя система видеонаблюдения не просто записывает видео, а понимает, что происходит на кадрах: отличает человека от машины, собаку от кошки, и мгновенно оповещает тебя о важных событиях. Это не будущее — это Frigate NVR на платформе TrueNAS. Давай разберем, как развернуть эту мощную связку и превратить твой NAS в интеллектуальный центр безопасности.
Что такое Frigate и почему TrueNAS?
Frigate — это open-source NVR (Network Video Recorder) с встроенной AI-детекцией объектов на базе TensorFlow. В отличие от традиционных NVR, которые просто пишут видео, Frigate анализирует каждый кадр в реальном времени, определяя людей, автомобили, животных и другие объекты.
TrueNAS (ранее FreeNAS) — идеальная платформа для Frigate по трем причинам:
- ZFS — надежная файловая система для хранения терабайтов видео
- Докер-контейнерыАппаратная акселерация — поддержка GPU/TPU для AI-инференса
Подготовка TrueNAS для Frigate
Выбор версии TrueNAS
У тебя есть два основных пути:
| Параметр | TrueNAS SCALE | TrueNAS CORE |
|---|---|---|
| Основа | Linux (Debian) | FreeBSD |
| Докер | Нативная поддержка | Через плагины/jails |
| GPU/TPU | Полная поддержка | Ограниченная |
| Рекомендация | ЛУЧШИЙ ВЫБОР | Только если уже используешь |
Создание dataset для Frigate
Перед установкой создай отдельный dataset для хранения конфигов и видео:
# В веб-интерфейсе TrueNAS SCALE:
# 1. Storage → Datasets → Add Dataset
# 2. Имя: frigate
# 3. Тип: Filesystem
# 4. Включи: ACL Type = POSIX
# 5. Share Type = SMB (опционально для доступа)
# 6. Примени настройки
Установка Frigate на TrueNAS SCALE
Метод 1: Через TrueCharts (рекомендуется)
TrueCharts — это каталог приложений для TrueNAS SCALE с готовыми конфигурациями:
- В веб-интерфейсе перейди в Apps
- Нажми Manage Catalogs → Add Catalog
- Добавь каталог TrueCharts:
bash
Name: truecharts Repository: https://github.com/truecharts/catalog Branch: main - Дождись синхронизации каталога
- Найди Frigate в списке приложений и нажми Install
Метод 2: Ручная установка через Docker Compose
Если нужен полный контроль над конфигурацией:
version: '3.8'
services:
frigate:
container_name: frigate
image: ghcr.io/blakeblackshear/frigate:stable
restart: unless-stopped
shm_size: '128mb' # КРИТИЧЕСКИ ВАЖНО!
devices:
# Для Coral TPU (если есть)
- /dev/bus/usb:/dev/bus/usb
# Для GPU NVIDIA (если есть)
- /dev/dri/renderD128:/dev/dri/renderD128
volumes:
- /mnt/pool/frigate/config:/config:rw
- /mnt/pool/frigate/media:/media/frigate:rw
- /etc/localtime:/etc/localtime:ro
environment:
FRIGATE_RTSP_PASSWORD: "${FRIGATE_RTSP_PASSWORD}"
ports:
- "5000:5000" # Web UI
- "1935:1935" # RTMP streams
- "8554:8554" # RTSP feeds
- "8555:8555/tcp" # WebRTC
privileged: true # Требуется для аппаратного ускорения
networks:
default:
name: frigate-network
shm_size: '128mb' обязателен! Frigate использует разделяемую память для буферизации видео. Без этого будут ошибки детекции.
Базовая конфигурация Frigate
Создай файл /mnt/pool/frigate/config/config.yml:
mqtt:
enabled: false
# Если используешь Home Assistant:
# host: 192.168.1.100
# port: 1883
# user: mqtt_user
# password: mqtt_password
cameras:
driveway: # Имя камеры
ffmpeg:
inputs:
- path: rtsp://admin:password@192.168.1.50:554/stream1
roles:
- detect # Поток для детекции
- record # Поток для записи
detect:
width: 1280
height: 720
fps: 5 # FPS для детекции
objects:
track:
- person
- car
- dog
- cat
filters:
person:
min_area: 5000
max_area: 100000
threshold: 0.8
record:
enabled: true
retain:
days: 7
mode: motion # Записывать только при движении
snapshots:
enabled: true
retain:
default: 10
# Глобальные настройки детектора
detectors:
# CPU детектор (если нет TPU/GPU)
cpu1:
type: cpu
# Для Coral USB TPU
coral:
type: edgetpu
device: usb
# Для NVIDIA GPU
nvidia:
type: tensorrt
device: 0 # ID GPU
# Настройки записи
record:
enabled: true
retain:
days: 30
events:
retain:
default: 30
mode: active_objects
birdseye:
enabled: true
mode: continuous
Настройка аппаратного ускорения
В зависимости от твоего железа, добавь в секцию детекторов:
# Для Google Coral USB:
detectors:
coral:
type: edgetpu
device: usb
# Для Google Coral M.2:
detectors:
coral:
type: edgetpu
device: pci
# Для NVIDIA GPU с TensorRT:
detectors:
nvidia:
type: tensorrt
device: 0 # Первая GPU
model:
path: /config/model_cache/tensorrt
# Для Intel GPU с VAAPI (QuickSync):
ffmpeg:
hwaccel_args: preset-vaapi
# Для Raspberry Pi:
detectors:
pi:
type: edgetpu
device: usb # Или 'pci' для Coral PCIe
Интеграция с Home Assistant
Frigate идеально интегрируется с Home Assistant через MQTT:
- Установи MQTT брокер в Home Assistant (Add-on Mosquitto)
- Включи MQTT в конфиге Frigate (раскомментируй секцию mqtt)
- Добавь интеграцию Frigate в Home Assistant через HACS
- Создай автоматизации на основе событий:
automation.yaml
alias: "Уведомление при обнаружении человека" trigger: platform: mqtt topic: frigate/events condition: condition: template value_template: > {{ trigger.payload_json['type'] == 'new' and trigger.payload_json['before']['label'] == 'person' and trigger.payload_json['camera'] == 'driveway' }} action: - service: notify.mobile_app_iphone data: message: "Обнаружен человек у гаража!" data: image: > {{ trigger.payload_json['after']['snapshot_path'] }}
Оптимизация производительности
Настройка ZFS для видео
Для хранения видео используй отдельный dataset с оптимизированными настройками:
# Создай dataset с настройками для видео
zfs create pool/frigate_video
zfs set recordsize=1M pool/frigate_video # Оптимально для видеофайлов
zfs set compression=lz4 pool/frigate_video # Быстрое сжатие
zfs set atime=off pool/frigate_video # Отключи atime для производительности
# Мониторинг использования
zfs list -o name,used,available,compressratio,recordsize pool/frigate_video
Тюнинг параметров детекции
- Уменьши FPS для детекции: 5-10 FPS обычно достаточно
- Используй субстримы: Настрой второй поток с низким разрешением для детекции
- Настрой регионы интереса (zones): Детектируй объекты только в важных областях
- Включи аппаратное декодирование: Используй VAAPI, NVENC или QuickSync
cameras:
driveway:
ffmpeg:
inputs:
# Субстрим для детекции (низкое разрешение)
- path: rtsp://cam/stream2 # 640x360
roles: [detect]
# Основной поток для записи
- path: rtsp://cam/stream1 # 1920x1080
roles: [record]
hwaccel_args: preset-vaapi # Аппаратное декодирование
detect:
fps: 5 # Меньше FPS = меньше нагрузка
width: 640
height: 360
zones:
entrance:
coordinates: 0,0,640,100,640,360,0,360
driveway_area:
coordinates: 200,150,440,150,440,300,200,300
objects:
track:
- person
- car
filters:
person:
threshold: 0.7 # Более строгий порог
mask:
- 0,0,100,0,100,50,0,50 # Маска для исключения области
Мониторинг и обслуживание
Frigate предоставляет метрики в формате Prometheus:
# Доступ к метрикам:
curl http://truenas-ip:5000/metrics
# Ключевые метрики для мониторинга:
# - frigate_detection_fps: FPS детекции
# - frigate_detector_inference_speed_ms: Время инференса
# - frigate_camera_fps: FPS камеры
# - process_resident_memory_bytes: Использование памяти
Очистка старых записей
Настрой автоматическую очистку через crontab в TrueNAS:
# Создай задание в TrueNAS Tasks → Cron Jobs
# Очистка записей старше 30 дней:
find /mnt/pool/frigate/media/* -type f -mtime +30 -delete
# Очистка логов Frigate:
find /mnt/pool/frigate/config/logs/*.log -type f -mtime +7 -delete
Частые проблемы и решения
Решение:
- Включи аппаратное ускорение декодирования (hwaccel_args)
- Используй субстримы для детекции
- Уменьши FPS детекции до 5
- Добавь Coral TPU или NVIDIA GPU
Решение: Увеличь shm_size в docker-compose.yml до 256mb или 512mb
Решение:
- Проверь сетевую задержку до камеры
- Убедись, что камера использует H.264/H.265 (не MJPEG)
- Настрой правильный буфер в ffmpeg input args
Безопасность и доступ
Не забудь про безопасность:
- Измени пароли по умолчанию на камерах
- Используй VLAN для изоляции камер
- Настрой реверс-прокси (Nginx) с SSL для доступа к Frigate UI
- Включи аутентификацию в Frigate через переменные среды
- Регулярно обновляй Frigate и TrueNAS
environment:
- FRIGATE_RTSP_PASSWORD=${RTSP_PASSWORD}
- FRIGATE_MQTT_PASSWORD=${MQTT_PASSWORD}
# Базовый HTTP auth (если не используешь реверс-прокси)
- BASIC_AUTH_USERNAME=admin
- BASIC_AUTH_PASSWORD=${WEB_PASSWORD}
# Ограничь сетевой доступ
networks:
frigate-net:
driver: bridge
internal: true # Внутренняя сеть
# Пробей только нужные порты
ports:
- "127.0.0.1:5000:5000" # Только localhost
Итоговая архитектура
После настройки у тебя получится такая система:
- Камеры → RTSP потоки
- Frigate в Docker → Детекция объектов + запись
- TrueNAS ZFS → Надежное хранение видео
- Home Assistant → Уведомления и автоматизации
- Google Coral/NVIDIA → Аппаратное ускорение AI
Теперь у тебя есть полноценная система видеонаблюдения с искусственным интеллектом, работающая на надежной платформе TrueNAS. Начни с одной камеры, отлади конфигурацию, а затем масштабируй на всю территорию. Помни: главное — это баланс между качеством детекции и нагрузкой на систему.