开源项目
blakeblackshear/frigate avatar
blakeblackshear/frigate

Frigate:为 Home Assistant 打造的本地实时物体检测 NVR

NVR 具有针对 IP 摄像机的实时本地对象检测功能。 Frigate NVR - IP 摄像机的实时目标检测 \[英语\] | 简体中文 专为家庭助理设计的完整本地 NVR,具有 AI 对象检测功能。

35,911 个 Star3,598 个 ForkTypeScriptMIT

秒懂

它是什么?
Frigate 是一个面向 Home Assistant 的本地 NVR,它用 OpenCV 和 TensorFlow 做实时物体检测。它的核心思路不是逐帧分析,而是先用低开销的运动检测圈定区域,再只在需要时运行检测模型。
适合谁用?
适合已经深度使用 Home Assistant、并且愿意为 GPU 或 AI 加速器投入硬件成本的用户。它把物体检测和录像留存深度绑定,检测结果直接决定视频保留策略,这一点是普通 NVR 做不到的。
能商用吗?
可以。MIT 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
还在维护吗?
在维护。仓库在最近一天内有新的提交。
用什么语言写的?
主要是 TypeScript(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月15日)和我们的分析,不构成法律意见。

开源项目深度解析

它解决的是 Home Assistant 用户录像与识别的割裂问题

常见的家用监控方案里,录像归录像,识别归识别。要么用摄像头自带的运动检测,误报多,要么把视频流丢到云端做分析,隐私和延迟都是问题。Frigate 把这两件事合在一起:它本身就是一个完整的 NVR,支持 24/7 录像,同时录像的保留策略直接由检测到的物体决定。也就是说,不是录下所有画面再事后翻找,而是系统知道画面里出现了人、猫还是车,再根据这些对象决定这段录像该留多久。这个设计是给 Home Assistant 用户准备的,它通过自定义组件紧密集成,检测结果通过 MQTT 发布,其他系统也能消费这些事件。

运动检测在前,物体检测在后,这是它省资源的根本

Frigate 的 README 明确说它只用低开销的运动检测来确定在哪里运行物体检测,而不是对每一帧都跑 TensorFlow。这个顺序很关键。先有运动检测把画面里变化的区域圈出来,再把这些区域交给 TensorFlow 进程去识别。物体检测跑在独立进程里,目的是最大化 FPS。它强调实时性优先于处理每一帧,这意味着在检测能力和帧率之间,它选了前者。这种设计让 CPU 也能跑,但 README 直接建议用 GPU 或 AI 加速器,说加速器用很小的开销就能超过最好的 CPU。如果你只有纯 CPU 环境,能跑,但别指望高帧率。

从摄像头到浏览器的数据流:RTSP 重流与低延迟预览

摄像头的 RTSP 连接数是有限的,多个客户端同时拉流会压垮设备。Frigate 的做法是重流,也就是先由 Frigate 从摄像头拉取 RTSP 流,再转发给其他客户端,这样摄像头只维持一个连接。实时预览走 WebRTC 和 MSE,这两个协议都是为了降低延迟。WebRTC 通常能到亚秒级延迟,MSE 稍高但兼容性更好。这个架构对网络环境有要求,摄像头和 Frigate 主机之间如果跨网段或经过防火墙,RTSP 端口和 WebRTC 的 UDP 端口都需要打通。文档没有给出具体的端口列表,但这类部署的网络前提是绕不开的。

部署方式:Docker 是默认路径,配置集中在 config 文件

README 没有给出安装命令,但明确指出文档在 docs.frigate.video。从仓库结构和 Home Assistant 集成方式来看,Frigate 以 Docker 容器为主要分发形式,配置通过 YAML 文件完成,检测器、摄像头、录像保留策略都在里面声明。它依赖 MQTT 作为事件总线,所以部署时需要一个 MQTT broker,Home Assistant 用户通常已经有。自定义组件负责把 Frigate 的检测事件映射成 Home Assistant 的实体,比如 person 出现、离开这样的传感器状态。需要明确的限制是,没有 GPU 或加速器时,CPU 推理的 FPS 会很低,多路摄像头同时检测时尤其明显。

一个真实的失败模式:运动检测漏检时,物体检测永远不会触发

因为物体检测只在运动检测圈出的区域运行,如果运动检测没有触发,TensorFlow 根本不会看到那帧画面。这是 Frigate 设计上的一个硬边界。静止的物体,比如一个人坐在沙发上不动,或者一辆停着的车,运动检测不会产生事件,后续的物体检测和录像留存逻辑就不会启动。对于防盗监控来说,这可能是致命的。有人在画面里静止不动反而不会被标记。这不是 bug,是架构选择。如果你需要识别静止物体,Frigate 默认行为不覆盖这个场景,需要额外配置区域或依赖其他触发源。

与 ZoneMinder 的路线差异:检测驱动录像,而不是录像附带检测

另一个常见的自建 NVR 是 ZoneMinder。它也能做运动检测和录像,但核心思路是事件驱动的录像,检测和录像的关系是附加的。Frigate 反过来,检测结果是录像保留策略的输入,对象类型直接决定这段录像留多久。这个差异在实际使用中很明显。ZoneMinder 里你想按对象类型筛选录像,需要额外脚本或插件。Frigate 从设计上就把这个做成了原生功能。代价是 Frigate 对 Home Assistant 的依赖更深,MQTT 和自定义组件是它的主要集成方式,脱离这个生态单独用,体验会打折扣。

许可证与品牌:代码是 MIT,名字不是

仓库的源代码、配置文件和文档都走 MIT 许可证,可以自由使用、修改和分发,只要保留原始版权声明。但 Frigate 这个名字、Frigate NVR 品牌和 Logo 是 Frigate, Inc. 的商标,不受 MIT 保护。仓库里有专门的 TRADEMARK.md 文件说明品牌资产的可用方式。这意味着你可以 fork 代码做自己的 NVR,但不能直接叫它 Frigate。对于个人用户,这基本没影响。对于想基于它做商业产品的团队,这是一个明确的边界,动手之前要先读商标政策。

编辑结论

适合已经深度使用 Home Assistant、并且愿意为 GPU 或 AI 加速器投入硬件成本的用户。它把物体检测和录像留存深度绑定,检测结果直接决定视频保留策略,这一点是普通 NVR 做不到的。不适合只想拿一台旧电脑接几个摄像头、不想折腾 MQTT 和自定义组件的人。部署前先确认三件事:你的摄像头是否支持 RTSP 推流,你的机器有没有可用的 GPU 或加速器,以及你是否接受 Frigate 品牌名称和 Logo 不受 MIT 许可证保护这一事实。代码可以随便改,但对外使用 Frigate 这个名字要遵守商标政策。

官方来源

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
社区笔记

社区笔记