数字营销 · Web开发 · 基础设施

使用 Frigate 替代传统 NVR,实现 AI 智能监控

传统 NVR 只能持续录像,查找事件往往需要反复拖动时间轴。本文介绍如何利用闲置的 X86 电脑和 Frigate 搭建一套本地运行的 AI 智能监控系统,实现录像、目标识别和事件管理。

传统 NVR 最大的问题,是只能录像。摄像头每天 24 小时持续记录视频,但真正有价值的内容可能只有几分钟。当需要查找某个事件时,也只能不断拖动时间轴,一点点回看录像。

现在市面上其实已经出现了很多支持 AI 功能的智能 NVR,可以识别人、车辆、宠物等目标,并自动生成事件记录。但这类设备通常价格不低,而且不同品牌的功能、扩展性和使用方式也受到限制。

如果你手里正好有一台闲置的 X86 电脑,其实可以自己搭建一套 AI 智能监控系统,我目前使用的是 Frigate。

Frigate NVR状态页

什么是 Frigate?

Frigate 是一套开源的 AI NVR 系统,可以接入支持 RTSP 协议的网络摄像头,并通过 AI 对摄像头画面进行实时分析,识别人、车辆、宠物等目标。

当系统检测到目标之后,会自动生成事件记录,因此查找录像的方式也从传统的按时间查找,变成了按事件查找。

比如想查看今天有哪些人进入过办公室,不需要再翻几个小时的录像,只需要直接查看 Person Events 即可。

一台闲置 X86 电脑就可以开始

Frigate 不需要专门购买 NVR 设备,一台普通的 X86 电脑就可以作为服务器。闲置台式机、小型主机、Intel NUC、旧笔记本电脑,甚至自己组装的低功耗服务器都可以使用。

再加上支持 RTSP 的网络摄像头,整个系统的基本架构其实很简单:

网络摄像头 → RTSP 视频流 → X86 电脑 → Frigate → 录像 + AI 识别 + 事件管理

具体硬件配置主要取决于摄像头数量。如果只有一两个摄像头,对硬件的要求并不高;如果需要同时处理多路高清视频,则建议增加 GPU 或其他硬件加速设备。

GPU 和 TPU 分别负责什么?

在 Frigate 的部署过程中,比较容易混淆的就是 GPU 和 Google Coral TPU。实际上,它们负责的工作并不相同。

GPU 主要用于视频硬件解码。摄像头会持续发送视频流,如果全部依靠 CPU 解码,多路摄像头很容易占用大量 CPU 资源。因此可以利用 Intel 集成显卡、NVIDIA GPU 或 AMD GPU 进行硬件解码,降低 CPU 的压力。如果不使用 TPU,部分 GPU 也可以承担 AI 推理任务。

Google Coral TPU 则是专门用于 AI 推理的硬件设备,主要负责识别画面中的人、车辆、动物等目标。需要注意的是,TPU 本身并不参与视频解码。

Google Coral TPU
Google Coral TPU

因此,如果摄像头数量较多,一个比较合理的方案是使用 GPU 或集成显卡处理视频解码,再使用 Coral TPU 负责 AI 目标识别,让不同硬件分别处理自己擅长的工作。

使用 Docker 部署 Frigate

Frigate 推荐使用 Docker 运行,部署过程并不复杂。准备好 Docker 和 Docker Compose 之后,创建配置文件,然后执行:

docker compose up -d

如果服务器支持 GPU,还需要将显卡设备共享给 Docker 容器。

启动完成之后,通过浏览器访问:

http://服务器IP:5000

即可进入 Frigate 管理后台。

Frigate 的配置

Frigate 使用 YAML 文件进行配置,摄像头、RTSP 视频流、AI Detector、GPU 硬件加速、录像规则和事件管理等内容都可以在配置文件中完成。

下面是我目前正在使用的配置:

logger:
default: warning

mqtt:
enabled: false

database:
path: /config/frigate.db

birdseye:
enabled: true
mode: continuous

detectors:
ov:
type: openvino
device: GPU

model:
width: 300
height: 300
input_tensor: nhwc
input_pixel_format: bgr
path: /openvino-model/ssdlite_mobilenet_v2.xml
labelmap_path: /openvino-model/coco_91cl_bkgr.txt

ffmpeg:
global_args: -hide_banner -loglevel warning
hwaccel_args: preset-vaapi
input_args: preset-rtsp-udp
output_args:
record: preset-record-generic-audio-copy

