Hotdry.
ai-systems

使用 Frigate + Coral TPU/TensorRT 加速实时多摄像头对象检测 NVR

详解 Frigate 配置 Coral TPU/TensorRT 边缘推理、多摄像头优化、运动事件与高效存储参数,实现低延迟实时 NVR。

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。
  • Birdseyeenabled: 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 迭代,逐步调参。

资料来源

查看归档