Frigate 是一款开源本地 NVR系统,具有 AI 物体检测功能。使用 OpenCV 和 Tensorflow 对本地摄像机进行本地实时物体检测,本教程以PVE安装Ubuntu虚拟机在Docker中部署Frigate为例讲解Frigate的部署与基本配置,其他系统方法类似,如何在PVE中建立虚拟机并安装Ubuntu不在本教程范围,请另行参考其他教程
硬件直通
本教程以PCIE版本Google Tpu为例,其他版本操作类似
先在PVE中停止虚拟机,并进入PVE Shell
执行指令 lspci -nnk | grep 089a 回车并查看返回结果
- 输入指令 nano /etc/default/grub 进入编辑界面
- 找到 GRUB_CMDLINE_LINUX_DEFAULT=“quiet” 这一行,将这行改为: GRUB_CMDLINE_LINUX_DEFAULT=“quiet intel_iommu=on”
- CTRL + X 并按 Y 保存退出
- 继续输入 update-grub 等待命令执行完成
- 输入 nano /etc/modules 进入编辑界面
- 在末尾加入一下四行:
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
完成后按 CTRL + X 并按 Y 保存退出,然后重启一下PVE
再次进入PVE控制台,点击已经安装好的Ubuntu虚拟机,选择 硬件 - 点击添加
在设备栏点击下拉,找到图中所示的 Coral Edge TPU ,确认,直通完成
- 启动虚拟机,进入虚拟机的Shell
- 输入 lspci -nnk | grep 089a 查看直通是否成功,如返回和第一步中相同信息说明直通成功
安装配置TPU驱动
继续在虚拟机的Shell中输入下列命令(每一条都需要回车确认),等待全部运行结束
echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" | sudo tee /etc/apt/sources.list.d/coral-edgetpu.list
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo apt-get update
继续输入命令并等待安装结束后重启Ubuntu虚拟机:
sudo apt-get install gasket-dkms libedgetpu1-std
注意:以上命令推荐在科学上网环境中运行,降低失败的可能性
再次进入虚拟机Shell,验证驱动是否安装成功,输入:ls /dev/apex_0
部署并配置Frigate
- 首先确认虚拟机中已经安装好Docker环境
- 进入虚拟机Shell,创建Frigate目录
mkdir /home/frigate
- 在刚才创建的目录中创建配置文件 config.yml,可将下面内容复制黏贴至文本文件中,并保存命名为 config.yml
- 通过 Winscp 软件将创建好的配置文件传入刚才创建的目录中 /home/frigate
mqtt:
#你的 mqtt broker IP地址
host: 10.0.0.1
#你的 mqtt broker 端口
port: 1883
#你的mqtt 登陆用户名,没有的话可以留空
user: username
#你的 mqtt 登陆密码,没有的话可以留空
password: zjing0910z
#用于区分客户端,可以自己定义
client_id: frigate
detectors:
coral_pci:
#Tpu类型
type: edgetpu
#如果是使用 USB 版本的TPU,这里写usb
device: pci
#配置你的摄像机
cameras:
#摄像机在Frigate中的名称,可以自定义
camera_1:
record:
#是否开启录制功能,如需要录制,设置为 true
enabled: false
ffmpeg:
inputs:
#这里设置你的摄像机的 rtsp 流地址,不同的摄像机流地址不一样,根据自己的实际情况修改
- path: rtsp://username:password@ip:554/h264/ch1/main/av_stream
roles:
- detect
detect:
width: 1280
height: 720
fps: 5
enabled: True
max_disappeared: 25
stationary:
interval: 0
threshold: 50
max_frames:
default: 3000
objects:
person: 1000
# 通过摄像机进行人体移动侦测的冷却时间,单位是秒
motion:
mqtt_off_delay: 10
# 设置检测对象为人(person),可在官网查看具体的其他可供使用参数
objects:
track:
- person
filters:
person:
# 最小置信度,识别目标时的置信度,下面参数意思为超过 65% 相似度的就会判定为有识别目标
min_score: 0.65
使用命令行部署Frigate
docker run -d \
--name frigate \
--restart=unless-stopped \
--mount type=tmpfs,target=/tmp/cache,tmpfs-size=1000000000 \
--device /dev/apex_0:/dev/apex_0 \
--shm-size=64m \
-v /home/frigate/storage:/media/frigate \
-v /home/frigate/config.yml:/config/config.yml \
-v /etc/localtime:/etc/localtime:ro \
-e FRIGATE_RTSP_PASSWORD='123456a' \
-p 5000:5000 \
-p 8554:8554 \
-p 8555:8555/tcp \
-p 8555:8555/udp \
ghcr.io/blakeblackshear/frigate:stable
等待部署完成后在浏览器中输入 http://ip:5000 ,如果部署正常,就可以进入Frigate界面了
在Ecore Home Center 中的运用
首先在EH组件里创建一个多选的虚拟设备
打开Node-Red,按照下面步骤建立流(全部完成后点右上角部署):
现在就可以通过在触发:状态节点中调用刚创建的多选虚拟设备来做触发