Frigate 是一款开源 NVR 系统,专为 IP 摄像头设计,支持实时本地对象检测。通过集成 Coral TPU 或 TensorRT 等边缘加速器,它能高效处理多路视频流,仅在运动触发时运行 AI 推理,避免 CPU 过载,实现低延迟实时监控。这种架构特别适合家庭或小型企业多摄像头场景,能将检测延迟控制在 100ms 以内,同时存储仅针对事件剪辑。
为什么选择 Coral TPU 或 TensorRT 加速?
传统 CPU 对象检测在多摄像头下易导致帧率下降和延迟堆积。Frigate 的设计强调 “仅必要时检测”:先用低开销运动检测(OpenCV)筛选 ROI,再送入加速器运行 TensorFlow Lite 或 ONNX 模型。Coral TPU 以 4 TOPS 算力、毫秒级推理著称,适合低功耗边缘设备;TensorRT 则利用 NVIDIA GPU 的 INT8/FP16 量化,吞吐量可达数百 FPS,适用于高负载场景。根据官方基准,Coral USB TPU 单卡支持 100+ FPS YOLO 检测,而 TensorRT 在 RTX 系列上可轻松驾驭 10+ 路 1080p 流。
“Frigate uses OpenCV and Tensorflow to perform realtime object detection locally for IP cameras.” 这确保了零云端依赖,隐私安全。
基础安装与硬件准备
使用 Docker Compose 一键部署:
docker compose up -d
硬件清单:
- 主机:Intel NUC 或 mini PC(i5+,8GB RAM),支持 PCIe/USB。
- 加速器:
- Coral TPU:USB 版($60)或 M.2 PCIe(推荐多卡)。
- NVIDIA:Jetson Nano/Orin 或 RTX 3060+(TensorRT)。
- 存储:SSD(事件剪辑)+ HDD(24/7 录像),至少 1TB / 摄像头 / 月。
- 网络:千兆交换机,摄像头 RTSP H.264/H.265。
挂载设备:
- Coral USB:
devices: - /dev/bus/usb:/dev/bus/usb - PCIe TPU:
devices: - /dev/apex_0:/dev/apex_0 - NVIDIA:
deploy.resources.reservations.devices: [{driver: nvidia, capabilities: [gpu]}]
检测器配置参数
在 config.yml 中定义 detectors,支持多实例负载均衡。
Coral TPU 配置(edgetpu 类型):
detectors:
coral:
type: edgetpu
device: usb # 或 pci:0
关键参数:
model.path: /config/model_cache/ssd_mobilenet_v2_coco_quant_edgetpu.tflite(默认量化模型,320x320 输入)。- 阈值:
min_area: 5000(忽略小物体),threshold: 0.7(置信度)。 - 多 TPU:定义
coral1: device: usb,coral2: device: pci:0,摄像头指定detectors: [coral1, coral2]轮询。
TensorRT 配置(onnx 或 tensorrt 类型):
detectors:
tensorrt:
type: tensorrt
device: 0 # GPU ID
model:
path: /config/yolov8n.trt # 预转换 TensorRT 引擎
input_tensor: nchw
width: 640
height: 640
优化点:
- 使用
trtexec转换模型:trtexec --onnx=yolov8n.onnx --fp16 --workspace=4096。 - 批处理:
batch_size: 4(多帧并行)。 - 监控:
nvidia-smi确保 GPU 利用率 <80%。
风险:TPU 仅支持 TF Lite 量化模型,避免 FP32;TensorRT 需 CUDA 12+。
多摄像头实时优化
针对 4-8 路 1080p,配置 per-camera detect:
cameras:
front_door:
ffmpeg:
inputs:
- path: rtsp://user:pass@cam1:554/stream
roles: [detect, record]
detect:
width: 1280
height: 720
fps: 5 # 平衡实时与负载
motion:
threshold: 25 # 像素变化阈值(低=敏感)
contour_area: 30 # 最小轮廓面积
delta_alpha: 0.2
objects:
track: [person, car, dog]
filters:
person:
min_area: 5000
max_area: 100000
threshold: 0.7
zones:
driveway: # 关键区域
coordinates: 0,0,1280,0,1280,720,0,720
清单:
- 运动调优:室内 threshold:20-30;室外 30-40,避免树影误检。
- ROI 掩码:
mask: 0,0 100,100 poly:...屏蔽干扰区。 - FPS 梯度:主摄像头 5-10fps,辅 cam 3fps。
- Birdseye:
enabled: true, mode: motion生成多 cam 拼接视图。
运动事件与高效存储
事件仅在对象持续 >3s、置信 >0.7 时触发:
record:
enabled: true
retain:
days: 7
mode: motion # 或 all
events:
retain:
default: 30
mode: active_objects
snapshots:
enabled: true
timestamp: true
bounding_box: true
参数:
- 保留策略:事件 30 天,普通 7 天;
mode: active_objects只存含人 / 车片段。 - 存储路径:
/media/frigate/recordings,软链到 NAS。 - 通知:MQTT 集成 HA,推送剪辑(pre_capture: 5s, post_capture: 5s)。
回滚:若负载高,降 detect fps 至 3,禁用 24/7 record。
监控与运维清单
- 指标:Prometheus
/api/metrics,警报 CPU>80%、存储 > 90%。 - 日志:
log_level: info,grep "detection_fps"。 - 测试:模拟运动,验证延迟 <200ms。
- 规模扩展:>10 cam,加 TPU 卡或分布式(MQTT 集群)。
通过以上配置,Frigate 可实现 8 路实时 NVR,单机 CPU <30%、存储节省 70%。实际部署中,从单 cam 迭代,逐步调参。
资料来源: