飞牛OS+显卡直通+Docker部署Frigate教程

2026-06-07 22:14:31 0点赞 3收藏 0评论

前言

我之前的NAS一直用的CasaOS,最近看到飞牛OS挺火的,特别是它自带的飞牛影视功能很吸引人。毕竟Emby和Plex都要付费,折腾开心版又太麻烦,索性就转到了飞牛OS体验一下。

装好飞牛OS之后,顺便就想把之前一直在玩的Frigate也部署上。Frigate是一个开源的、支持实时目标检测的NVR(网络视频录像机),能识别人、猫、狗、车等目标,还能联动Home Assistant,是智能家居安防的利器。

飞牛OS+显卡直通+Docker部署Frigate教程

我的环境比较特殊:飞牛OS是装在ESXi虚拟机里的,先晒一下我运行马上600天的洋垃圾。我通过PCIe直通把一张NVIDIA P400直通进来。说实话P400应付Frigate还是比较吃力的,毕竟这是一张入门级的亮机卡,但好在能跑起来,GPU加速带来的CPU减负效果依然很明显。如果你的显卡更好(比如RTX系列),体验会好很多。

折腾了一番终于跑通了,今天就把整个过程分享给大家。如果你也在飞牛OS上用NVIDIA显卡跑Frigate,希望这篇教程能帮到你。

本篇你将学到:飞牛OS中安装NVIDIA驱动和Container Toolkit、Docker Compose部署Frigate并实现NVIDIA GPU直通、Frigate配置文件详解(ONNX模型 + YOLOX)、go2rtc直播流配置、在WebUI中创建检测区域、常见问题排错。

一、前置条件

开始之前,请确认以下条件:

1. 飞牛OS已安装并正常运行(我的版本是fnOS最新版,装在ESXi虚拟机中)

2. NAS上有NVIDIA显卡(我用的是P400,Turing架构及以上如RTX系列推荐)

飞牛OS+显卡直通+Docker部署Frigate教程

3. 如果是虚拟机环境,需要将显卡通过PCIe直通给飞牛OS

4. 已开启SSH访问(方便命令行操作)

5. 有基本的Docker和Linux知识

6. 网络摄像头的RTSP地址已获取(海康/大华等品牌可通过SADP工具或摄像头后台查看)

二、安装NVIDIA驱动和Container Toolkit(关键步骤!)

飞牛OS的应用中心已经贴心地提供了NVIDIA相关套件,安装起来非常方便。

2.1 安装 NVIDIA-driver-580

打开飞牛OS的应用中心,搜索NVIDIA,找到NVIDIA-driver-580(或更新版本的驱动),点击安装即可。

安装完成后,通过SSH连接到NAS,验证驱动是否正常:

nvidia-smi

如果能看到显卡信息和驱动版本号,说明驱动安装成功。

2.2 安装 NVIDIA Container Toolkit

同样在飞牛OS的应用中心搜索并安装NVIDIA Container Toolkit。这个工具的作用是让Docker容器能够访问宿主机的NVIDIA GPU。

安装完成后,验证Docker是否能识别GPU:

docker run --rm --runtime=nvidia --gpus all nvidia/cuda:12.0-base nvidia-smi

如果能正常输出GPU信息,说明Container Toolkit配置成功。

三、下载YOLOX模型

Frigate 0.17版本支持多种检测模型,这里我们使用YOLOX的ONNX格式模型。先创建模型存放目录,再下载模型文件:

# 创建模型缓存目录(compose构建时也会自动创建相关目录) mkdir -p /vol1/appshare/frigate/config/model_cache cd /vol1/appshare/frigate/config/model_cache # 下载YOLOX-S模型(约30MB) wget https://github.com/Megvii-BaseDetection/YOLOX/releases/download/0.1.1rc0/yolox_s.onnx

如果你的网络访问GitHub较慢,可以挂代理或先在电脑上下载后通过SFTP上传到NAS的对应目录。

四、编写 docker-compose.yml

在飞牛OS中,你可以通过Docker的"项目"功能(即docker-compose)来部署Frigate。以下是我使用的compose文件:

