Frigate 在 Raspberry Pi 3/4 上如何配置 gpu_mem 与带电源 USB Hub 以支持硬件加速和 USB Coral?
2026/9/11 4:46:54 网站建设 项目流程

Frigate 在 Raspberry Pi 3/4 上如何配置 gpu_mem 与带电源 USB Hub 以支持硬件加速和 USB Coral?

【免费下载链接】frigateNVR with realtime local object detection for IP cameras项目地址: https://gitcode.com/GitHub_Trending/fr/frigate

在 Raspberry Pi 3/4 上部署 Frigate 时,默认配置下有两个问题会挡住硬件加速与 USB Coral 检测:Pi 默认限制分配给 GPU 的内存,导致无法启用 ffmpeg 硬件解码;USB Coral 耗电较大,直接插在 Pi 上(尤其同时接了 SSD 等 USB 设备时)供电不足,设备无法初始化。这篇文章按官方文档给出这两项准备工作的具体做法:在config.txt中调大gpu_mem、为 USB 设备配备带独立电源的 USB Hub,然后完成 Docker 设备映射和 Frigate 配置,使 Pi 媒体引擎负责解码、USB Coral 负责目标检测。

适用前提:Pi 上运行的是 64 位系统并已通过 Docker 部署 Frigate(官方stable镜像对 arm64 是 RPi 优化构建)。

为什么必须调大 gpu_mem

Frigate 官方安装文档在 “Raspberry Pi 3/4” 一节明确说明:By default, the Raspberry Pi limits the amount of memory available to the GPU. In order to use ffmpeg hardware acceleration, you must increase the available memory by settinggpu_memto the maximum recommended value inconfig.txt(见 安装文档,config.txt内存选项以 Raspberry Pi 官方文档为准)。

视频解码文档 给出的最低要求是:GPU 内存至少分配 128MB,可通过raspi-config> Performance Options > GPU Memory 设置。

两份文档的口径不同:安装文档要求设置到官方建议的最大推荐值,视频解码文档只要求至少 128MB。建议按安装文档取最大推荐值,至少不要低于 128MB。修改config.txt后需要重启 Pi 生效。

注意这里的gpu_mem分配的是 Pi 媒体引擎(VideoCore)可用的内存,与 USB Coral 无关;它只影响 ffmpeg 硬件解码能否工作。

USB Coral 供电:什么时候需要带电源的 USB Hub

EdgeTPU 排障文档 说明 USB Coral 最高可以拉取 900mA 电流,这对 RPi 这类小板子的板载 USB 口来说可能过大,典型症状就是 Coral 不初始化、Frigate 检测不到设备。文档给出的处理顺序是:

  1. 换一个 USB 口试试,不同口供电能力不同;
  2. 确认使用的是 USB3 口,这对供电和满速运行都重要;
  3. 换一根数据线,有用户反馈 Coral 原装线本身有问题;
  4. 使用带独立外部电源的 USB hub。

安装文档进一步指出:如果除了 Coral 还接了其他 USB 设备(例如 SSD),Pi 的 USB 供电不足以同时驱动这些设备,会出现不稳定,此时需要购买带自己电源的 USB hub(见 安装文档)。如果你的 Coral 直插 Pi 就能稳定初始化,可以不买 hub;一旦同时挂 SSD 或换口/换线后仍不初始化,就应直接上带电源的 hub。

Coral 的供电状态可以通过lsusb判断:设备刚插入尚未初始化时显示为1a6e:089a Global Unichip Corp.;初始化完成后显示为18d1:9302 Google Inc.。注意在 Frigate 实际用 Coral 跑过一次推理之前,它都会停留在前一个状态,这属于正常现象(来源:EdgeTPU 排障文档)。

Docker 侧的设备映射

在 安装文档 的示例 Compose 中,与 RPi + USB Coral 相关的devices条目是:

