本帖最后由 gasment 于 2025-8-23 15:25 编辑
2025.8.22更新编辑
更新到0.16.0正式版,重写大部分文案,添加了新功能的配置分享
我从0.16.0 beta 2开始使用到正式版,期间发现的一些比较大的变化有:
- web支持了中文,还有中文的官网和配置文档Frigate中文文档,对比英文原版文档少了个AI功能,美中不足吧,那个AI功能挺好用,有些配置问它可以少走弯路
- 免费非订阅用户新增了人脸识别、车牌识别功能
- web页新增了一些性能指标项目
- 非aac音频可以正常录制了(实时预览依旧不行)
从0.15.x升级按理说是会自动处理配置变化,但是以防万一,建议另起一个容器测试
N卡推理用户要注意,原先的tensorrt检测器已移除对N卡的支持,需要修改检测器和模型设置
部分intel GPU用户反应硬件加速功能失效,作者已确认问题,并将在0.16.1得到修复
intel GPU用户如果需要继续升级,并且使用硬件加速,可以使用临时修复的镜像(在docker部署一栏有提及)
我使用frigate 做nvr(网络录像机)来替代群晖的Surveillance Station已有半年,
期间尝试过的方案也不少,踩坑也不少,从单纯的录像,到HA联动,到人在检测,
现在已达成一套比较稳定的方案,可以拿出来供大家参考了
需要注意,frigate并不是一个轻量级的应用,要实现比较理想的运行效果,平台需要一定的性能,
(推荐为4核心带GPU的处理器,8G以上内存)
如果你只是需要一个简单的NVR,frigate并不适合你
那frigate可以做什么呢?
- 传统NVR 24x7监控录制,多种回看模式
- 基于本地特化AI模型推理的的对象识别,人脸识别、车牌识别
- 联动homeassistant,拓展为各类传感器
frigate(0.16.0)目前缺点:
- 没有好用的移动端app,移动端浏览器回看操作不方便
- 资源占用比较大
···
看完以上,对部署frigate有兴趣的,可以进入正文了:
本文目录:
序、设备选型
一、frigate容器搭建参考
二、frigate配置参考
三、联动HA
四、其他问题
序、设备选型参考
先说明下几个会提到的术语:
- 编解码: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推理 - 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 - coral检测器+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即可包揽编解码和检测,而且与大部分人在用的设备重合度高,基本不用新增额外设备即可食用。 缺点:模型识别精度较低,解码延迟较明显 优化建议: - 升级到intel 6核以上,可以使用yolo_nas模型,提高识别精度同时降低CPU整体占用
如果你有大量摄像头需要跑检测,而且对识别精度有一定要求,可以额外增加一个Coral TPU Coral推荐买M.2接口的,实测群晖、飞牛OS都可以编译驱动,威联通官方有这玩意,但是注意适配机型 M.2接口版本市场价300左右,USB版无需驱动,兼容性更强,但是贵了1倍多,不是很推荐。增加Coral TPU不会显著降低检测流延迟
性能之选: 4核以上CPU + 8G及以上内存 + NVIDIA (RTX)显卡 + yolo-nas模型 独立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条流),解码延迟较明显 优化建议: - 增加一个Coral检测器代替yolo_nas_s/m模型,可以将检测器延迟压到12ms左右,增加最大接入检测数量
监控摄像头输入:
每个摄像头提供至少一条RTSP协议视频流即可,视频格式最好调整为H264或H265,音频为AAC,其他格式则需要额外重编码;
如果同时有最低720P的5FPS的子码流最好
理想情况为:
1条H265/H264 AAC 15fps以上 主码流用于录制
1条H264 无音频 5fps 子码流用于检测
修改摄像头的设置,采用贴近frigate检测预设的流格式(H265/H264 AAC 5fps),可以减少后期裁剪等处理,减少资源占用
一、docker容器部署
目前frigate官方提供的镜像有(0.16.0):
- ghcr.io/blakeblackshear/frigate:0.16.0 主镜像,intel GPU选择这个
- ghcr.io/blakeblackshear/frigate:0.16.0-tensorrt,N卡选择这个
- ghcr.io/blakeblackshear/frigate:0.16.0-rk,rk3588选择这个
- ghcr.io/blakeblackshear/frigate:0.16.0-rocm,A卡用户选择这个
- 临时修复intel GPU驱动问题的版本(0.16.0):ghcr.io/blakeblackshear/frigate:ba20b61-amd64
1、主镜像compose配置
version: "3.9"
services:
frigate:
container_name: frigate
privileged: true
restart: unless-stopped
image: ghcr.io/blakeblackshear/frigate:0.16.0
#image: ghcr.io/blakeblackshear/frigate:ba20b61-amd64 #可选,修复0.16.0 intel gpu硬件加速问题 shm_size: "512mb"
devices:
- /dev/dri/renderD128:/dev/dri/renderD128
#- /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:
#PLUS_API_KEY: xxxxxxx-xxxxxx-xxxxxxxx #frigate+的api key(如果有)
2、N卡镜像compose配置:
version: "3.9"
services:
frigate:
container_name: frigate
privileged: true
restart: always
image: ghcr.io/blakeblackshear/frigate:0.16.0-tensorrt
deploy:
resources:
reservations:
devices:
- driver: nvidia
capabilities: [gpu]
shm_size: "640mb"
#devices:
#- /dev/apex_0:/dev/apex_0 #使用Coral推理,请取消#注释
volumes:
- /etc/localtime:/etc/localtime:ro
- /volume1/docker/frigate/frigate_16_release/config:/config #配置存放目录,请修改
- /volume4/NVR/frigate:/media/frigate #录像存放目录,请修改
- type: tmpfs
target: /tmp/cache
tmpfs:
size: 500000000
network_mode: bridge
ports:
- "1984:1984" # go2rtc web
- "8971:8971"
- "5555:5000" # 群晖会冲突,修改为其他如5555:5000
- "8554:8554" # RTSP feeds
- "8555:8555/tcp" # WebRTC over tcp
- "8555:8555/udp" # WebRTC over udp
#environment:
#PLUS_API_KEY: xxxxxxx-xxxxxx-xxxxxxxx #frigate+的api key(如果有
3、RK镜像compose配置:
version: "3.9"
services:
frigate:
container_name: frigate
privileged: true
restart: unless-stopped
image: ghcr.io/blakeblackshear/frigate:0.16.0-rk
shm_size: "512mb"
#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:
#PLUS_API_KEY: xxxxxxx-xxxxxx-xxxxxxxx #frigate+的api key(如果有
4、PS: RK镜像带的go2rtc无法调用rk的硬件编解码加速,如果需要在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" #配置存放目录,请修改
部署后进入go2rtc的web(ip:11984),检查ADD选项卡下的ffmpeg hardware,rkmpp是否为OK,OK代表已准备好硬件加速
然后转到config,编辑config
streams:
camrea-1:
- ffmpeg:rtsp://xxxxxxxvideo=h264audio=aac#hardware=rkmpp
专用go2rtc与frigate里的写法大同小异,相应修改frigate中的go2rtc的rtsp流地址为专用go2rtc的ip如rtsp://192.168.x.x:18554/camrea-1来代摄像头原生rtsp
二、frigate配置参考
请使用web页面的配置编辑器编辑,逐项添加,每添加一项就保存一次,防止格式出错
1、配置MQTT服务器
需要与ha联动的,必填,需自行搭建mqtt booker服务器如emqx
示例:
version: 0.16-0
mqtt:
enabled: true
host: 192.168.x.x
user: xxxx
password: xxxxx
2、配置go2rtc
主体配置:
go2rtc:
rtsp:
streams:
2-1、【rtsp】
可配置frigate rtsp流的连接加密,防止局域网内无授权访问,注意,firgate自身使用自身的rtsp来重流时无需附带鉴权信息
示例:
go2rtc:
rtsp:
username: admin
password: *******
2-2、【streams】
用于配置摄像头连接,大致可分为以下6种情况
2-2-1、如rtsp提供了h265视频和aac音频,可同时用于【实时预览、录制、检测】,某些提供双向通话的摄像头,如日志里go2rtc报错,可尝试添加参数#backchannel=0
示例cam-1:
go2rtc:
rtsp:
username: admin
password: *******
streams:
cam-1:
- rtsp://admin:[email protected]:xxxx/xxxxx#backchannel=0
2-2-2、如rtsp提供了h265视频和【非aac】音频,可同时用于【录制、检测】,实时预览(live)需要转码为aac,音频才能工作
示例cam-2:
go2rtc:
rtsp:
username: admin
password: *******
streams:
cam-1:
- rtsp://admin:[email protected]:xxxx/xxxxx#backchannel=0
cam-2:
- rtsp://admin:[email protected]:xxxx/xxxxx
cam-2-live: #使用ffmpeg将音频转码为aac,,用于实时预览(live),此处可直接复用cam-2连接,无需再写完整rtsp地址
- ffmpeg:cam-2:#video=copy#audio=aac
2-2-3、如rtsp提供了h264视频和aac音频,可同时用于【实时预览、录制、检测】
示例cam-3:
go2rtc:
rtsp:
username: admin
password: *******
streams:
cam-1:
- rtsp://admin:[email protected]:xxxx/xxxxx#backchannel=0
cam-2:
- rtsp://admin:[email protected]:xxxx/xxxxx
cam-2-live: #使用ffmpeg将音频转码为aac,,用于实时预览(live),此处可直接复用cam-2连接,无需再写完整rtsp地址
- ffmpeg:cam-2:#video=copy#audio=aac
cam-3:
- rtsp://admin:[email protected]:xxxx/xxxxx
2-2-4、如rtsp提供了h264视频和【非aac】音频,可同时用于【录制、检测】,实时预览需要转码为aac,音频才能工作
示例cam-4:
go2rtc:
rtsp:
username: admin
password: *******
streams:
cam-1:
- rtsp://admin:[email protected]:xxxx/xxxxx#backchannel=0
cam-2:
- rtsp://admin:[email protected]:xxxx/xxxxx
cam-2-live: #使用ffmpeg将音频转码为aac,,用于实时预览(live),此处可直接复用cam-2连接,无需再写完整rtsp地址
- ffmpeg:cam-2:#video=copy#audio=aac
cam-3:
- rtsp://admin:[email protected]:xxxx/xxxxx
cam-4:
- rtsp://admin:[email protected]:xxxx/xxxxx
cam-4-live: #使用ffmpeg将音频转码为aac,,用于实时预览(live),此处可直接复用cam-4连接,无需再写完整rtsp地址
- ffmpeg:cam-4:#video=copy#audio=aac
2-2-5、h265转h264也是可行的,可以增加设备兼容性,部分设备和浏览器可能不支持在线h265,非必要就不要转了,转码比较吃性能
rk35xx不要使用视频转码参数(音频可以),frigate容器自带的go2rtc不支持硬件加速
转码参数,示例cam-5:
go2rtc:
rtsp:
username: admin
password: *******
streams:
cam-1:
- rtsp://admin:[email protected]:xxxx/xxxxx#backchannel=0
cam-2:
- rtsp://admin:[email protected]:xxxx/xxxxx
cam-2-live: #使用ffmpeg将音频转码为aac,,用于实时预览(live),此处可直接复用cam-2连接,无需再写完整rtsp地址
- ffmpeg:cam-2:#video=copy#audio=aac
cam-3:
- rtsp://admin:[email protected]:xxxx/xxxxx
cam-4:
- rtsp://admin:[email protected]:xxxx/xxxxx
cam-4-live: #使用ffmpeg将音频转码为aac,,用于实时预览(live),此处可直接复用cam-4连接,无需再写完整rtsp地址
- ffmpeg:cam-4:#video=copy#audio=aac
cam-5:
- rtsp://admin:[email protected]:xxxx/xxxxx#backchannel=0
cam-5-transcode:
- ffmpeg:cam-5:#video=h264#audio=aac#hardware #hardware参数可调用可用的硬件加速
2-2-6、一种理想情况:
一个理想情况:
摄像头提供一条2k h265 aac 主流用于录制和实时预览
同时提供一条720p h265或h264 aac 子流用于检测
海康,大华等球机枪机都有这个流格式可调
帧率调整为:
主流:支持的最大帧率
子流:5或6fps,i帧帧率相同,关闭智能编码、h265+等类似优化功能
示例cam-6:
go2rtc:
rtsp:
username: admin
password: *******
streams:
cam-1:
- rtsp://admin:[email protected]:xxxx/xxxxx#backchannel=0
cam-2:
- rtsp://admin:[email protected]:xxxx/xxxxx
cam-2-live: #使用ffmpeg将音频转码为aac,,用于实时预览(live),此处可直接复用cam-2连接,无需再写完整rtsp地址
- ffmpeg:cam-2:#video=copy#audio=aac
cam-3:
- rtsp://admin:[email protected]:xxxx/xxxxx
cam-4:
- rtsp://admin:[email protected]:xxxx/xxxxx
cam-4-live: #使用ffmpeg将音频转码为aac,,用于实时预览(live),此处可直接复用cam-4连接,无需再写完整rtsp地址
- ffmpeg:cam-4:#video=copy#audio=aac
cam-5:
- rtsp://admin:[email protected]:xxxx/xxxxx#backchannel=0
cam-5-transcode:
- ffmpeg:cam-5:#video=h264#audio=aac#hardware #hardware参数可调用可用的硬件加速
cam-6: #rtsp提供了h265视频和aac音频,25fps的主码流,用于【实时预览、录制】
- rtsp://admin:[email protected]:xxxx/xxxxx
cam-6-sub: #rtsp提供了h264视频和aac音频,5/6fps的子码流,用于【检测】
- rtsp://admin:[email protected]:xxxx/xxxxx
3、全局配置
全局配置优先级低,可被cameras字段相同配置覆盖,主要用于配置缺省参数和统一参数,减少重复配置
主体配置:
ffmpeg:
detectors:
model:
detect:
objects:
record:
review:
snapshots:
semantic_search:
face_recognition:
lpr:
classification:
等···
3-1、ffmpeg
硬件解码加速参数,如果你的rtsp流同时存在h264、h265,单个加速参数无法覆盖,可任选其一配置,之后在cameras字段为未覆盖的单独指定
下面示例按照自己硬件选择其一
3-1-1、适用nvidia独显,同时支持h264、h265加速
示例:
ffmpeg:
hwaccel_args: preset-nvidia
3-1-2、适用intel核显、amd核显/独显,同时支持h264、h265加速
示例:
ffmpeg:
hwaccel_args: preset-vaapi
3-1-3、intel核显另一个选泽
h265示例:
ffmpeg:
hwaccel_args: preset-intel-qsv-h265
h264示例:
ffmpeg:
hwaccel_args: preset-intel-qsv-h264
3-1-4、适用树莓派3/4
h265示例:
ffmpeg:
hwaccel_args: preset-rpi-64-h265
h264示例:
ffmpeg:
hwaccel_args: preset-rpi-64-h264
3-1-5、rockchip平台(RK35XX),需系统已部署rkmpp库组件,同时支持h264、h265
使用命令:ls /dev/dri
若返回:
card0 card1 renderD128 renderD129
说明vpu已就绪
使用命令:dpkg -l | grep mpp
若返回:
librockchip-mpp等类似信息
说明mpp已就绪
示例:
ffmpeg:
hwaccel_args: preset-rkmpp
3-2、detectors & model
这两之间是1对多关系,放在一起配置比较直观,按需选择
只能配置一个检测器和一个模型!
仅挑选部分常见设备配置,全量配置自行查阅官方文档
3-2-1、m.2版coral,无需配置model
示例:
detectors:
coral:
type: edgetpu
device: pci
3-2-2、Intel核显
示例:
detectors:
ov:
type: openvino
device: GPU
PS:可配置多个实例来负载均衡
detectors:
ov_0:
type: openvino
device: GPU
ov_1:
type: openvino
device: GPU
推荐搭配模型:
- SSDLite MobileNet v2,frigate自带模型,无需另外制作,性能要求最低,识别精准度一般
示例:
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
- YOLO-NAS,frigate不自带模型,参考官方说明制作:Object Detectors | Frigate,或下载我按照说明制作的:yolo_nas_s.onnx
性能要求较SSDLite MobileNet v2高,识别精度有改善
示例:
detectors:
ov:
type: openvino
device: GPU
model:
model_type: yolonas
width: 320
height: 320
input_tensor: nchw
input_pixel_format: bgr
path: /config/yolo_nas_s.onnx #注意修改路径
labelmap_path: /labelmap/coco-80.txt
3-2-3、Nvidia和AMD GPU,Intel核显
示例:
detectors:
onnx:
type: onnx
同样支持多实例负载均衡:
detectors:
onnx_0:
type: onnx
onnx_1:
type: onnx
推荐搭配模型:
- YOLO-NAS,frigate不自带模型,参考官方说明制作:Object Detectors | Frigate,或下载我按照说明制作的yolo_nas_s.onnx
有一定性能要求,识别精度还好
示例:
detectors:
onnx:
type: onnx
model:
model_type: yolonas
width: 320
height: 320
input_tensor: nchw
input_pixel_format: bgr
path: /config/yolo_nas_s.onnx #注意修改路径
labelmap_path: /labelmap/coco-80.txt
3-2-4、RK3588
示例:
detectors:
rknn:
type: rknn
num_cores: 3
搭配模型:
- YOLO-NAS,frigate自带模型,可选deci-fp16-yolonas_s、deci-fp16-yolonas_m、deci-fp16-yolonas_l
推荐3-5路摄像头使用deci-fp16-yolonas_s,速度尚可,精度还好
示例:
detectors:
rknn:
type: rknn
num_cores: 3
model:
path: deci-fp16-yolonas_s #可选3个模型,推荐最小的deci-fp16-yolonas_s
model_type: yolonas
width: 320
height: 320
input_pixel_format: bgr
input_tensor: nhwc
labelmap_path: /labelmap/coco-80.txt
3-2-5、Nvidia GPU
N卡的tensorrt检测器支持已在0.16.0移除,需使用ONNX检测器,此处仅作记录(或降级到0.15.2)
示例:
tensorrt:
type: tensorrt
device: 0
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
3-4、detect
可不配置,然后在后面cameras级别字段单独配置
配置检测流的分辨率和帧率
- 分辨率:不是越高越好,由画面中的被检测物体大小比例确定,如被检测物在画面中经常占据1/8以上大小.推荐720P为佳;如被检测物很小,则需要提高分辨率
- 帧率:推荐值为5fps,可以稍作提高来改善识别速度(对于高速运动的物体而言)
- 如快照中的识别框与物体不对应,可以使用`annotation_offset`参数来偏移框的时间位置
示例:
detect:
enabled: true
width: 1280
height: 720
fps: 6
annotation_offset: -1000 #单位毫秒,-1000代表提前一秒,1000代表延后1秒
3-5、objects & record & review & snapshots可不配置,然后在后面cameras级别字段单独配置
3-5-1、objects
配置检测对象种类
示例:(仅列出部分常用对象)
objects:
track:
- person
- bicycle
- car
- motorcycle
- cat
- dog
3-5-2、record
配置全局录像参数
一个全时录制14天+保留7天警告视频的示例:
record:
enabled: true
retain:
days: 14
mode: all
alerts:
retain:
days: 7
mode: active_objects #可选motion,只要有运动就会保留,active_objects是检测到对象才保留
3-5-3、review
配置全局回放参数(回放是review,指左边侧栏第二个功能)
该页面有两个子项,警报(alerts)和检测(detections),任意一个的标签配置为空,将不保留该类视频片段
一个只保留警报,不保留检测的示例:
review:
alerts:
labels:
- person
- car
- bicycle
- motorcycle
- dog
- cat
detections:
labels: []
3-5-4、snapshots
配置全局快照参数,指左边侧栏第三个功能
一个保存14天快照的示例:
snapshots:
enabled: true
clean_copy: true #如你需要连接到frigate+,clean_copy必须为true
timestamp: false
bounding_box: true
crop: false
height: 720 #设置快照高度(分辨率)
retain:
default: 14
quality: 100 #设置快照图片质量
3-6、semantic_search
语义搜索,可以在web中配置,也可在事先这里配置.
需要注意的参数:
- model:可选jinav1、jinav2,jinav1只支持英语,v2支持大量语言
- model_size:可选small、large
有3种使用模式:
3-6-1、CPU跑jinav1+small模型,资源消耗小
semantic_search:
enabled: True
model: "jinav1"
model_size: small
3-6-2、独立GPU跑jinav1+large模型,消耗约1G显存
semantic_search:
enabled: True
model: "jinav1"
model_size: large
3-6-3、独立GPU跑jinav2+large模型,我的4G显存直接被拉爆
semantic_search:
enabled: True
model: "jinav2"
model_size: large
3-7、face_recognition
面部识别,只支持全局开启,不开启的摄像头可以单独配置关闭
开启人脸识别后,需要在web页做人脸训练,可以自拍或上传你的照片,每次识别都会新增一张人脸,把确定的人脸加入训练集即可
PS:实际使用体验:
需要搭配使用比较好的摄像头,像素高,动态好的,高宽容度,人面识别通常发生镜头前1~2米,人体遮挡容易引起画面明暗差,差的镜头直接成黑脸,无法识别
示例:
face_recognition:
enabled: true
model_size: small
unknown_score: 0.7
min_area: 500
recognition_threshold: 0.8
min_faces: 2
需要注意的参数:
- model_size:可选small、large,CPU跑small,独显跑large
- unknown_score:低于此分数的识别将被标记为未知的人脸
- min_area:可以增加此值以忽略小或远的人脸。默认500
- recognition_threshold:将人脸添加为对象子标签所需的识别置信度分数(确定你是你的阈值)
- min_faces:确定你是你的最小识别次数
3-8、lpr
车牌识别,只支持全局开启,不开启的摄像头可以单独配置关闭
PS:实际使用体验:
普通的400W枪机户外识别,720p检测流,距离5~10米,可以识别到的最小误差记录是1个字符(不含省市字母),感觉搭配专用摄像头,拉近距离会有比较好的效果
示例:
lpr:
enabled: true
detection_threshold: 0.75
min_area: 500
device: GPU
model_size: small
min_plate_length: 5
recognition_threshold: 0.9
需要注意的参数:
- detection_threshold:进行车牌文字识别的前置可信度(确定这个是车牌),低于此将不进行文字识别,默认0.7
- min_area:车牌的最小面积,1000像素代表图像中约32×32像素的正方形
- device:可选CPU、GPU,GPU跑YOLOv9 车牌检测模型效率更高
- model_size:可选small、large,一般用small,large对多行文字车牌的检测好一些
- min_plate_length:车牌必须包含的最小字符数
- recognition_threshold:将车牌号添加到车辆快照的置信度阈值
还有更多参数,但是目前使用度不高,没有深入研究
3-9、classification
可配置鸟类识别,没想到什么可以用到的地方,监控家鸟活动?
同样只支持全局开启,不开启的摄像头可以单独配置关闭
示例:
classification:
bird:
enabled: true
threshold: 0.9
4、摄像头配置
示例为单个摄像头配置,多个摄像头重复这个流程即可
主体配置:
cameras:
cam-1:
live:
ffmpeg:
onvif:
detect:
zone:
motion:
object:
record:
review:
snapshots:
lpr:
face_recognition:
等····
cam-2:
···
cam-3:
···
防止代码缩进层级问题,每一步我都会给出已配置的所有代码,方便参照缩进格式
4-1、live
实时预览,需要使用aac音频流才会有声音
示例:
cameras:
live:
streams:
cam-1-live: cam-1 #必须使用go2rtc中存在的名称代号,不能使用rtsp连接
4-2、ffmpeg
配置摄像头输入输出
示例:
当录制流与检测流共用时:
cameras:
live:
streams:
cam-1-live: cam-1
ffmpeg:
output_args:
record: preset-record-generic-audio-copy
inputs:
- path: rtsp://127.0.0.1:8554/cam-1
input_args: preset-rtsp-restream-low-latency
hwaccel_args: preset-nvidia
roles:
- record
- detect
当录制流与检测流独立时:
cameras:
live:
streams:
cam-1-live: cam-1
ffmpeg:
output_args:
record: preset-record-generic-audio-copy
inputs:
- path: rtsp://127.0.0.1:8554/cam-1-record
input_args: preset-rtsp-restream-low-latency
hwaccel_args: preset-intel-qsv-h265 #hwaccel_args可以根据path格式单独指定
roles:
- record
- path: rtsp://127.0.0.1:8554/cam-1-detect
input_args: preset-rtsp-restream-low-latency
hwaccel_args: preset-intel-qsv-h264
roles:
- detect
需要注意的参数:
- output_args->record:0.16.0已修复非aac音频的转码录制输出,aac流可直接使用preset-record-generic-audio-copy,非aac流使用preset-record-generic-audio-aac,0.15.2及以下版本需要提前在go2rtc里转码成aac才可以,然后使用-audio-copy - inputs->path:本地go2rtc流复用,使用go2rtc中配置的摄像头名称
- inputs->input_args:preset-rtsp-restream-low-latency,为go2rtc流复用低延迟参数,如果有问题,可以换为preset-rtsp-restream尝试,非复用流使用preset-rtsp-generic
- inputs->hwaccel_args:与全局配置中的ffpmeg一致,此处优先级比全局高,可根据inputs->path的格式单独调整
- roles:输入流的应用角色,可选record、detect、audio
4-3、onvif
支持PTZ(云台)和onvif协议的摄像头开启云台功能,开启后会在实时预览界面出现方向控制按钮
支持的摄像头型号不一,需要实际测试,已测试TP的onvif是支持的
示例:
cameras:
live:
streams:
cam-1-live: cam-1
ffmpeg:
output_args:
record: preset-record-generic-audio-copy
inputs:
- path: rtsp://127.0.0.1:8554/cam-1-record
input_args: preset-rtsp-restream-low-latency
hwaccel_args: preset-intel-qsv-h265 #hwaccel_args可以根据path格式单独指定
roles:
- record
- path: rtsp://127.0.0.1:8554/cam-1-detect
input_args: preset-rtsp-restream-low-latency
hwaccel_args: preset-intel-qsv-h264
roles:
- detect
onvif:
host: 192.168.x.x
port: 8000
user: admin
password: password
需要注意的参数:
- host和port为摄像头onvif协议的ip和端口
4-4、detect
参考全局配置用法,可为摄像头单独指定检测分辨率与帧率
示例:
cameras:
live:
streams:
cam-1-live: cam-1
ffmpeg:
output_args:
record: preset-record-generic-audio-copy
inputs:
- path: rtsp://127.0.0.1:8554/cam-1-record
input_args: preset-rtsp-restream-low-latency
hwaccel_args: preset-intel-qsv-h265 #hwaccel_args可以根据path格式单独指定
roles:
- record
- path: rtsp://127.0.0.1:8554/cam-1-detect
input_args: preset-rtsp-restream-low-latency
hwaccel_args: preset-intel-qsv-h264
roles:
- detect
onvif:
host: 192.168.x.x
port: 8000
user: admin
password: password
detect:
enabled: false #可单独关闭某个摄像头的检测功能
width:
height:
fps:
annotation_offset:
4-5、zone & motion
摄像头画面区域和运动检测配置,此配置无需代码设置,使用web页面,设置中的选项配置即可,会自动生成
示例:
cameras:
live:
streams:
cam-1-live: cam-1
ffmpeg:
output_args:
record: preset-record-generic-audio-copy
inputs:
- path: rtsp://127.0.0.1:8554/cam-1-record
input_args: preset-rtsp-restream-low-latency
hwaccel_args: preset-intel-qsv-h265 #hwaccel_args可以根据path格式单独指定
roles:
- record
- path: rtsp://127.0.0.1:8554/cam-1-detect
input_args: preset-rtsp-restream-low-latency
hwaccel_args: preset-intel-qsv-h264
roles:
- detect
onvif:
host: 192.168.x.x
port: 8000
user: admin
password: password
detect:
enabled: false #可单独关闭某个摄像头的检测功能
width:
height:
fps:
annotation_offset:
zone:
motion:
4-6、object
需要检测的对象,除了与全局配置一致外,还可以加入过滤器(filters)来微调对象识别的准确度
示例:
cameras:
live:
streams:
cam-1-live: cam-1
ffmpeg:
output_args:
record: preset-record-generic-audio-copy
inputs:
- path: rtsp://127.0.0.1:8554/cam-1-record
input_args: preset-rtsp-restream-low-latency
hwaccel_args: preset-intel-qsv-h265 #hwaccel_args可以根据path格式单独指定
roles:
- record
- path: rtsp://127.0.0.1:8554/cam-1-detect
input_args: preset-rtsp-restream-low-latency
hwaccel_args: preset-intel-qsv-h264
roles:
- detect
onvif:
host: 192.168.x.x
port: 8000
user: admin
password: password
detect:
enabled: false #可单独关闭某个摄像头的检测功能
width:
height:
fps:
annotation_offset:
zone:
motion:
objects:
track:
- person
- bicycle
- car
- motorcycle
- cat
- dog
filters:
person:
min_score: 0.6
threshold: 0.75
min_ratio: 0.2
max_ratio: 3.0
car:
min_score: 0.6
threshold: 0.75
需要注意的参数:
- min_score:低于此值的对象会被放弃跟踪,如果你的检测经常会中途丢失目标,可以调低此值
- threshold:检测对象为阳性(真)的阈值,高与此值会被识别为确定的对象,如果经常误判,可以调高此值(不要高于90)
- min_ratio与max_ratio:与检测对象的框框有关,如果检测框有横向长方形的情况,可以调大max_ratio来提高检测率
以上数值在调试页面和快照中都可以查询到
4-7、record & review & snapshots
参考全局配置用法,其中review可以附加选项(在配置完成zone后再添加)
可以配置回放中的警告和检测只保存某个区域内的
cameras:
live:
streams:
cam-1-live: cam-1
ffmpeg:
output_args:
record: preset-record-generic-audio-copy
inputs:
- path: rtsp://127.0.0.1:8554/cam-1-record
input_args: preset-rtsp-restream-low-latency
hwaccel_args: preset-intel-qsv-h265 #hwaccel_args可以根据path格式单独指定
roles:
- record
- path: rtsp://127.0.0.1:8554/cam-1-detect
input_args: preset-rtsp-restream-low-latency
hwaccel_args: preset-intel-qsv-h264
roles:
- detect
onvif:
host: 192.168.x.x
port: 8000
user: admin
password: password
detect:
enabled: false #可单独关闭某个摄像头的检测功能
width:
height:
fps:
annotation_offset:
zone:
motion:
objects:
track:
- person
- bicycle
- car
- motorcycle
- cat
- dog
filters:
person:
min_score: 0.6
threshold: 0.75
min_ratio: 0.2
max_ratio: 3.0
car:
min_score: 0.6
threshold: 0.75
review:
alerts:
required_zones:
- zone-name
detections:
required_zones:
- zone-name
4-8、lpr & face_recognition & classification
单独关闭摄像头的车牌识别、人脸识别、鸟类识别功能,不接受开启,因为机制是全局开启,单独关闭
示例:
cameras:
live:
streams:
cam-1-live: cam-1
ffmpeg:
output_args:
record: preset-record-generic-audio-copy
inputs:
- path: rtsp://127.0.0.1:8554/cam-1-record
input_args: preset-rtsp-restream-low-latency
hwaccel_args: preset-intel-qsv-h265 #hwaccel_args可以根据path格式单独指定
roles:
- record
- path: rtsp://127.0.0.1:8554/cam-1-detect
input_args: preset-rtsp-restream-low-latency
hwaccel_args: preset-intel-qsv-h264
roles:
- detect
onvif:
host: 192.168.x.x
port: 8000
user: admin
password: password
detect:
enabled: false #可单独关闭某个摄像头的检测功能
width:
height:
fps:
annotation_offset:
zone:
motion:
objects:
track:
- person
- bicycle
- car
- motorcycle
- cat
- dog
filters:
person:
min_score: 0.6
threshold: 0.75
min_ratio: 0.2
max_ratio: 3.0
car:
min_score: 0.6
threshold: 0.75
review:
alerts:
required_zones:
- zone-name
detections:
required_zones:
- zone-name
lpr:
enabled: false
face_recognition:
enabled: false
classification:
bird:
enabled: false
4-9、完成以上配置(所有摄像头都配好),重启frigate
重启完frigate,就可以进入web页设置区域、运动等之前跳过的参数了,
再次重启,会生成缺少的zone/motion参数,这时候review等用到zone的配置就可以添加了
5、web相关配置
- 进入frigate的5000端口web管理页,进入setting->UI Settings->First Weekday,这里可改成monday
- 进入Users,新建一个用户,用于8971端口登录,0.16.0已不能正常删掉原有的admin用户
- 进入区域/遮罩,比如想检测人在,就框起来一个区域,对象选人
- 运动遮罩,用于排除一些固定存在的元素,比如摄像头带的水印、OSD时间戳等,区域大小不要过大,不要滥用运动遮罩来限制检测,会造成对象跟踪困难
- 对象遮罩,用于排除一些固定的误报区域,比如风吹动的树,固定停放的车等
- 进入运动调整器,可以调整触发运动检测的阈值,可以使用隔壁的调试画面来观测
三、其他问题
1、联动homeassistant
1-1、HACS商店搜索frigate安装集成
1-2、搭建MQTT服务器,比如EMQX
注意emqx的节点名跟ip相关,使用容器内动态ip会导致ip变动后配置丢失,需要为其指定固定ip
以群晖为例,在container manager中新增一个名为bridge-static的网络,驱动程序为bridge,IP段自选,比如我:
compose示例:
services:
emqx:
image: emqx:latest
container_name: emqx
hostname: emqx.server
ports:
- "18083:18083"
- "8083:8083"
- "8084:8084"
- "8883:8883"
- "1883:1883"
volumes:
- /volume1/docker/mqtt-server/data:/opt/emqx/data #修改目录
- /volume1/docker/mqtt-server/log:/opt/emqx/log #修改目录
restart: always
networks:
bridge-static:
ipv4_address: 172.18.0.110 #可自选ip
networks:
bridge-static:
external: true
name: bridge-static
1-3、启动成功后登录web端口18083,进入【访问控制】->【客户端认证】->【内置数据库】->【用户管理】,添加用户即可。
HA在【设备与服务】搜索集成mqtt,按提示添加连接,frigate和ha登录到该mqtt服务器,frigate集成实体可恢复可用
2、摄像头实时预览卡片
官方的Advanced Camera Card功能太杂,我用的WebRTC Camera集成,配置集成连接frigate的go2rtc端口1984即可
卡片模板:
type: custom:webrtc-camera
url: #在go2rtc中配置的摄像头名字,如cam-1
3、H265在线播放问题
- windows10及以上可以安装HEVC Video Extensions扩展+EDGE/Chrome浏览器
- linux(debian/ubuntu等)可以使用Chromium浏览器,配合启动参数:
--enable-features=AcceleratedVideoDecodeLinuxGL,AcceleratedVideoEncoder
我在debian12+kde桌面环境上测试成功
手机iOS使用Safari、edge等都可,安卓我使用小米自带浏览器也可
4、群晖使用N卡,套件商店添加矿神源,安装皮蛋熊的N卡驱动即可,飞牛OS商店也有
5、群晖、飞牛OS使用coral TPU(pcie),需要编译驱动文件,加载后才可使用
5-1、 黑白群可以参考隔壁网我的帖子:https://www.gebi1.cn/thread-308224-1-1.html
或我部署的静态文档:https://dsm7-build-model.netlify.app/
5-2、 飞牛OS参考我部署的静态文档:https://fnos-build-coral.netlify.app/
~以上,欢迎补充与测试
|