version: "3.9" services: frigate: container_name: frigate image: ghcr.io/blakeblackshear/frigate:0.17.0-tensorrt restart: unless-stopped privileged: true shm_size: "512mb" runtime: nvidia volumes: - /etc/localtime:/etc/localtime:ro - /vol1/appshare/frigate/config:/config - /vol1/appshare/frigate/video:/media/frigate - type: tmpfs target: /tmp/cache tmpfs: size: 1000000000 ports: - "8971:8971" # Web UI(推荐,SSL加密+用户认证) - "8554:8554" # RTSP直播流 - "8555:8555/tcp" # WebRTC - "8555:8555/udp" # WebRTC environment: NVIDIA_VISIBLE_DEVICES: all

关键配置项说明

image:使用 0.17.0-tensorrt 标签,内置TensorRT支持,NVIDIA显卡必选。

runtime: nvidia:告诉Docker使用NVIDIA运行时,实现GPU直通。

shm_size: "512mb":共享内存大小,Frigate处理视频流需要较大共享内存,建议至少256MB。

NVIDIA_VISIBLE_DEVICES: all:让容器能看到所有GPU,如果只有一张卡填 all 即可。

privileged: true:特权模式,某些情况下GPU访问需要此权限。

tmpfs:将缓存放在内存中,提升读写性能,1GB大小足够。

端口说明(重要!)

8971端口(推荐使用):这是Frigate新版Web UI的入口,支持SSL加密连接,并且有用户认证机制(首次访问会要求你创建管理员账号密码)。日常使用请统一通过这个端口访问,安全可靠。

5000端口(不建议开启):这是Frigate的旧版API端口,没有任何用户认证,属于裸奔状态。如果你的NAS在内网还好,但一旦暴露到公网会有严重的安全风险。所以我这里直接没有映射这个端口,建议大家也跳过它。

8554端口:go2rtc RTSP转发流。8555端口:WebRTC低延迟直播。

五、编写 Frigate 配置文件

在 /vol1/appshare/frigate/config/ 目录下创建 config.yml,这是Frigate的核心配置文件:

# ============ MQTT配置 ============ mqtt: enabled: true host: 10.0.2.232 # 替换为你的MQTT Broker地址 # 如果你的MQTT Broker设置了用户名密码,取消下面的注释: # user: your_mqtt_username # password: your_mqtt_password # ============ 检测器配置 ============ detectors: onnx: type: onnx # ============ 目标追踪 ============ objects: track: - person - cat # ============ 快照设置 ============ snapshots: enabled: true timestamp: false clean_copy: false bounding_box: true retain: default: 10 quality: 95 detect: enabled: true record: enabled: true continuous: days: 0 alerts: retain: days: 3 mode: motion # ============ 模型配置 ============ model: model_type: yolox width: 640 height: 640 input_tensor: nchw input_dtype: float_denorm path: /config/model_cache/yolox_s.onnx labelmap_path: /labelmap/coco-80.txt # ============ 摄像头配置 ============ cameras: diaozhuang: enabled: true ffmpeg: inputs: - path: rtsp://admin:你的密码@10.1.1.1:8554/Streaming/Channels/101 roles: - detect live: streams: Stream 1: diaozhuang ffmpeg: hwaccel_args: preset-nvidia version: 0.17-0 go2rtc: streams: diaozhuang: - rtsp://admin:你的密码@10.0.2.67:8554/Streaming/Channels/101 lpr: enabled: false classification: bird: enabled: false

配置要点解析

1. MQTT配置

MQTT用于将Frigate的检测事件推送给Home Assistant或其他智能家居平台。如果你的MQTT Broker(比如HA自带的Mosquitto)设置了用户名和密码认证,需要在配置中加上 user 和 password 字段:

mqtt: enabled: true host: 10.0.2.232 user: your_mqtt_username password: your_mqtt_password

如果你的MQTT Broker没有设置认证(比如测试环境),可以省略 user 和 password。

2. 检测器选择:这里使用 onnx 类型的检测器。如果你的NVIDIA显卡支持TensorRT,也可以切换为 tensorrt 类型,推理速度更快。ONNX通用性很好,兼容性更强。

3. 模型配置:model 部分指定了YOLOX-S模型,输入分辨率640x640。

4. 硬件加速:ffmpeg.hwaccel_args: preset-nvidia 是关键配置,告诉FFmpeg使用NVIDIA的NVDEC来解码视频流,大幅降低CPU占用率。

