使用 Seeed Odyssey 的 FRIGATE NVR 项目
什么是 Frigate NVR?

来自 frigate 官方网站 的示例图片
"Frigate 是一个基于实时 AI 目标检测的开源 NVR。所有处理均在您自己的硬件上本地完成,您的摄像头视频流永远不会离开您的家。" -- Frigate NVR
Frigate NVR 是最受欢迎的网络视频录像机项目之一,它为您的安全摄像头添加了本地处理的 AI 功能,因此您不仅可以避免为云推理服务器支付高昂费用,还可以确保您的宝贵私人摄像头视频流不会暴露在公共互联网中。Frigate 可以通过单个 Google Coral TPU 每秒处理 100 多个目标检测,您可以根据自己的使用场景自定义检测区域和遮罩。它还可以与 Home Assistant 和其他自动化平台集成,只需最少的设置工作即可提供更多安全功能,并将边缘 AI 解决方案集成到您的宝贵资产中。
前置条件
- 1 x Odyssey Blue: Quad Core Celeron J4125 Mini PC with 128GB external SSD
- 1 x Coral USB Accelerator(可选)
- RTSP 摄像头流
- 键盘和 HDMI 显示器
确保 Odyssey Blue 已连接到与您的 RTSP 网络摄像头相同的网络,或者可以访问您的 RTSP 网络摄像头。
入门指南
在本指南中,我们将向您展示如何配置 Frigate Docker 环境,在 Seeed Studio 的 Odyssey Blue 上使用 Coral USB Accelerator 对 RTSP 摄像头流进行本地 AI 检测。有关 Home Assistant 插件设置,请继续关注!
步骤 1: 确保您已在 Odyssey Blue 上安装了 Debian 11
请下载 Debian 11 操作系统镜像,并按照此处的安装指南在 Odyssey Blue 上安装 Debian 11 操作系统。
步骤 2: 确保您已在 Debian 11 上安装了 Docker 引擎和 Docker Compose
请按照 在 Debian 上安装 Docker 引擎 的指南安装 Docker 引擎和 Docker Compose。
检查是否成功安装了 Docker:
请打开终端应用并输入以下命令:
docker -v
您应该会在终端中看到以下输出:

