将ha迁移到x2上,记录下安装homeassistant的过程,方便以后折腾,也为后来的垃圾佬少走些弯路.

目前rknpu在识别上面还有些问题Frigate在调用这颗npu时会有2s左右的延迟,原因未知,开发者也复现了这个问题.不知是rknpu驱动的原因还是13.2版本的问题.只能等上游修复.
因为rk识别使用的YOLO模型license调整,导致frigate新版本将放弃使用YOLO(在短时间内rk芯片 不再会有任何frigate的更新).具体参考:https://github.com/blakeblackshear/frigate/pull/10717

一.折腾第一步,刷机

需要刷写我仓库最新的固件,才能开启npu与mpp的支持.

固件测试

二.安装HomeAssistant Supervised

1.修改系统名称

HomeAssistant Supervised在安装脚本中,判断了.系统的名称是否为Debian GNU/Linux 11 (bullseye)" "Debian GNU/Linux 12 (bookworm)"否则直接安装失败.非常的坑
image.png
所以我们需要先将系统名称改为Debian GNU/Linux 12 (bookworm)

1
2
nano /etc/os-release
# 将第一行的Armbian...改完:Debian GNU/Linux 12 (bookworm)

2.启动apparmor与修改cgroup版本

Home Assistant Supervisor 应用只支持 docker cgroup v1 版本,而目前 docker 默认安装的都是最新的 v2 版本。如需切换至 v1 版本,可以在 cmdline 中添加 systemd.unified_cgroup_hierarchy=0 参数设置,重启后就可以切换至 docker cgroup v1 版本。

1
2
3
4
5
nano /boot/armbianEnv.txt
# 找到:extraargs=...,改为
extraargs=apparmor=1 security=apparmor systemd.unified_cgroup_hierarchy=0
# 然后重启
reboot

3.安装HomeAssistant Supervised

这里直接根据官方项目文档安装即可,最好可以保证自己的网络各处可达
官方安装项目地址:home-assistant/supervised-installer

1.安装依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
apt install \
apparmor \
cifs-utils \
curl \
dbus \
jq \
libglib2.0-bin \
lsb-release \
network-manager \
nfs-common \
systemd-journal-remote \
systemd-resolved \
udisks2 \
wget -y

2.安装docker

1
curl -fsSL get.docker.com | sh

3.安装OS-Agent

OS-Agent下载地址:Releases · home-assistant/os-agent (github.com)
博主这里使用的是最新的1.6.0的版本,是没有问题的
image.png

1
2
wget -O os-agent.deb https://github.com/home-assistant/os-agent/releases/download/1.6.0/os-agent_1.6.0_linux_aarch64.deb
dpkg -i os-agent.deb

4. 安装HomeAssistant Supervised

1
2
3
4
wget -O homeassistant-supervised.deb https://github.com/home-assistant/supervised-installer/releases/latest/download/homeassistant-supervised.deb
apt install ./homeassistant-supervised.deb
# 在弹出的选项中选择qemuarm-64
# 然后等待它安装完毕即可访问

5.等待安装,如果网络不是很好,建议放个一天在来查看

安装完毕后访问:http://ip:8123 即可进入HomeAssistant的登录界面

三.安装Frigate

因为rk3566这颗处理器拥有vpn(编码),与npu(推理识别)让在性能较弱的盒子上运行Frigate这种AI项目成为了可能,同时也感谢各位大佬在开源社区的贡献.

1.调整x2硬件频率

因为博主要部署Frigate,需要使用到npu,这一步主要可以大幅提高npu的推理速度

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// npu最高频率
cat /sys/class/devfreq/fde40000.npu/available_frequencies
echo 900000000 > /sys/class/devfreq/fde40000.npu/max_freq
echo "performance" > /sys/class/devfreq/fde40000.npu/governor

// ddr最高频率
// 查看频率
cat /sys/class/devfreq/dmc/available_frequencies
echo userspace > /sys/class/devfreq/dmc/governor
echo 1560000000 > /sys/class/devfreq/dmc/userspace/set_freq