5. go2rtc:Frigate内置的流转发服务,将RTSP流转为低延迟的WebRTC流。go2rtc中的RTSP地址和camera配置中的地址可以不同(比如一个主码流一个子码流)。

六、启动Frigate

通过飞牛OS的Docker图形界面来启动:

1. 打开飞牛OS的 Docker 应用

2. 进入"项目"页面

3. 点击"新增项目"

4. 项目名称填写 frigate

5. 路径选择你存放 docker-compose.yml 的目录

6. 将上面的compose内容粘贴进去

7. 点击"构建"

首次启动时,Frigate会自动拉取镜像(约2-3GB),耐心等待。启动成功后,你会在日志中看到检测器启动、摄像头处理器启动等信息。

七、访问Frigate Web界面

打开浏览器,访问:https://你的NAS_IP:8971

首次访问时,Frigate会要求你创建管理员账号和密码,请务必记住。登录后进入新版UI界面,你可以在 Live 页面查看实时画面和检测结果,在 Review 页面回顾检测事件和录像,在 Settings 中调整配置,在 Explore 中使用语义搜索功能。

八、在WebUI中创建检测区域

Frigate支持在摄像头画面中划定检测区域(Zone),只有目标进入指定区域才会触发告警,这样可以大大减少误报。比如你只想在有人进入客厅或餐厅时收到通知,而不是走廊经过也算。

创建区域的方法非常直观:

1. 进入Frigate WebUI,打开对应摄像头的设置页面

2. 找到 Zones 配置区域

3. 点击 Add Zone,给区域起个名字(如"客厅"、"餐厅"、"阳台")

4. 在摄像头预览画面上直接拖拽绘制多边形,框出你想要监控的区域

5. 选择该区域要检测的目标类型(如person、cat等)

6. 保存即可

绘制完成后,你还可以在 review 配置中设置 required_zones,指定只有特定区域内的事件才算作告警或回顾对象。这一步完全不需要手动写坐标,WebUI会自动帮你生成对应的配置。

九、MQTT与Home Assistant联动(可选)

如果你使用Home Assistant,可以通过MQTT将Frigate的检测事件推送给HA:

1. 确保HA中已安装 MQTT集成(Add-on中安装Mosquitto Broker)

2. 在Frigate配置的 mqtt 部分填写MQTT的IP地址(如果Mosquitto设了密码,记得加上user和password)

3. 在HA中安装 Frigate集成(通过HACS安装)

4. 配置Frigate集成,填写Frigate的MQTT地址

联动后,你可以在HA中收到人/猫检测的推送通知、用检测事件触发自动化(比如检测到人自动开灯)、在HA仪表板中嵌入Frigate的实时画面。

十、性能参考

我用的是P400这种入门级显卡,应付Frigate其实比较吃力,但开启GPU加速后CPU占用依然明显降低。如果你的显卡更好(比如RTX系列),效果会好很多。具体性能因硬件而异:

CPU占用方面,开启GPU加速后Frigate的CPU占用显著降低。GPU占用取决于摄像头数量和分辨率。内存占用约1-2GB。P400使用ONNX模型跑640x640输入,单帧推理约80-120ms,换用更好的显卡可以降到15-30ms。

相比纯CPU推理,NVIDIA GPU加速带来的提升是非常显著的,即使是P400也能感受到明显的CPU减负。

总结

以上就是在飞牛OS上通过NVIDIA GPU直通 + Docker部署Frigate的完整教程。整体流程并不复杂:

1. 应用中心安装 NVIDIA-driver-580 和 NVIDIA Container Toolkit

2. 下载YOLOX模型文件

3. 编写 docker-compose.yml 和 config.yml

4. 通过Docker项目管理启动容器

5. 访问WebUI,创建检测区域

Frigate的AI检测能力真的很强,配合NVIDIA GPU加速,在NAS上就能跑出一套媲美商用方案的智能监控系统。即使像我这样在ESXi虚拟机里用P400这种入门卡,也能顺利跑起来。如果你也在飞牛OS上折腾Frigate,强烈推荐试试!

有什么问题欢迎评论区交流,也欢迎点赞收藏支持一下!

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起
0评论

当前文章无评论,是时候发表评论了
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章

Penny666

Ta还没有介绍自己

关注 打赏
最新文章 热门文章
3
扫一下,分享更方便,购买更轻松