步骤 3: 创建 Frigate Docker 文件
在终端应用中输入以下命令,使用 vi 文本编辑器创建 Frigate Docker 文件:
1 mkdir ~/Documents/frigate
2 cd ~/Documents/frigate
3 vi frigate.yml
在 frigate.yml 文件中插入以下内容以设置 Frigate 的 docker-compose 配置,并根据您的环境设置替换必要的部分。
version: "3.9"
services:
frigate:
container_name: frigate
privileged: true # 对于所有设置可能不是必需的
restart: unless-stopped
image: blakeblackshear/frigate:stable-amd64
shm_size: "64mb" # 根据上述计算为您的摄像头更新
devices:
- /dev/bus/usb:/dev/bus/usb # 传递 USB Coral,需要为其他版本修改
- /dev/apex_0:/dev/apex_0 # 传递 PCIe Coral,请按照此处的驱动程序说明操作 https://coral.ai/docs/m2/get-started/#2a-on-linux
- /dev/dri/renderD128 # 用于 Intel 硬件加速,需要根据您的硬件更新
volumes:
- /etc/localtime:/etc/localtime:ro
- /path/to/your/config.yml:/config/config.yml:ro
- /path/to/your/storage:/media/frigate
- type: tmpfs # 可选:1GB 内存,减少 SSD/SD 卡磨损
target: /tmp/cache
tmpfs:
size: 1000000000
ports:
- "5000:5000"
- "1935:1935" # RTMP 流
environment:
FRIGATE_RTSP_PASSWORD: "password"
有关 Frigate docker-compose yaml 配置选项的更多详细信息,请访问 Frigate 文档页面。
在我的案例中,我的 frigate.yml 文件如下所示:
version: "3.7"
services:
frigate:
container_name: frigate
privileged: true # 对于所有设置可能不是必需的
restart: unless-stopped
image: blakeblackshear/frigate:stable-amd64
shm_size: "64mb" # 根据上述计算为您的摄像头更新
devices:
- /dev/bus/usb:/dev/bus/usb # 传递 USB Coral,需要为其他版本修改
- /dev/apex_0:/dev/apex_0 # 传递 PCIe Coral,请按照此处的驱动程序说明操作 https://coral.ai/docs/m2/get-started/#2a-on-linux
- /dev/dri/renderD128 # 用于 Intel 硬件加速,需要根据您的硬件更新
volumes:
- /etc/localtime:/etc/localtime:ro
- /home/seeed/Documents/frigate/config/config.yml:/config/config.yml:ro
- /home/seeed/Documents/frigate:/media/frigate
- type: tmpfs # 可选:1GB 内存,减少 SSD/SD 卡磨损
target: /tmp/cache
tmpfs:
size: 1000000000
ports:
- "5000:5000"
- "1935:1935" # RTMP 流
environment:
FRIGATE_RTSP_PASSWORD: "password"
步骤 4: 创建 Frigate 配置文件
在终端应用中输入以下命令以创建配置文件夹:
1 cd ~/Documents/frigate
2 mkdir config/
3 cd config/
输入以下命令使用 vi 文本编辑器创建 Frigate 配置文件:
1 vi config.yml
然后复制以下内容以进行最低配置设置,使 Frigate 能够运行:
mqtt:
host: mqtt.server.com #请替换为有效的 MQTT Broker
cameras:
back:
ffmpeg:
inputs:
- path: rtsp://viewer:{FRIGATE_RTSP_PASSWORD}@10.0.10.10:554/cam/realmonitor?channel=1&subtype=2 #替换为您的 RTSP 摄像头 URL
roles:
- detect
- rtmp
detect:
width: 1280
height: 720
请访问 Frigate 文档页面的 configuration 部分以了解所有配置选项。
在我的情况下,除了以下根据我的设置自定义的配置列表外,其余配置保持默认:
- MQTT: broker.hivemq.com
- 检测器:Coral USB Accelerator
- 摄像头: rtsp://192.168.8.34:8080/unicast
- 跟踪对象: person, cup (注意:对象标签列表可以在 Frigate 文档页面的 Objects 部分找到)
- 录制: 当检测到 Person 或 Cup 时,录制时间为检测前 2 秒和检测后 2 秒。
因此我的 config.yml 文件如下所示:
mqtt:
host: broker.hivemq.com # 使用 HiveMQ MQTT Broker 进行测试
detectors:
# 必需: 检测器名称
coral:
# 必需: 检测器类型
# 有效值为 'edgetpu'(需要下面的设备属性)和 'cpu'。
type: edgetpu
# 可选: 设备名称,定义见 https://coral.ai/docs/edgetpu/multiple-edgetpu/#using-the-tensorflow-lite-python-api
device: usb
# 可选: 模型修改
model:
# 可选: 模型路径(默认: 根据检测器自动设置)
path: /edgetpu_model.tflite
# 可选: 标签映射路径(默认: 如下所示)
labelmap_path: /labelmap.txt
# 必需: 对象检测模型输入宽度(默认: 如下所示)
width: 320
# 必需: 对象检测模型输入高度(默认: 如下所示)
height: 320
cameras:
back:
ffmpeg:
inputs:
- path: rtsp://192.168.8.34:8080/unicast
roles:
- detect
- rtmp
# 可选: 检测配置
# 注意: 可以在摄像头级别覆盖
detect:
# 可选: 用于检测角色输入的帧宽度(默认: 如下所示)
width: 800
# 可选: 用于检测角色输入的帧高度(默认: 如下所示)
height: 600
# 可选: 摄像头的期望帧率,用于检测角色输入(默认: 如下所示)
# 注意: 推荐值为 5。理想情况下,尝试降低摄像头的 FPS。
fps: 8
# 可选: 启用摄像头检测(默认: True)
# 此值可以通过 MQTT 设置,并将在启动时根据保留值更新
enabled: True
# 可选: 没有检测到对象的帧数,超过此值后 Frigate 将认为对象已消失。(默认: 帧率的 5 倍)
max_disappeared: 25
# 可选: 静止对象跟踪配置
stationary:
# 可选: 确认静止对象的频率(默认: 如下所示)
# 设置为 0 时,只有检测到运动时才会确认静止对象。
# 如果设置为 10,则每 10 帧运行一次对象检测以确认对象仍然存在。
interval: 0
# 可选: 对象位置未变化的帧数,超过此值后对象被认为是静止的(默认: 帧率的 10 倍或 10 秒)
threshold: 50
# 可选: 跟踪静止对象的最大帧数(默认: 未设置,永久跟踪)
# 这可以帮助减少误报,例如某些对象应该只静止有限时间。
max_frames:
# 可选: 所有对象类型的默认值(默认: 未设置,永久跟踪)
default: 3000
# 可选: 特定对象值
objects:
person: 1000
# 可选: 对象配置
# 注意: 可以在摄像头级别覆盖
objects:
# 可选: 从 labelmap.txt 中跟踪的对象列表(默认: 如下所示)
track:
- person
- cup
# 可选: 录制配置
# 注意: 可以在摄像头级别覆盖
record:
# 可选: 启用录制(默认: 如下所示)
# 警告: 如果在配置中禁用了录制,稍后通过 UI 或 MQTT 启用将无效。
# 警告: Frigate 当前不支持根据可用磁盘空间自动限制录制。
# 如果使用录制,必须为录制段指定保留天数,以适应磁盘空间,否则 Frigate 将崩溃。
enabled: True
# 可选: 清理运行之间的分钟数(默认: 如下所示)
# 如果希望减少磁盘录制段删除的频率以最小化 I/O,可以使用此设置。
expire_interval: 60
# 可选: 录制的保留设置
retain:
# 可选: 无论事件如何,保留录制的天数(默认: 如下所示)
# 注意: 如果只希望保留事件的录制,应将此设置为 0,并在下面的事件部分定义保留。
days: 0
# 可选: 保留模式。可用选项为: all, motion 和 active_objects
# all - 保存所有录制段,无论是否有活动
# motion - 保存所有录制段,检测到任何运动
# active_objects - 保存所有录制段,检测到活动/移动对象
# 注意: 此模式仅在上述天数设置大于 0 时适用
mode: all
# 可选: 事件录制设置
events:
# 可选: 长事件期间保留视频的最大时间长度。(默认: 如下所示)
# 注意: 如果对象被跟踪的时间超过此值,保留的录制将是事件的最后 x 秒,除非 record->retain->days > 0。
max_seconds: 300
# 可选: 包括事件前的秒数(默认: 如下所示)
pre_capture: 2
# 可选: 包括事件后的秒数(默认: 如下所示)
post_capture: 2
# 可选: 保存录制的对象。(默认: 所有跟踪的对象)
objects:
- person
- cup
# 可选: 限制录制到进入任何列出的区域的对象(默认: 无需区域)
required_zones: []
# 可选: 事件录制的保留设置
retain:
# 必需: 默认保留天数(默认: 如下所示)
default: 10
# 可选: 保留模式。(默认: 如下所示)
# all - 保存所有事件录制段,无论是否有活动
# motion - 保存所有事件录制段,检测到任何运动
# active_objects - 保存所有事件录制段,检测到活动/移动对象
mode: motion
# 可选: 每个对象的保留天数
objects:
person: 2
cup: 3
步骤 5: 启动 Frigate Docker 容器
1 cd ~/Documents/frigate
2 sudo docker-compose -f frigate.yml up
若需排查问题,可以通过打印 Docker 日志来查看错误:
sudo docker logs frigate
步骤 6: 查看 Frigate Web 前端
通过在终端中输入以下命令,找到 Odyssey Blue 服务器的 IP 地址:
1 ip a
你应该会在终端中看到类似的输出,根据你的连接设置找到有效的 IP 地址:

一旦找到 Odyssey Blue 的 IP 地址,请打开你喜欢的网页浏览器,并在地址栏中输入 ip-address:5000。例如,在我的情况下,IP 地址是 192.168.8.57,因此我在浏览器地址栏中输入的 URL 是 192.168.8.57:5000,你应该会进入类似于下图的主页:

要观察实时检测,请点击视频流,然后点击主视图右上角的 Debug 按钮,再点击实时视频流下方的 SHOW OPTIONS 按钮,勾选 Bonding Box 或其他你希望在实时视频流中看到的选项。

尽情探索 Odyssey Blue 上的 Frigate 更多选项吧!你还可以查看其他单板计算机(SBC)选项,例如 reComputer 系列,为你的应用添加边缘 AI 功能。
技术支持与产品讨论
感谢您选择我们的产品!我们为您提供多种支持渠道,确保您使用我们的产品时体验顺畅。我们提供多种沟通方式,以满足不同的偏好和需求。