本帖最后由 gasment 于 2025-6-6 17:03 编辑
我使用frigate 做nvr(网络录像机)来替代群晖的Surveillance Station已有半年,
期间尝试过的方案也不少,踩坑也不少,从单纯的录像,到HA联动,到人在检测,
现在已达成一套比较稳定的方案,可以拿出来供大家参考了
需要注意,frigate并不是一个轻量级的应用,要实现比较理想的运行效果,平台需要一定的性能,
(推荐为4核心带GPU的处理器,8G以上内存)
如果你只是需要一个简单的NVR,frigate并不适合你
那frigate可以做什么呢?
1、传统NVR 24x7监控录制,多种回看模式
2、基于本地特化AI模型推理的的对象识别
3、联动homeassistant,拓展为各类传感器
···
frigate(0.15.1)目前缺点:
1、没有移动端app,移动端浏览器回看操作不方便
2、资源占用比较大
3、没有汉化界面
···
看完以上,对部署frigate有兴趣的,可以进入正文了:
本文目录:
一、设备选型
二、frigate容器搭建参考
三、frigate配置参考
四、联动HA
五、其他问题
####2025.6.6更新编辑:修复一些编写错误,增加一些说明,优化frigate配置示例
一、设备选型参考
先说明下几个会提到的术语:
- 编解码:frigate需要解码视频流才可以进行后续处理,而编码是可选的(在保存视频格式不符需求时使用),编解码是资源密集型任务,需要占用一定性能
- 推理:frigate对象识别需要根据不同的模型进行推理识别,其单帧耗时为推理速度,推理速度跟模型参数量和处理的硬件水平有关,以官方推荐的Coral TPU为例子,其典型推理速为10ms,每秒可处理1000/10=100帧画面,再多就会丢失部分检测或排队阻塞,官方推荐每个视频流检测帧数为5,也就是最大可能接入20个视频流
- 模型:模型的类型与frigate检测器相关,模型有参数量大小之分,参数量大的模型,识别越精确,代价是推理速度的相应增加,比如yolo_nas模型分yolo_nas_s/m/l 三种
目前实践过的设备方案情况(功耗不含硬盘),测试环境为9路摄像头接入,全部启用检测与录制,CPU占用包含其他部署的服务(约占1%~5%) G4560(双核四线程)+ iGPU编解码+iGPU推理,平台功耗20~30W - OpenVino检测器+ssdlite_mobilenet_v2模型,推理速度:10-20ms,CPU平均占用50%,峰值70%;
- OpenVino检测器+yolo_nas_s模型,推理速度:20-30ms,CPU平均占用60%,峰值80%;
G4560(双核四线程)+ iGPU编解码+Coral推理,平台功耗20~30W - coral检测器+TensorFlow Lite模型,推理速度:8~12ms,CPU平均占用50%,峰值70%
I3-8100T(四核四线程)+ iGPU编解码+iGPU推理,平台功耗20~30W - OpenVino检测器+ssdlite_mobilenet_v2模型,推理速度:10-20ms,CPU平均占用30%,峰值50%;
- OpenVino检测器+yolo_nas_s模型,推理速度:20-30ms,CPU平均占用40%,峰值70%;
I3-8100T(四核四线程)+ iGPU编解码+Coral推理,平台功耗20~30W - coral检测器+TensorFlow Lite模型,推理速度:8~12ms,CPU平均占用30%,峰值50%
I3-8100T(四核四线程)+ nvidia T600编解码+nvidia T600推理,单显卡功耗20-30W - tensorrt检测器+yolov7-320模型,推理速度:20-30ms,CPU平均占用30%,峰值40%,显存占用1.2G
I3-8100T(四核四线程)+ nvidia T600编解码+Coral推理,单显卡功耗20-30W - coral检测器+TensorFlow Lite模型,推理速度:5-10ms,CPU平均占用30%,峰值40%,显存占用1.2G
CC150(八核十六线程)+ nvidia T600编解码+Coral推理,单显卡功耗20-30W - coral检测器+TensorFlow Lite模型,推理速度:5-10ms,CPU平均占用10%,峰值20%,显存占用1.2G
N100(四核四线程)+iGPU编解码+iGPU推理,平台功耗10~20W - OpenVino检测器+ssdlite_mobilenet_v2模型,推理速度:10-20ms,CPU平均占用40%,峰值70%;
N100(四核四线程)+iGPU编解码+Coral推理,平台功耗10~20W - coral检测器+TensorFlow Lite模型,推理速度:8~12ms,CPU平均占用40%,峰值70%
RK3588(八核ARM) + VPU编解码+NPU推理,平台功耗5~8W - rknn检测器+yolo_nas_s模型,推理速度:30-40ms,CPU平均占用30%,峰值50%;
- rknn检测器+yolo_nas_m模型,推理速度:40-50ms,CPU平均占用30%,峰值50%;
RK3588(八核ARM) + VPU编解码+Coral推理,平台功耗5~8W - oral检测器+TensorFlow Lite模型,推理速度:8~12ms,CPU平均占用30%,峰值50%
关于优化frigate检测的的一些经验:- frigate检测流程大概可以理解为:GPU流解码->CPU运动检测+裁剪->检测器推理,这3步都存在延迟问题,通过观察debug画面与现实之间的延迟来大概判断检测性能
- GPU流解码延迟:根据上面的实践经验,不同的硬件,解码速度貌似存在差异,在使用速度最快的coral检测器和rtsp原生流检测情况下,intel GPU和RK3588体现在debug画面上的延迟大约为2~3秒,加上检测对象需要经过数帧的对比(使用推荐检测帧率5fps),一共造成了3~4秒的识别延迟;使用N卡,比如我的T600,在debug画面上的延迟大约为0.5~1秒,如图,加上检测耗时,控制在了2秒内。以上为我自身环境测试,结果受摄像头性能,摄像头连接方式,网络环境等影响,仅供参考
-
- CPU运动检测+裁剪:frigate使用CPU进行帧间变化检测,也就是运动判断,判断为运动的帧,裁剪后喂给检测器做AI推理,提高检测流的分辨率和帧率,CPU将进行更多的帧间变化检测,工作量增加;因此,需要提升检测频率,CPU性能要够,优先提高CPU核心数,而不是单核性能
- 检测器推理:检测器延迟取决于检测器硬件,如上面方案所示,最低延迟是coral,典型的10ms延迟,最高可以达到每秒100帧的检测,如使用推荐检测帧率5fps,最高接入20路摄像头检测;最高延迟是RK3588,yolo_nas_m的40~50ms延迟最大接入3~5路;当然所有检测流同时满载的情况很少,可以根据实际适当放宽接入数量
- PS:
- 官方提供了可以改进模型的订阅方案Frigate+,可以上传自己的快照图片来训练专属模型,提高识别精度,该方案年费50刀,提供每年12次的模型导出,可供coral,intel/amd/nvidia GPU检测器使用,详情可查阅:https://docs.frigate.video/integrations/plus;
- 免费用户也可以上传自己的快照来为改进公共模型做贡献,说不定下一次frigate更新就会合入你的改进,关于隐私问题,查阅:https://docs.frigate.video/plus/faq
总结参考: 性价比之选: intel 4核,6代及以上带核显的CPU + 8G及以上内存+OpenVino检测器+ssdlite_mobilenet_v2模型 一个CPU即可包揽编解码和检测,而且与大部分人在用的设备重合度高,基本不用新增额外设备即可食用。 缺点:模型识别精度较低,核显解码流延迟在2~3秒 优化建议: - 升级到intel 6核以上,可以使用yolo_nas模型,提高识别精度同时降低CPU整体占用
如果你有大量摄像头需要跑检测,而且对识别精度有一定要求,可以额外增加一个Coral TPU Coral推荐买M.2接口的,实测群晖、飞牛OS都可以编译驱动,威联通官方有这玩意,但是注意适配机型 M.2接口版本市场价300左右,USB版无需驱动,兼容性更强,但是贵了1倍多,不是很推荐。增加Coral TPU不会显著降低检测流延迟
性能之选: 4核以上CPU + 8G及以上内存 + NVIDIA (RTX)显卡 + yolov模型 独立GPU解码流,有更低的检测流延迟(1秒内),适合需要快速识别的场景 缺点:功耗比较高,单显卡功耗去到20~30W,性价比低优化建议:
- 升级到8核或以上CPU,frigate占用可以压到个位数
- 增加一个Coral检测器代替yolov模型,配合8核或以上CPU,可以将检测器延迟压到6ms左右,增加最大接入检测数量
低功耗之选: RK3588 + 8G及以上内存 +yolo_nas_s/m模型 一个芯片同时具备编解码的VPU和推理的NPU,整合度很高,功耗低,日常5~7W 缺点:自带的NPU检测延迟较高,最大检测数量有限(5-7条流),VPU解码流延迟在2~3秒以上 优化建议: - 增加一个Coral检测器代替yolo_nas_s/m模型,可以将检测器延迟压到12ms左右,增加最大接入检测数量
- PS:A卡/APU也可以跑,官方文档也有提到,具体情况我没硬件测试不了
监控摄像头输入:
每个摄像头提供至少一条RTSP协议视频流即可,视频格式最好调整为H264或H265,音频为AAC,其他格式则需要额外重编码;
如果同时有最低720P的5FPS的子码流最好
理想情况为:
1条H265/H254 AAC 15fps以上 主码流用于录制
1条H254 无音频 5fps 子码流用于检测
修改摄像头的设置,采用贴近frigate检测预设的流格式(H265/H254 AAC 5fps),可以减少后期裁剪等处理,减少资源占用
docker容器统一使用docker-compose部署,怎么玩docker-compose就不讨论了,可以自行学习 frigate的web默认端口为5000和8971,5000无密码,注意保护,8971为有密码的https
排版可能有问题,可下载yaml文件注意#号后注释说明!
#####方案1:Intel CPU+ iGPU编解码+iGPU或Coral推理
version: "3.9"
services:
frigate:
container_name: frigate
privileged: true # 使用特权模式
restart: unless-stopped
image: ghcr.io/blakeblackshear/frigate:0.15.1
shm_size: "512mb" # 这个根据视频流数量来定,我这边9条流
devices:
- /dev/dri/renderD128:/dev/dri/renderD128 # GPU透传
#- /dev/apex_0:/dev/apex_0 #使用Coral推理,请取消#注释
volumes:
- /etc/localtime:/etc/localtime:ro
- /volume1/docker/frigate/config:/config #配置存放目录,请修改
- /volume4/NVR/frigate:/media/frigate #配置存放目录,请修改
- type: tmpfs
target: /tmp/cache
tmpfs:
size: 500000000
ports:
- "1984:1984" # go2rtc web
- "8971:8971"
- "5000:5000" # 群晖会冲突,修改为其他如5555:5000
- "8554:8554"
- "8555:8555/tcp"
- "8555:8555/udp"
environment:
FRIGATE_RTSP_PASSWORD: "passwd"
#PLUS_API_KEY: xxxxxxx-xxxxxx-xxxxxxxx #frigate+的api key(如果有)
######方案2:NVIDIA (RTX)显卡编解码+NVIDIA (RTX)显卡/coral推理,显卡推理的话首次启动会比较耗时,需要等待模型构建完成
version: "3.9"
services:
frigate:
container_name: frigate
privileged: true # 使用特权模式
restart: unless-stopped
image: ghcr.io/blakeblackshear/frigate:0.15.1-tensorrt #使用特定镜像
deploy:
resources:
reservations:
devices:
- driver: nvidia
capabilities: [gpu]
shm_size: "512mb" # 这个根据视频流数量来定,我这边9条流
#devices: #使用Coral推理,请取消#注释
#- /dev/apex_0:/dev/apex_0 #使用Coral推理,请取消#注释
volumes:
- /etc/localtime:/etc/localtime:ro
- /volume1/docker/frigate/config:/config #配置存放目录,请修改
- /volume4/NVR/frigate:/media/frigate #配置存放目录,请修改
- type: tmpfs
target: /tmp/cache
tmpfs:
size: 500000000
ports:
- "1984:1984" # go2rtc web
- "8971:8971"
- "5000:5000" # 群晖会冲突,修改为其他如5555:5000
- "8554:8554"
- "8555:8555/tcp"
- "8555:8555/udp"
environment:
FRIGATE_RTSP_PASSWORD: "passwd"
#PLUS_API_KEY: xxxxxxx-xxxxxx-xxxxxxxx #frigate+的api key(如果有
#####方案3:rockchip平台,由于frigate-rk镜像带的go2rtc无法调用rk的硬件编解码加速,这里需要另起一个go2rtc容器来处理前期的转码工作
#######go2rtc
version: "3.9"
services:
go2rtc:
container_name: go2rtc
image: alexxit/go2rtc:master-rockchip #使用特定镜像
network_mode: bridge
ports:
- 11984:1984
- 18554:8554
- 18555:8555 #端口需与frigate错开
privileged: true # 使用特权模式
restart: unless-stopped
environment:
- TZ=Atlantic/Shanghai
volumes:
- "/mnt/docker-data/go2rtc:/config" #配置存放目录,请修改
#####frigate
version: "3.9"
services:
frigate:
container_name: frigate
privileged: true # 使用特权模式
restart: unless-stopped
image: ghcr.io/blakeblackshear/frigate:0.15.1-rk #使用特定镜像
shm_size: "512mb" # 这个根据视频流数量来定,我这边9条流
#devices: #使用Coral推理,请取消#注释
#- /dev/apex_0:/dev/apex_0 #使用Coral推理,请取消#注释
volumes:
- /etc/localtime:/etc/localtime:ro
- /volume1/docker/frigate/config:/config #配置存放目录,请修改
- /volume4/NVR/frigate:/media/frigate #配置存放目录,请修改
- type: tmpfs
target: /tmp/cache
tmpfs:
size: 500000000
ports:
- "1984:1984" # go2rtc web
- "8971:8971"
- "5000:5000" # 群晖会冲突,修改为其他如5555:5000
- "8554:8554"
- "8555:8555/tcp"
- "8555:8555/udp"
environment:
FRIGATE_RTSP_PASSWORD: "passwd"
#PLUS_API_KEY: xxxxxxx-xxxxxx-xxxxxxxx #frigate+的api key(如果有
三、frigate配置参考
frigate的大部分设置由一个config文件来配置,在web配置的功能比较少,这也是上手难度比较大的原因
进入frigate web->Config Editor进行在线编辑,以下提供的配置参考,请逐行对比修改
由于yaml对缩进格式要求严格,如有排版错误,可下载完整配置,逐项对比修改:
注意#号后注释说明!
#号后为注释或无效代码,启用该行请删掉#
version: 0.15-1
mqtt: #如果需要联动HA,需要安装mqtt服务器,文末有介绍
enabled: true
host: 192.168.x.x
user: xxx
password: xxx
#↓↓↓↓↓↓↓↓↓↓↓↓go2rtc配置↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
go2rtc: ###建议配置detect和record两条流,检测流使用原生rtsp来降低延迟,录制流可做转码存储
streams:
camera-1-both: #aac+h265 可同时用于detect和record,命名为both
- rtsp://xxxxxxxxx
camera-2-detect: #非aac+h265 ,原生rtsp做检测
- rtsp://xxxxxxxxx
camera-2-record: #使用ffmpeg转码detect流为aac+h265,用于录制
- "ffmpeg:camera-2-detect#video=copy#audio=aac#hardware=cuda"
#video=copy为不转码视频,#video=h264为转码视频为h264,#audio=aac为转码音频为aac,#hardware=cuda为使用N卡硬件加速(音频无法加速),intel/amd为hardware=vaapi
#video=h264#width=1280#height=720#audio=aac#hardware=cuda,以上为转码H264+AAC,缩小分辨率为720p,注意添加分辨率参数时不可使用video=copy,需为video=h264/video=h265
#注意:rk3588不要在此处使用视频转码,可以使用音频转码(音频转码只能CPU软转码),需要转码视频请使用外部专用go2rtc,参考文未补充
camera-3-detect: #h264+无音频
- rtsp://xxxxxxx
camera-3-record: #aac+h265
- rtsp://xxxxxxx
#camera-3为理想情况,detect和record两条原生流独立,格式符合预期,无需转码
####更多摄像头按需按格式添加
#↓↓↓检测器配置,以下4选1,多余的删除↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
detectors:
coral: #m.2版coral使用
type: edgetpu
device: pci
detectors:
ov: #intel GPU推理使用
type: openvino
device: GPU
detectors:
tensorrt: #N卡推理使用
type: tensorrt
device: 0 #使用第0个GPU
detectors:
rknn:
type: rknn
num_cores: 3 #rk3588添加此项,开启3个NPU
#↓↓↓模型配置,按检测器选用其一,多余的删除,如使用coral,无需配置此项↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
model: ###openvino使用,此模型容器自带
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
model: ###openvino使用,此模型需要自行构建,参考https://docs.frigate.video/confi ... #supported-models-2
model_type: yolonas
width: 320
input_pixel_format: bgr
input_tensor: nchw
path: /config/yolo_nas_s.onnx #将构建好的模型放入此路径
labelmap_path: /labelmap/coco-80.txt
model: ###tensorrt使用,此模型需要本机构建,最好有科学上网,首次启动构建耗时较长
path: /config/model_cache/tensorrt/yolov7-320.trt
labelmap_path: /labelmap/coco-80.txt
input_tensor: nchw
input_pixel_format: rgb
width: 320
height: 320
model: ###rknn使用,此模型容器自带
path: deci-fp16-yolonas_s #另外有deci-fp16-yolonas_m和deci-fp16-yolonas_l,对应大中小3个参数量,越大延迟越高
width: 320
height: 320
input_pixel_format: bgr
input_tensor: nhwc
labelmap_path: /labelmap/coco-80.txt
#↓↓↓检测参数配置↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
detect:
enabled: true
width: 1280 #检测分辨率不是越大越好,需要根据对象在画面的大小比例确定,参考:https://docs.frigate.video/frigate/camera_setup
height: 720
fps: 6 #检测帧数,官方推荐5,可以配合摄像头输出做增减,最高不要超过10
annotation_offset: -1000 #检测框微调,观察web中的explore->Tracked Object Details->Object Lifecycle中的红色检测框,如果检测框落后于检测对象的位置,需要给与负延迟修正,反之增加,单位ms
objects:
track: #声明可用于跟踪的对象
- person
- bicycle
- car
- motorcycle
- cat
- dog
#↓↓↓录制参数配置↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
record:
enabled: true
retain:
days: 14
mode: all #此为14天全时录制
alerts:
retain:
days: 7
mode: motion #带运动的片段保留7天
snapshots:
enabled: true #开启快照,可用于上传frigate+
clean_copy: true
timestamp: false
bounding_box: true
crop: false
height: 720 #快照尺寸720p
retain:
default: 14 #保留14天
quality: 100
#↓↓↓摄像头配置↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
cameras:
camera-2: #摄像头名称,可自定义,建议与go2rtc中的对应
live:
stream_name: camera-2-record #实时预览,使用record流,保证音频可用
ffmpeg:
output_args:
record: preset-record-generic-audio-copy #输出参数,开启音频录制,不要使用preset-record-generic-audio-aac,当前版本0.15.1无法工作,会导致音频流丢失,录音只接受aac,需要在go2rtc提前转码
inputs:
- path: rtsp://127.0.0.1:8554/camera-2-record #录制流输入,本地go2rtc复用
input_args: preset-rtsp-restream-low-latency #go2rtc流复用低延迟参数,如果有问题,可以换为preset-rtsp-restream尝试,非复用流使用preset-rtsp-generic
hwaccel_args: preset-nvidia #硬件加速预设参数
#preset-nvidia适用n卡加速解码h264/h265,
#preset-vaapi适用intel/amd gpu的加速解码h264/h265
#preset-intel-qsv-h264和preset-intel-qsv-h265分别对应intel的加速解码h264/h265
#preset-rk-h264和preset-rk-h265分别对应rk3588的加速解码h264/h265
#选用什么预设,根据输入流格式和当前硬件而定
roles:
- record #声明此流用于录制
- path: rtsp://127.0.0.1:8554/camera-2-detect #检测流输入,本地go2rtc复用
input_args: preset-rtsp-restream-low-latency #同record
hwaccel_args: preset-nvidia #同record
roles:
- detect #声明此流用于检测
detect:
#enabled: false #可以单独关闭某一个摄像头的检测
#width: 1920 #可以单独调整某一个摄像头的检测分辨率
#height: 1080
#fps: 10 #可以单独调整某一个摄像头的检测帧率,对于快速运动的画面或需要提升检测速度,可以尝试提升fps,提升fps要根据CPU和检测器性能来量力而为
zones: #zone不使用代码配置,但也可以事先设定一个不符合实际的,方便添加一些不可以在web添加的参数,zone区域之后在web修改
camera-2-person: #区域名称,自定义
coordinates: 0.204,0.153,0.209,0.69,0.739,0.646,0.816,0.376,0.798,0.245 #此为区域坐标,需要在web修改,这里预设了一些不符实际的,只是方便添加参数
loitering_time: 0
objects: person #只跟踪人
inertia: 3
#filters: #filters过滤参数,默认参数对检测躺着的人不准确,可以按需修改如下的ratio比例
#person:
#min_ratio: 0.3
#max_ratio: 3.0
motion: #motion不使用代码配置,但也可以事先设定一个不符合实际的,之后在web修改
mask: 0.736,0,0.74,0.05,0.877,0.048,0.88,0.093,0.995,0.093,0.994,0
threshold: 30
contour_area: 30
improve_contrast: true
objects: #对于复杂场景,可定义对象识别的阈值来减少误判
filters:
person: #人
min_score: 0.6 #低于0.6 score 的人会立刻放弃跟踪,避免一些误识别,score可以理解为吻合度,过低的min_score会导致不必要的跟踪,过高的min_score会导致必要的跟踪被忽略
threshold: 0.75 #判断阈值,一段时间内的score高于此值就会被判断为“人”,过低的threshold容易误判,过高的threshold则无法触发人在
#建议室内min_score为0.4~0.5,室外复杂场景可以提高到0.6
#threshold对于需要低误触发的,可以设置到0.7以上,一般半身人的score都能在0.8以上,最高不要超过0.8,比如coral检测器的默认模型最高score也只有0.84
#bicycle:
#car:
#motorcycle: #其他对象也可以如此设置阈值
#cat:
#dog:
review: #回放选项
alerts: #告警片段仅记录特定区域中的特定对象
required_zones:
- camera-2-person
labels:
- person
snapshots: #快照仅记录特定区域
required_zones:
- camera-2-person
#▲▲▲▲▲▲▲▲以上为一个摄像头的配置参考,更多摄像头按照格式如法炮制:↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
camera-3:
live:
stream_name:
ffmpeg:
output_args:
inputs:
···················
7、按顺序完成以上配置后,重启frigate,观察frigate web上的日志是否有报错或警告 8、web相关配置 - 进入frigate的5000端口web管理页,进入setting->UI Settings->First Weekday,这里可改成monday
- 进入Users,新建一个用户,用于8971端口登录,可以删掉原有的admin用户
- 进入Masks / Zones,修正或添加我们预设的不符实际的摄像头的区域:
- zones:为检测区域,比如想检测人在,就框起来一个区域,Objects选person
- Motion Masks:运动遮罩区域,用于排除一些固定存在的元素,比如摄像头带的水印、OSD时间戳等,区域大小不要过大,不要滥用Motion Masks来限制检测,会造成对象跟踪困难
- Object Masks:对象遮罩,用于排除一些固定的误报区域,比如风吹动的树,固定停放的车等
- 进入Motion Tuner,可以调整触发运动检测的阈值,可以使用隔壁的debug画面来调试
- 完成以上,记得重启frigate容器
9、补充配置(rk3588 专用go2rtc) 按照方案3的go2rtc docker-compose启动容器,进入go2rtc的web(ip:11984),检查ADD选项卡下的ffmpeg hardware,rkmpp是否为OK,OK代表已准备好硬件加速 然后转到config,编辑config
streams:
camrea-1:
- ffmpeg:rtsp://xxxxxxx#video=h264#audio=aac#hardware=rkmpp
######专用go2rtc与frigate里的写法大同小异,相应修改frigate中的go2rtc的rtsp流地址为专用go2rtc的ip如rtsp://192.168.x.x:18554/camrea-1来代摄像头原生rtsp
四、联动homeassistant HACS商店直接搜索frigate安装集成即可,接入后就有很丰富的实体,这是最简单直接的方法(如果添加后实体不可用,需要配置mqtt集成连接到mqtt服务器 需要搭建MQTT服务器,比如EMQX,在frigate配置中配置mqtt参数后,其他mqtt客户端就可以订阅相关主题,自动化可以配合nodered食用 https://docs.frigate.video/integrations/mqtt PS:搭建MQTT服务器:EMQX Docker-compsoe: version: '3'
services:
emqx:
image: emqx/emqx:5.8.4
container_name: emqx
restart: unless-stopped
volumes:
- /volume1/docker/mqtt-server/data:/opt/emqx/data #挂载目录,自行修改
- /volume1/docker/mqtt-server/log:/opt/emqx/log #挂载目录,自行修改
network_mode: bridge
ports:
- 1883:1883
- 8083:8083
- 8084:8084
- 8883:8883
- 18083:18083 #web
healthcheck:
test: ["CMD", "/opt/emqx/bin/emqx", "ctl", "status"]
interval: 5s
timeout: 25s
retries: 5
启动成功后登录web端口18083,进入【访问控制】->【客户端认证】->【内置数据库】->【用户管理】,添加用户即可,frigate和ha登录到该mqtt服务器,frigate集成实体可恢复可用
HA在【设备与服务】搜索集成mqtt,按提示添加连接
使用http get/post等协议来获取一些数据,或者控制一些参数 https://docs.frigate.video/integrations/api/frigate-http-api 官方的Advanced Camera Card功能太杂,我用的WebRTC Camera集成,配置集成连接frigate的go2rtc端口1984即可 卡片模板:
<font face="Arial">type: custom:webrtc-camera
url: #在go2rtc中配置的摄像头名字,如main-door-right</font>
五、其他问题 1、如果你的视频流是h265,需要使用支持HEVC的浏览器才可以正常预览视频 - windows10及以上可以安装HEVC Video Extensions扩展+EDGE/Chrome浏览器
- linux(debian/ubuntu等)可以使用Chromium浏览器,配合启动参数:
<font face="Arial">--enable-features=AcceleratedVideoDecodeLinuxGL,AcceleratedVideoEncoder</font>
我在debian12+kde桌面环境上测试成功 手机iOS使用Safari、edge等都可,安卓我使用小米自带浏览器也可 2、检查rk3588 NPU的使用率(这个功能在下个大版本16.x会集成到web)
<font face="Arial">cat /sys/kernel/debug/rknpu/load
NPU load: Core0: 0%, Core1: 0%, Core2: 0%</font>
3、群晖、飞牛OS使用N卡,安装商店提供的驱动即可 4、群晖、飞牛OS使用coral TPU(pcie),需要编译驱动文件,加载后才可使用
|