Blog

Frigate NVR:本地摄像头与 AI 检测

云摄像头方便:App 漂亮,推送及时,坏了换一台就行。但录像躺在别人盘上这件事,我始终睡不踏实。十一月开始把门口和院子两路改成本地 Frigate:RTSP 进本地推理,事件式录像落在自家 ZFS 上。下面按采购日记的顺序写——先钱和硬件,再配置,最后是磁盘怎么算账。

采购日记:摄像头、主机、Coral

第一周先确认摄像头能不能吐 RTSP。这是底线。某款「只能 App 看」的消费机被直接退货;另一款国产品牌固件里藏着 /stream0 主码流和 /stream1 子码流,文档不全,靠社区帖子试出来。账号密码单独建只读用户,别用管理员账号写进 Frigate 配置。

主机方面,我没一上来就买专用 NVR 盒子。现有一台带 USB 口的小主机,CPU 先裸跑检测,帧率压到能接受就行。跑了十天,CPU 常年中高负载,风扇声在夜里很吵——于是第二周下单 Coral USB。到手后容器里映射 /dev/bus/usb,确认 apex 设备出现;有人走 PCIe 版本,驱动和内核升级后更要复查 /dev/apex_0。Coral 不是魔法:模型加载、分辨率、检测区域仍要调,但它把「人型检测」从吃满主机变成背景噪音级占用。

录像盘不走系统盘。NAS 上划一块 NFS 给 Frigate 录像目录,系统盘只放配置和数据库。采购清单里还要算上网线与 PoE:两台摄像头若走 PoE 交换机,少两个墙插,布线干净很多。支架、防水盒、室外网线的钱往往比「多买一颗 Coral」更容易超预算,记下来以免只盯着 AI 加速器。供电与散热也写进清单:Coral 和主机塞进弱电箱要留通风,夏天闷箱里的热重启比模型误检更让人崩溃。

配置:子码流检测,主码流录像

稳定链路比拉满分辨率重要。常见套路是:子码流给 detect,主码流给 record。检测分辨率 1280×720 一类就够人型,不必 4K 硬推进推理。配置示意如下,密码用环境变量或权限收紧的文件,别进 git:

cameras:
  gate:
    ffmpeg:
      inputs:
        - path: rtsp://user:pass@ip:554/stream1
          roles: [detect]
        - path: rtsp://user:pass@ip:554/stream0
          roles: [record]
    detect:
      width: 1280
      height: 720

MQTT 对接 Home Assistant,人型且进指定区域才推送。第一周树叶、猫、对面楼过道会刷爆手机——区域框、物体过滤、最小停留时间慢慢收,别一烦就关通知。关了等于白装。没 Coral 时先降检测帧率和分辨率,确认 RTSP 不断流、录像目录可写,再加硬件加速;一次改十个旋钮,坏了不知道谁的锅。

硬件加速就绪后,把白天与夜间的阈值分开想:红外画面噪声大,同一套灵敏度容易误报。遮挡区画掉对面阳台和树枝,比盲目降全局置信度更干净。录像编码与关键帧(snapshots)策略也写进配置备注,半年后改参数时才知道当时为什么那样设。

磁盘账:日增量、保留天、写满会怎样

按摄像头码率粗算日增量。例如主码流 4 Mbps 量级,连续录一天大约数 GB 到十余 GB 一档(实际随场景运动变化);事件式录像则小得多,取决于触发频率。两路摄像头、保留十四天事件片段,和「24 小时连续 + 三十天」完全是两个数量级。我把事件片段和连续录像策略分开想:门口偏事件 + 短连续,便于回看经过的人;车库可以更短。

写满盘会出现录像中断、数据库异常、排查通宵。监控 NFS 剩余空间和 Frigate 自身磁盘告警,保留天数宁可短一点。升级 Immich 或别的服务时别误挂载到同一写满的池。隐私和法律同样写进账本:只拍自家合理范围,公共人行道取景要注意合规;面板和流媒体接口做认证,NVR Web 绝不裸奔公网。

本地 NVR 的维护成本真实存在:固件、密码轮换、Coral 驱动、磁盘生命周期。数据库与配置目录单独备份,别只信「录像文件还在」。某次错误清理曾误删事件索引,片段文件还在却难检索——从此配置与 DB 进 restic,录像本身靠保留策略与盘空间监控。

夜间误报压下来之后,通知才重新变得有用。采购日记的最后一笔,其实是接受这笔运维时间——硬件买齐只是上半场;标定区域、算磁盘账、把隐私边界说清,才是能长期开着的 NVR。「录像在自己池子里」这份踏实,是按月订阅给不了的,但踏实建立在你愿意持续付维护成本之上。

← Back to Blog