Rockchip RK3588 安装Frigate

前言

frigate 是一个不错的NVR,尤其是在0.16.0版本后支持了中文,方便了国人使用,X86教程国内有不少,但是Rockchip RK3588相对较少,今天我们就一篇教程来部署frigate包括搭建,配置摄像头双向通话,云台以及ai等内容。

硬件

在开始前,我们先说一下硬件,Frigate按照官方文档中的说法,只要数字摄像头并且能提供RTSP视频流的就都可以在frigate中使用,至于云台需要使用onvif,相对来说国内大部分的摄像头都可,但是也有部分是无法使用的,官方提供了一个列表大家可以去查看,但是列表之外的,我们也只能尝试一下看看,至于自动追踪,一般便宜的摄像头基本都无法开启,因为需要摄像头支持相对移动(Relative Movement)

所以在选购摄像头硬件的时候,尽量询问卖家,是否支持rstp与onvif这两个比较重要。

在RK3588的选择中,后缀带S、C、S-D都是可以的,NPU与VPU算力都是没有影响的,只是外围接口稍有差别,具体请自行查看瑞芯微官方,在选择板子的时候,尽量选择带有NVME接口,或者带有sata接口的,因为录像存储是比较消耗存储空间的,当然我们也可以在Linux系统内挂在局域网NAS,比如NFS或者SMB,但是网络协议在启动顺序以及稳定性上肯定是不如本地存储硬件的。

本教程硬件

硬件型号
NanoPi R6C
摄像头/海康DS-2CD1345DV2-LA/DS-2DC3P40MW-DE(云台)
存储nvme:三星980evo 500G

软件

在教程开始前,大家需要针对自己的开发板系统做一个检查,查看是否正常驱动了硬件。

查看NPU驱动版本

使用命令查看NPU是否启动

dmesg | grep rknpu
图片[2]-frigate,rk3588,ai,nvr

在NPU正常驱动的情况下,我们可以使用命令查看到他的驱动版本以及核心的使用率

cat /sys/kernel/debug/rknpu/version
RKNPU driver: v0.9.8

驱动版本建议使用v0.9.8,不是此版本的建议大家升级到此版本,以免出现未知奇奇怪怪的问题。

cat /sys/kernel/debug/rknpu/load
NPU load:  Core0:  0%, Core1:  0%, Core2:  0%,

这里可以看到NPU三个核心都是0%负载。

查看所需要的组件是否加载

依次输入命令查看返回结果

ls /dev/dri
ls /dev/dma_heap
ls /dev/rga
ls /dev/mpp_service
图片[3]-frigate,rk3588,ai,nvr

安装docker

安装docker的方式,使用官方的安装脚本快速安装就可以了,因为frigate我们使用docker安装。

curl -sSL https://get.docker.com | sh

如果你没国际网络,这里也可以用离线脚本,下载文件上传到3588开发板内。

20260113170950137-installdocker.zip
zip文件
6.8K
cd ~/ #进入放置脚本的目录内
chmod +x ./installdocker.sh
./installdocker.sh --mirror Aliyun #使用阿里云镜像服务器进行安装docker

安装frigate

这里使用compose进行配置容器

services:
  frigate:
    container_name: frigate
    privileged: true
    restart: unless-stopped
    image: ghcr.io/blakeblackshear/frigate:stable-rk
    shm_size: "512mb"
    network_mode: host
    devices:
      - /dev/dri/renderD128
      - /dev/dri/renderD129
      - /dev/dri
      - /dev/dma_heap
      - /dev/rga
      - /dev/mpp_service
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
      - /nvme/frigate/config:/config  #frigate的配置文件存放位置
      - /nvme/frigate/storage:/media/frigate  #录制的视频存放位置
      - type: tmpfs # Optional: 1GB of memory, reduces SSD/SD Card wear
        target: /tmp/cache
        tmpfs:
          size: 1000000000
#    ports:
#      - "8971:8971"
#      - "5000:5000" # Internal unauthenticated access. Expose carefully.
#      - "8554:8554" # RTSP feeds
#      - "8555:8555/tcp" # WebRTC over tcp
#      - "8555:8555/udp" # WebRTC over udp
    environment:
      - "FRIGATE_RTSP_PASSWORD="  #rtsp的密码在=后面输入你的密码
      - "TZ=Asia/Shanghai"