services: frigate: image: ghcr.io/blakeblackshear/frigate:stable devices: - /dev/bus/usb:/dev/bus/usb # Passes the USB Coral, needs to be modified for other versions - /dev/video11:/dev/video11 # For Raspberry Pi 4B
  • /dev/bus/usb整段透传给容器,容器内的 Frigate 才能访问 USB Coral。
  • /dev/video11是 ffmpeg 硬件解码在 Raspberry Pi 4B 上使用的设备节点。视频解码文档 说明:如果不用 privileged 模式运行容器,就必须把/dev/video*设备映射进容器;也可以直接映射所有/dev/video*设备。

如果你的设备号不是video11,用下面的循环在宿主机上找到列出H264格式的设备(该命令来自 视频解码文档):

for d in /dev/video*; do echo -e "---\n$d" v4l2-ctl --list-formats-ext -d $d done

修改 Compose 文件后执行docker compose up -d使配置生效。如果你通过 Home Assistant App 运行 Frigate,文档提示可能需要使用 Full Access 变体并关闭Protection mode,硬件加速和 Coral 访问才可行。

Frigate 配置:Coral 检测器与 RPi 解码 preset

在 Frigate 配置中需要两件事:把检测器指向 USB Coral,把 ffmpeg 解码 preset 设为 RPi 对应项。

配置 USB Coral 检测器

YAML 写法(见 object_detectors 文档):

detectors: coral: type: edgetpu device: usb

UI 写法:Settings > System > Detectors and model,选择EdgeTPU类型添加检测器,device 填usb。多块 USB Coral 时用usb:0usb:1分别指定。

配置 RPi 硬件解码

YAML 写法(见 视频解码文档),按摄像头流的编码格式二选一:

# H.264 流 ffmpeg: hwaccel_args: preset-rpi-64-h264 # H.265 (HEVC) 流 ffmpeg: hwaccel_args: preset-rpi-64-h265

UI 写法:Settings > Global configuration > FFmpeg,把Hardware acceleration arguments设为Raspberry Pi (H.264)Raspberry Pi (H.265);单摄像头覆盖在 Settings > Camera configuration > Streams (FFmpeg) 中修改。

注意 preset 名称中的64表示这些 preset 面向 64 位 Raspberry Pi,这也是前面要求 64 位系统的原因。硬件加速没有 CPU 回退:一旦指定了 hwaccel,解码失败就直接报错,不会自动降级。

验证

验证分三层,均使用文档给出的方法:

  1. 解码设备是否正确:运行上面的v4l2-ctl循环,确认你映射进容器的那个/dev/video*节点能列出H264(对应你的 preset)。
  2. 硬件加速是否生效:查看容器日志。视频解码文档 的判定标准是:日志中要么出现硬件加速被自动检测到的信息,要么出现未自动检测到硬件加速的警告;既然你在配置里显式指定了 preset,正确的表现是日志中没有解码相关错误。
  3. Coral 是否被识别并在工作
    • 宿主机lsusb中设备从1a6e:089a Global Unichip Corp.变为18d1:9302 Google Inc.,说明 Coral 已完成初始化;
    • 重启 Frigate 后应开始看到person等对象的检测(见 getting started 的检测器配置说明)。

限制与已知问题

  • Coral 反复“卡住”需要重置时,排障文档 给出的常见原因是原装线缆问题和 VM 环境下的通信丢失;直连 Pi + 换线可先排除前者。
  • hwaccel_args指定的 preset 不匹配流编码或设备时,ffmpeg 会报错并反复重启解码进程,日志里会出现解码错误——此时回头核对 preset(H.264 vs H.265)与映射的/dev/video*设备。
  • 本文只覆盖 RPi 3/4 的 USB Coral 与媒体引擎解码;PCIe/M.2 Coral 需要 gasket 驱动,走的是另一套安装路径,不在本文范围内。

完成以上步骤后,Frigate 在 RPi 上即处于文档定义的完整形态:gpu_mem调大后 Pi 媒体引擎通过preset-rpi-64-*硬件解码,USB Coral 经带电源 hub 稳定供电并通过edgetpu检测器承担目标检测。后续如果日志出现 Bus error,再回到安装文档的 shm-size 计算一节调整shm_size

【免费下载链接】frigateNVR with realtime local object detection for IP cameras项目地址: https://gitcode.com/GitHub_Trending/fr/frigate

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询