ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Frigate 部署教程:Docker 搭建本地 AI 监控 NVR,摄像头视频不出家门

2026/9/1 20:06:05 拓冰建站 浏览量
Frigate 部署教程:Docker 搭建本地 AI 监控 NVR,摄像头视频不出家门 家庭摄像头默认的工作方式是视频先上传厂商云服务器你在 App 里回看要订阅AI 识别有人/没人之类是云端功能也要单独收费。Frigate 把这个链路整个搬回本地——用 Docker 在一台旧电脑、树莓派或 NAS 上跑一个 NVRAI 识别和录像全部发生在你自己家里。它在 GitHub 上有 35.3k Star、3.5k ForkMIT 协议。本文不是泛泛介绍而是给出完整可复现的部署过程并把两件事讲透Frigate 靠什么在两路、四路摄像头上跑得动两段式检测 多进程架构以及加速器怎么选Coral / Hailo / OpenVINO / RKNN 各自的配置差异。一、为什么需要本地 NVR云监控的隐性成本先算一笔账。云摄像头的成本分三块设备钱、订阅费、隐私。设备是一次性的订阅是月月扣的云存储 云 AI隐私是你看不到的——视频文件存在别人的服务器上识别在别人的机器上跑你只能选择信任。Frigate 换了个思路设备 一块 AI 加速器一次投入录像、识别、告警全在本地。官方文档里明确写了设计目标“use of a GPU or AI accelerator is highly recommended”强烈建议上加速器“AI accelerators will outperform even the best CPUs with very little overhead”专用加速器比最强的 CPU 都快且功耗低得多。二、核心架构两段式检测不是每一帧都跑 AI这是 Frigate 跟普通 NVR 最本质的区别也是它能在一台几瓦的小机器上跑多路摄像头的原因。物体检测是很贵的操作。一帧 1080p 画面丢给模型哪怕有硬件加速也要几十毫秒1080p 30fps 意味着每秒 30 帧任何家用机器都顶不住。Frigate 的官方 README 是这样描述自己的设计取舍的“Uses a very low overhead motion detection to determine where to run object detection”先用极低开销的运动检测决定在哪里跑对象检测“Object detection with TensorFlow runs in separate processes for maximum FPS”对象检测在独立进程运行以最大化帧率“an emphasis on realtime over processing every frame”实时优先而不是逐帧处理落到流水线上就是三步最省钱的是中间那步运动检测把绝大多数静止画面挡在了模型外面。模型只在有必要的时间和地点官方原话only looking for objects when and where it is necessary才被唤醒。这个设计在配置里的体现就是detect.fps和detect的分辨率——它们跟录像无关。检测可以跑在 720p、5fps 的低规格上录像依然是摄像头推送的原画。很多第一次配置的人在这里会困惑我 detect 设了 720p为什么回看还是 4K因为这是两条独立的链路。三、完整部署docker-compose config30 分钟内跑起来先给出可复现的最小配置。运行环境一台 x86 或 ARM 的 Linux 机器装好 Docker Docker Compose树莓派、NAS、旧笔记本都行官方明确 Windows 不在支持范围。docker-compose.ymlservices:frigate:container_name:frigaterestart:unless-stoppedimage:ghcr.io/blakeblackshear/frigate:stableshm_size:256mbvolumes:-/etc/localtime:/etc/localtime:ro-/path/to/your/config:/config-/path/to/your/storage:/media/frigate-type:tmpfstarget:/tmp/cachetmpfs:size:1000000000ports:-8971:8971# Web UI-8554:8554# RTSP 转发-8555:8555/tcp# WebRTC-8555:8555/udpdocker compose up -d后浏览器打开http://你的IP:8971。但此刻还没有摄像头Web 界面里检测是空转的。Frigate 官方提供了测试配置用一个本地 mp4 文件模拟一路视频源先把检测流程跑通再买设备。config.yml测试模式mqtt:host:mqttcameras:test:ffmpeg:inputs:-path:/media/frigate/car-stopping.mp4input_args:-re-stream_loop-1-fflags genptsroles:-detect-rtmpdetect:height:1080width:1920fps:5把 mp4 放到/media/frigate/对应宿主机--storage挂载目录就能循环播放检测。看懂这个配置就懂了 Frigate 八成用法cameras下每路摄像头是一个键ffmpeg.inputs指定视频源detect指定检测分辨率。接真实摄像头时只需把path换成 RTSP 地址cameras:front_door:ffmpeg:inputs:-path:rtsp://user:pass192.168.1.64:554/stream1roles:-detectdetect:width:1280height:720fps:5四、加速器怎么选检测器类型与配置对比Frigate 默认用 CPU 跑 TensorFlow Lite 模型但官方文档明确标注 CPU detector 是not recommended不推荐并建议没 GPU 或 EdgeTPU 时用 OpenVINO 的 CPU 模式往往比原生 CPU 检测器更高效。注意一个官方提示多个检测器不能混用做对象检测例如 OpenVINO 和 Coral EdgeTPU 不能同时用于检测。多个检测器会各自跑独立进程但从所有摄像头共享的同一个检测队列取任务。检测器硬件典型配置要点EdgeTPUCoralGoogle Coral USB / Mini PCIe / M.2type: edgetpudevice: usb或pci默认模型 Mobiledet可换 YOLOv9Hailo-8 / Hailo-8LM.2 模块 树莓派 HATtype: hailo8l自动选 YOLOv6n可指定本地.hef或 URLOpenVINOIntel 6 代 CPU / GPU / NPU也支持 AMD CPUtype: openvinodevice: CPU/GPU/NPU默认 SSDLite MobileNet v2RKNNRockchip NPURK3588 等社区支持板卡自带 NPUCPU任何 x86/ARMtype: cpunum_threads: 3不推荐用于实际使用Coral 的配置最典型USB 版最常用detectors:coral:type:edgetpudevice:usbmodel:path:/edgetpu_model.tflite# 容器内置默认模型Hailo-8 的配置稍不同它会根据硬件自动选默认模型detectors:hailo:type:hailo8ldevice:PCIemodel:width:320height:320input_tensor:nhwcinput_pixel_format:rgbmodel_type:yolo-genericlabelmap_path:/labelmap/coco-80.txt成本参考官方文档标注Google Coral USB 官方定价 $59.99Hailo-8 AI Kit 约 $70Nvidia GPU 看你预算RK3588 等板卡的 NPU 随板自带。所以最省钱的玩法是一台吃灰旧电脑/树莓派 一块几十到几百块的加速器 几路几十块的 RTSP 摄像头几百块搭一套全本地 AI 监控。不上加速器行不行行但别指望同时带八路 4K——那是算力物理极限不是 Frigate 的 bug。五、为什么 shm 内存必须显式给够Frigate 用共享内存shm存放解码后的原始帧。Docker 默认只有 64MB两路 720p 检测基本就顶满了视频一多会报Bus error——这是最常见的翻车点之一。官方文档给过内存估算公式一路 1280x720 检测1280 × 720 × 1.5 × 20 270480字节加上日志开销约 66MB。所以上面 compose 里shm_size: 256mb不是拍脑袋如果你加到八路 720p需要约 253MB。六、和 ZoneMinder、云监控比差在哪ZoneMinder 是做了二十多年的老牌开源 NVR5.9k Star功能全支持模拟、IP、USB 摄像头。但它的定位是录像 移动侦测不带内置 AI 物体识别这层——它告诉你画面有变化不告诉你变化的是人还是狗。Frigate 的杀手锏恰恰在 AI 层区分人、车、狗、猫、包裹支持车牌识别、人脸识别、语义搜索检测到人才告警风吹草动不会触发。云监控的差别更本质数据所有权。云方案里视频存在别人的服务器、识别跑在别人的机器、订阅费月月扣Frigate 把这三样全拿回本地。这是选它的核心理由不是性能。七、踩坑清单按真实反馈频次排shm 不够 → Bus error。默认 64MB 只够一两次低规格检测视频多了必挂显式给shm_size。detect 分辨率和录像混淆。detect 是检测用低分辨率低帧率录像永远是原画。配错的人以为Frigate 降画质其实是没分清两条链路。加速器透传。虚拟机里跑GPU 和 Coral 透传可能出问题官方文档明确提示Windows 不在支持范围。多检测器不能混用。想同时上 Coral OpenVINO 做检测官方不支持加速只能分别用于检测之外的语义搜索等任务。默认 CPU 检测器慢。如果暂时没加速器优先试 OpenVINO 的 CPU 模式别用默认cpu类型硬扛。RTSP 认证字符串。摄像头 URL 里带user:pass注意有些摄像头对特殊字符要求 URL 编码否则连不上流。八、局限说清楚第一它有技术门槛。Docker、YAML、RTSP、shm每一项都要求你有点 Linux 基础不是插上就用的商品。第二本地部署 自己维护硬盘坏了录像没了机器挂了告警停了云监控外包的风险要自己扛。第三默认模型识别的物体类别有限想要更高准确率和更多类别得用官方在开源之外的 Frigate 付费定制模型。第四品牌注意代码是 MIT 开源但 “Frigate” 名称和 logo 是 Frigate, Inc. 的注册商标。九、结论如果你愿意花一个下午搭一套、之后视频永远不出家门Frigate 是目前本地 AI 监控赛道里最成熟的开源选择35k Star 的量级就是这个判断的背书。它的边界很清晰本地、开源、可折腾代价是自己扛运维。部署路径也固定Docker Compose 起服务 → 测试配置先跑通 → 换真实 RTSP → 按摄像头数量配检测器与 shm。照这个顺序走比直接堆配置少踩一半坑。