修改我中文注释的内容,然后启动即可,使用服务器ip+5000端口号,就可以访问到frigate的web界面了

配置frigate

在ui左下角找到,设置-配置编辑器

图片[4]-frigate,rk3588,ai,nvr

修改配置,下面我把配置文件常见的部分写出来,然后在合成一个配置文件。

MQTT

MQTT相信玩过homeassist会知道一些,如果后期考虑连动使用,可以配置,如果作为独立的NVR使用可以不用配置

mqtt:
  enabled: true  #true开启mqtt false关闭  如果独立使用可写false 其他信息删掉或者用#注释
  host:          #mqtt 服务器ip
  port: 1883     #mqtt端口 默认1883
  user:          #mqtt 用户
  password:      #mqtt 密码

登录认证

frigate 常见使用的5000 是没有认证的,如果广域网(公网)使用请用8971端口号。

auth:
  enabled: true  #true开启 false关闭
  reset_admin_password: false  #第一次启动密码在日志中打印,如果没看到可以把此项改为true重启后可以在日志中看到密码,当密码修改完成后,需要把此项重新修改为flase,也可以用5000端口进入直接修改新密码。

检测画面内容

这里检测内容分全局和针对摄像头,全局就是默认所有摄像头都遵守这个检测内容,当然你也可以针对某个摄像头设置。

全局

objects:
  track:
    - person
    - cat
    - dog
    - car
    - bird
    - motorcycle
    - bicycle
    - package
    - face

针对某一个摄像头

cameras:
  cam:
    ffmpeg:
      inputs: ...  #这里是省略部分配置,并不是没有
    objects:       #针对单独摄像头的参数,会覆盖全局的
      track:
        - person
        - package  

FFmpeg

ffmpeg 分全局,和针对单个摄像头

全局

ffmpeg:
  hwaccel_args: preset-rkmpp  #preset-rkmpp是针对RK系列处理器使用mpp来硬件加速,其他平台请查看官方文档
  input_args: preset-rtsp-restream

针对部分摄像头

cameras:
  cam:
    ffmpeg:
      hwaccel_args: preset-rkmpp   #针对单独摄像头的参数,会覆盖全局的
      inputs: ...                  #这里是省略部分配置,并不是没有

一些常见预设

硬件平台推荐预设参数说明
Intel (核显)preset-vaapi适用于大多数 Intel CPU (J4125, N5105, N100 等)
Intel (第12代+)preset-intel-qsv-h264针对新一代 QuickSync 的优化
Nvidia (显卡)preset-nvidia需要安装 NVIDIA Container Toolkit
Raspberry Pi 4/5preset-rpi-64-h264适用于树莓派 64 位系统
AMD (核显)preset-vaapi同样使用 VA-API 接口

此预设只是部分,其他请查看官方文档,这里如果我们有多个硬件支持的情况下,比如,有Intel核心显卡和nVidia显卡,就可以全局使用inte,单个摄像头使用nVidia 也可以的。

摄像头链接

这里摄像头链接有两种,一种是使用go2rtc代理后链接,或者直接链接摄像头的rstp,这两种方式都可以链接到摄像头,go2rtc代理后可以让视频流链接更多,因为部分摄像头链接IP是有上限的,如果没有过多客户端链接,也可以直接使用摄像头的rstp链接,go2rtc支持双向通话,rstp目前不支持。

go2rtc链接

go2rtc:
  streams:
    cam:       #摄像头1主码流,用于录像和高清查看
      - rtsp://user:password@ip:554/Streaming/Channels/1#video=copy
      - isapi://user:password@ip:80/ #海康推荐使用isapi进行双向通话,Windows环境使用http就可以,如果是pwa模式的IOS需要HTTPS
    cam_sub:   #摄像头1子码流,用于检测
      - rtsp://user:password@ip:554/Streaming/Channels/2#video=copy
#    cam2:     #摄像头2主码流,用于录像和高清查看
#      - rtsp://user:password@ip:554/Streaming/Channels/1#video=copy
#    cam2_sub: #摄像头2子码流,用于检测
#      - rtsp://user:password@ip:554/Streaming/Channels/2#video=copy
  webrtc:      #webrtc
    listen: :8555 #监听端口默认8555
    candidates:
      - 192.168.1.130:8555 #IP写frigate在内网的ip
      - stun:8555  #使用内置的stun,动态获取IP