detect:
enabled: true
fps: 8
max_disappeared: 20

audio:
enabled: true
max_not_heard: 10
min_volume: 200
listen:
- fire_alarm
- bark
- scream
- yell
- crying
- clapping
- footstep
filters:
speech:
threshold: 0.98

snapshots:
enabled: true
bounding_box: true
retain:
default: 0
objects:
person: 90
all: 30
quality: 70

record:
enabled: true
sync_recordings: true
expire_interval: 360
retain:
days: 90
mode: active_objects
alerts:
pre_capture: 5
post_capture: 5
retain:
days: 180
mode: motion
detections:
pre_capture: 5
post_capture: 5
retain:
days: 360
mode: active_objects

go2rtc:
rtsp:
username: admin
password: admin888
streams:
Room:
rtsp://admin:admin888@192.168.1.10:554/h265/ch1/main/av_stream
Room_sub:
rtsp://admin:admin888@192.168.1.10:554/h265/ch1/sub/av_stream

cameras:
Room:
ffmpeg:
inputs:
- path: rtsp://127.0.0.1:8554/Room
input_args: preset-rtsp-restream
roles:
- record
- path: rtsp://127.0.0.1:8554/Room_sub
input_args: preset-rtsp-restream
roles:
- audio
- detect
motion: {}
birdseye:
order: 0
live:
streams:
Room: Room

我的这套配置使用 Intel 核显进行视频硬件解码,同时使用 OpenVINO GPU Detector 进行 AI 目标识别,因此并没有使用 Google Coral TPU。

这里需要注意的是,不同硬件环境的配置会有所区别。例如 Intel 核显、NVIDIA GPU、Coral USB TPU 和 Coral PCIe TPU 的配置方式都不同,所以这份配置更适合作为参考,而不是直接复制使用。

建议使用主码流录像,子码流检测

如果摄像头支持双码流,我比较建议将主码流和子码流分开使用。

主码流负责保存录像,保证最终的视频质量;子码流则用于 AI 检测。因为 AI 检测并不一定需要使用最高分辨率的视频,使用低码率或低分辨率的子码流进行检测,可以明显降低系统资源消耗。

我目前的配置也是采用这种方式:

主码流 → 高清录像子码流 → AI 检测

如果只接入一两个摄像头,这种优化可能没有那么明显,但当摄像头数量增加之后,对降低 CPU、GPU 和整体系统负载会有比较大的帮助。

从时间轴查找,变成按事件查找

Frigate 最明显的体验变化,其实并不是录像本身,而是查找录像的方式。

以前使用传统 NVR 时,如果知道某件事情发生过,但不知道具体时间,只能打开录像之后不断拖动时间轴回看。

Frigate 则会根据 AI 检测结果自动生成事件。比如检测到 Person、Car 等目标之后,就会将对应的画面记录到 Events 中。

因此,之后需要查找录像时,可以直接根据事件、摄像头和时间进行筛选,而不需要从连续几个小时的视频中慢慢寻找。

这也是我认为 Frigate 相比传统 NVR 最大的价值。

还可以与 Home Assistant 联动

如果已经使用 Home Assistant,Frigate 还可以进一步与其他智能设备联动。

例如摄像头检测到有人出现之后,可以将事件发送给 Home Assistant,再通过自动化控制灯光、音箱或其他设备。

如果进一步加入人脸识别,还可以判断具体是谁回家,然后执行不同的自动化操作。

对于家庭用户来说,这会让监控系统不再只是一个独立的录像设备,而成为整个智能家居系统的一部分。

写在最后

现在已经有很多支持 AI 功能的智能 NVR 产品,如果只是希望购买一套开箱即用的监控设备,它们当然会更加方便。

但如果手里正好有一台闲置的 X86 电脑,又希望拥有更高的自由度,那么 Frigate 提供了另外一种选择。

通过一台普通电脑、网络摄像头和 Frigate,就可以搭建一套本地运行的 AI 智能监控系统,实现录像、目标识别和事件管理等功能。

而且整个系统可以根据自己的需求不断调整和扩展。

对我来说,Frigate 最大的意义并不是完全替代某一款传统 NVR,而是可以利用现有硬件,用相对较低的成本搭建一套真正属于自己的智能监控系统。

评论0

欢迎分享你的看法,也欢迎补充不同的实践经验。