// cpu最高频率
cat /sys/devices/system/cpu/cpufreq/policy0/scaling_available_frequencies
echo userspace > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor
echo 1800000 > /sys/devices/system/cpu/cpufreq/policy0/scaling_setspeed
echo performance > tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

默认频率的速度为100ms左右.提高频率后为57ms左右
image.png

二.开始安装Frigate

官方地址:Frigate NVR
这里博主使用的是这位大佬仓库的13.2分支,dev分支在我测试时运行还有些问题
MarcA711/frigate-rockchip
下面开始安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 博主根据13.2分支的最新源码打包了一个docker镜像放到了阿里云
docker pull registry.cn-hangzhou.aliyuncs.com/hiasia/frigate:rknn1.6-13.2
# 以下是docker compose
version: "3.9"
services:
frigate:
container_name: frigate
privileged: true
restart: unless-stopped
stop_grace_period: 1s
image: registry.cn-hangzhou.aliyuncs.com/hiasia/frigate:rknn1.6-13.2
shm_size: "256mb"
volumes:
- /etc/localtime:/etc/localtime:ro
- /opt/frigate/config/:/config/
- /opt/frigate/dbs/:/frigate/dbs/
- /opt/frigate_media/:/media/frigate #将frigate持久化数据文件夹挂载进去
- type: tmpfs # Optional: 1GB of memory, reduces SSD/SD Card wear
target: /tmp/cache
tmpfs:
size: 1000000000
ports:
- "5000:5000"
- "8554:8554" # RTSP feeds
- "8555:8555/tcp" # WebRTC over tcp
- "8555:8555/udp" # WebRTC over udp
environment:
FRIGATE_RTSP_PASSWORD: "passwd"

配置文件,需要放到frigate/config/config.yml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#database:
# path: /frigate/dbs/frigate.db

mqtt:
enabled: false

go2rtc:
streams:
balcony:
rtsp://admin:x@地址/Streaming/Channels/101
webrtc:
candidates:
- 地址:8555
- stun:8555

cameras: #必选,配置视频流
frontdoor: #自己命名一个摄像头
record: #开启录像功能
enabled: true
retain:
days: 9999
mode: all
events:
retain:
default: 9999
mode: active_objects
required_zones:
- frontdoor_corridor
- frontdoor_entire
ffmpeg: #FFMPEG配置
output_args: #Frigate默认不带录音,通过ffmpeg选项手动开启录音
record: preset-record-generic-audio-aac
inputs: #输入源
- path: rtsp://rtsp:x@地址:554/Streaming/Channels/102
input_args: preset-rtsp-generic
hwaccel_args: preset-rk-h264
roles:
- detect
- path: rtsp://rtsp:x@地址:554/Streaming/Channels/101
input_args: preset-rtsp-generic
hwaccel_args: preset-rk-h265
roles: #选择角色
- record #用于保存视频
detect:
width: 1280
height: 720
fps: 6
enabled: True

objects:
track:
- person
filters:
person:
min_score: 0.2

detectors:
rknn:
type: rknn

model:
#path: /config/model_cache/rknn/yolov8n-320x320-rk3588-custom.rknn
path: default-yolov8n
input_pixel_format: bgr
width: 320
height: 320
input_tensor: nhwc

logger:
# Optional: default log level (default: shown below)
default: debug
# Optional: module by module log level configuration
logs:
# frigate.mqtt: debug
ffmpeg.frontdoor.detect: debug
detect: debug
# level: debug # default level
# api: debug
# exec: debug
# ngrok: debug
# rtsp: debug
# streams: debug
# webrtc: debug

参考资料

  1. Introduction | Frigate
  2. MarcA711/frigate-rockchip: NVR with realtime local object detection for IP cameras (github.com)
  3. home-assistant/supervised-installer: Installer for a generic Linux system (github.com)
  4. 以及Ecore Home群友的热心解答