###摄像头链接参数  
cameras:
  cam: #摄像头名称要与streams中的主流一样,否者系统会提示此摄像头未开启视频流
    enabled: true
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/cam  #/cam路径要与streams中cam名字一致
          roles:
            - record
        - path: rtsp://127.0.0.1:8554/cam_sub #/cam_sub路径要与streams中cam子流的名字一致
          roles:
            - detect
  cam2: #摄像头名称要与streams中的主流一样,否者系统会提示此摄像头未开启视频流
    enabled: true
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/cam2  #/cam路径要与streams中cam名字一致
          roles:
            - record
        - path: rtsp://127.0.0.1:8554/cam_sub #/cam2_sub路径要与streams中cam子流的名字一致
          roles:
            - detect
    detect:
      enabled: true

如果是多个摄像头,重复在go2rtc下面添加摄像头名字即可,教程中的cam是我设定的名字,名字是可以随意的,至于摄像头的rstp链接方式各大品牌都不同,本教程中使用的是海康的,如果你也是海康摄像头可以直接用。

双向通话,海康推荐使用isapi通话质量更好一些,其他牌子可以使用novif协议进行链接,在客户端使用的时候windows 可以在非加密也就是http下双向通话,在ios使用PWA也就是网页的桌面共享图标,或者浏览器必须使用https,否者会提示摄像头不可双向通话。

rstp链接

RSTP 直接链接并不支持双向通话,和视频流传输,至少当前版本不可,后期官方如果支持请自行查看官方文档。

###摄像头链接参数  
cameras:
  cam: #摄像头1
    enabled: true
    ffmpeg:
      inputs:
        - path: rtsp://user:password@ip:554/Streaming/Channels/1
          roles:
            - record
        - path: rtsp://user:password@ip:554/Streaming/Channels/2
          roles:
            - detect
    detect:
      enabled: true
  cam2: #摄像头2
    enabled: true
    ffmpeg:
      inputs:
        - path: rtsp://user:password@ip:554/Streaming/Channels/1
          roles:
            - record
        - path: rtsp://user:password@ip:554/Streaming/Channels/2
          roles:
            - detect
    detect:
      enabled: true

常见品牌RTSP列表

这里贴出来一些常见RSTP列表,大家尝试下如果有不在列表内的可以留言我在追加,或者列表内无法使用的,请给予反馈,资料收集与网络不确定百分百可用。

品牌名称设备类型主码流(高清)RTSP 链接格式子码流(流畅)RTSP 链接格式默认端口
海康威视 (Hikvision)IPC/NVRrtsp://admin:password@IP:554/Streaming/Channels/101rtsp://admin:password@IP:554/Streaming/Channels/102554
大华 (Dahua)IPC/NVRrtsp://admin:password@IP:554/cam/realmonitor?channel=1&subtype=0rtsp://admin:password@IP:554/cam/realmonitor?channel=1&subtype=1554
宇视 (Uniview)单机 IPCrtsp://admin:password@IP:554/media/video0rtsp://admin:password@IP:554/media/video1554
宇视 (Uniview)录像机 NVRrtsp://admin:password@IP:554/unicast/c1/s0/livertsp://admin:password@IP:554/unicast/c1/s1/live554
TP-Link / Tapo家用/商用rtsp://admin:password@IP:554/stream1rtsp://admin:password@IP:554/stream2554
华为 (Huawei)IPCrtsp://admin:password@IP:554/LiveMedia/ch1/Media1rtsp://admin:password@IP:554/LiveMedia/ch1/Media2554

重要提示:

请务必将表格中的以下占位符替换为你设备的实际信息:

  • IP:摄像头的局域网 IP 地址(例如 192.168.1.64)。
  • admin:设备管理员用户名。
  • password:设备管理员密码。
  • 554:标准 RTSP 端口(如果你的设备更改了端口,请使用实际端口号)。

云台PTZ控制

各大平台onvif开启方式都不同,因为我使用的是海康的摄像头,海康的摄像头一般在设置-网络设置-平台接入-ONVIF。

海康的ONVIF需要创建独立账户,权限给操作员即可,部分摄像头需要给管理员。

###摄像头链接参数  
cameras:
  cam:
.......   #配置省略了并不是没有
    onvif:
      host: IP                   #摄像头IP
      port: 80                   #海康默认的是80 其他平台也有使用8000的
      user: onvif                #在摄像头内创建的用户名
      password: admin123         #对应的密码
      tls_insecure: false        #证书验证,在V0.16的版本后建议false 之前的版本选择true
      ignore_time_mismatch: true #时间验证 true即可

录像时间

这里我个人设置的全部录制7天,触发事件90天,大家可以根据自己情况选择,录像也可以全局,或者针对单个摄像头。

全局

record:
  enabled: true
  retain:
    days: 7
    mode: all
  alerts:
    retain:
      days: 90
      mode: active_objects #motion
  detections:
    retain:
      days: 90
      mode: active_objects #motion

我这里的配置是全量录像(record)保留7天,警报录像(alerts)90天,检测事件录像(detections)90天。

大家可以根据自己的情况进行修改。

某一个摄像头

cameras:
  cam:
    ffmpeg:
      inputs: ... #隐藏配置,并不是没有
    record:
      enabled: true
      retain:
        days: 2          # 该摄像头仅保存 2 天的全量录像
        mode: all
      alerts:
        retain:
          days: 30       # 该摄像头的警报保留 30 天
          mode: active_objects
      detections:
        retain:
          days: 30       # 该摄像头的检测保留 30 天
          mode: active_objects

AI模型检测

因为rk3588的NPU是三核芯 每个核心2t算力,总共6T,这里我写了三个核心全部都使用,当然大家也可以自己修改。

detectors:
  rknn:
    type: rknn
    num_cores: 3  #核心最大使用

model:
  path: deci-fp16-yolonas_s  #还有个deci-fp16-yolonas_m 大家酌情选择
  width: 320
  height: 320
  input_pixel_format: bgr
  input_tensor: nhwc
  labelmap_path: /labelmap.txt

完整配置

把上面一段一段的配置都组合起来的配置,仅供参考。

mqtt:
  enabled: true
  host: 
  port: 1883
  user: 
  password: 

auth:
  enabled: true
  reset_admin_password: false

birdseye:
  enabled: true
  mode: motion
  width: 1920
  height: 1080

objects:
  track:
    - person
    - cat
    - dog
    - car
    - bird
    - motorcycle
    - bicycle
    - package
    - face

###视频解码硬件加速
ffmpeg:
  hwaccel_args: preset-rkmpp
  input_args: preset-rtsp-restream

go2rtc:
  streams:
    cam: # 主码流,用于录像和高清查看
      - rtsp://user:password@ip:554/Streaming/Channels/1#video=copy
      - isapi://user:password@192.168.1.125:80/
    cam_sub:  # 子码流,用于检测
      - rtsp://user:password@ip:554/Streaming/Channels/2#video=copy
  webrtc:
    listen: :8555
    candidates:
      - 192.168.1.130:8555
      - stun:8555


###摄像头链接参数  
cameras:
  cam:
    enabled: true
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/cam
          roles:
            - record
        - path: rtsp://127.0.0.1:8554/cam_sub
          roles:
            - detect
    detect:
      enabled: true
    onvif:
      host: 
      port: 80
      user: onvif
      password: admin123
      tls_insecure: false
      ignore_time_mismatch: true

record:
  enabled: true
  retain:
    days: 7
    mode: all
  alerts:
    retain:
      days: 90
      mode: active_objects #motion
  detections:
    retain:
      days: 90
      mode: active_objects #motion


detectors:
  rknn:
    type: rknn
    num_cores: 3

model:
  path: deci-fp16-yolonas_s
  width: 320
  height: 320
  input_pixel_format: bgr
  input_tensor: nhwc
  labelmap_path: /labelmap.txt
version: 0.16-0

检查配置没有问题后,右上角保存并重启frigate。

图片[5]-frigate,rk3588,ai,nvr

画面遮罩/区域

我们要使用frigate的遮罩和区域功能来屏蔽掉时间变动导致的检测失误。

图片[6]-frigate,rk3588,ai,nvr
图片[7]-frigate,rk3588,ai,nvr
图片[8]-frigate,rk3588,ai,nvr

添加完之后,记得重启frigate,否则不生效。

结尾

本教程中使用的frigate版本为V0.16,专门针对RK3588等平台,如果你是X86平台也可以借鉴,当然NPU硬件加速方面是不可以借鉴的,如果配置过程中有什么问题,大家可以在下方留言,或者来QQ群提问。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容