产品测评:基于RK3588工业级芯片,构建智能工业互联网网关

描述

 

 

继前几期电子发烧友用户为我们带来了关于HZHY-AI300G的精彩测评后,本期我们再次为大家分享一份新的产品测评。本次测评涵盖了更多产品性能的细节与实际操作反馈,希望能为广大爱好者提供新的启发和参考。以下是完整测评内容,欢迎大家持续关注并积极交流讨论!

 

感谢电子发烧友和北京合众恒跃科技有限公司提供的评测机会。

HZHY-AI300G工业级国产化智盒,采用RK3588工业级芯片组适应-40℃-85℃工业级宽温网关。
 

以前测试过其他厂家的RK3568产品,对瑞芯微的工具也比较了解。
 

 

项目计划

 

 

此次评测的项目计划:
 

1.根据文档,学习RK3588的AI开发环境和相关的程序框架。

2.利用RKNN框架进行视频识别的模型构建工作。

3.利用该开发板的接口实现WiFi和RS485传感器的连接工作,构建工业互联网关。

4.将所接收到的数据上传至MQTT服务器平台。

 

 

外观介绍

周末就拿到了开发板,非常的小巧,和实验室使用的工业网关做个对比,简直是美女和野兽的区别。

RK3588

产品配了两根天线,短的是WiFi的,长的是4G的。
 

RK3588

作为一款在复杂工况中使用的产品,4G模块还是非常有用的。

 

 

文字资料

 

 

在合众恒跃的网站上可以看到基本的资料:RK3588-文档教程README--ShowDoc

RK3588

产品的接口非常丰富,包括两个网口、两个USB口、一个调试口、一个OTG口、TF卡和SIM卡的接口。
 

RK3588

产品还提供了GPIO、2个RS485、1个RS232接口,采用的是插拔式的PCB接线座,非常方便使用。

RK3588

 

 

合众恒跃在B站上提供了很多学习视频,这点还是值得称道的。

内容主要包括:
 

AI 300G的环境构建和外设测试;

RK3588,包括RKNN开发工具的介绍;

RK35588项目实战,包括OCR识别、YOLOv8目标识别、人脸识别等。

厂商还提供了Linux入门的教程, 这对新手非常友好。我以前接触过一些工程师,他们以前有MCU经验,但是初试学习Linux还是有些困难的。做RK3588的产品的厂商目前很多,合众恒跃还是给人不错的第一印象。

 

 

例程测试

 

HZHY-AI300G智能盒默认的系统是Ubuntu,这样非常方便使用,接上USB键盘和鼠标就像使用电脑一样。

RK3588

厂商在百度盘中提供了测试例程,今天就来简单的测试一下。

 

RTC测试

厂商提供的例程是针对交叉编译环境的,要在本地编译,修改修改一下Makefile。

 

将原来的代码中的CC注释掉:

1.#CC=/home/hzhy/HZHY/RK3568/rk356x_

linux_sdk/buildroot/output/rockchip_rk3568/

host/bin/aarch64-buildroot-linux-gnu-gcc

2.CC=/home/hzhy/HZHY/RK3568/

3568_demo/HZ-EVM-RK3568-GCC/bin/aarch64-buildroot-linux-gnu-gcc

3.

4.APP_SRC_DIR = ./src

5.APP_INC_DIR = ./inc

 

改为:

1.rockchip_rk3568/host/bin/aarch64-

buildroot-linux-gnu-gcc#

2.CC=/home/hzhy/HZHY/RK3568/

3568_demo/HZ-EVM-RK3568-GCC/bin/aarch64-buildroot-linux-gnu-gcc
3.

4.APP_SRC_DIR = ./src

5.APP_INC_DIR = ./inc

 

然后Make就可以得到可执行文件了。开发板的RTC设备为/dev/rtc或/dev/rtc0。默认的设备访问权限是只有root用户可以读写,所以使用sudo chmod 666 /dev/rtc将设备修改为人人可以读写。然后运行./rtc_demo rtc -r就可以读出RTC数据了。
 

RK3588

UART测试

我在后面会用到RS485,所以也简单的运行了一下UART的程序程序。

RK3588

从程序的结果可以看出,系统中有4个USB串口,这是4G模块所使用的,可以通过串口给模块发指令,进行上网操作;另外三个串口,ttyS0应该是RS232,而ttyS7和ttyS8应该是RS485接口。后面,我会专门测试串口的使用。

Neuron工业协议网关软件

RK3588

Neuron早先是开源软件,核心部分和MODBUS、MQTT插件都免费。现在NeuronEx是最新版本,已经不开源了。

1

软件安装

Neuron是可以直接用现成的deb软件包安装的。厂商提供的x86和ARM架构的不同软件包。

根据不同版本及架构下载安装包,例如:
 

1.wget https://www.emqx.com/zh/downloads/

neuron/2.6.8/neuron-2.6.8-linux-amd64.deb

2.sudo apt install neuron-2.6.8-linux-amd64.deb

 

安装后的版本,Neuron 提供了 30 个点(30 个连接和 30 个数据标签)的免费额度。可在不安装 EMQ 许可证的情况下,运行这些商业模块。超出免费额度后,则必须安装有效的试用版或官方 EMQ 许可证。

2

软件运行

RK3588

3

软件运行

在南向设备中选择新建设备,创建一个名为RS485的设备,设备类型选择Modbus-RTU。

RK3588

在创建设备的页面,物理链路选择为Serial,串口设备设置为/dev/ttyS8。

RK3588

4

创建要监视的数据点位

完成南向插件的添加和配置后,要建立设备与 Neuron 之间的通信,首先应为南向驱动程序添加组和点位。点击RS485设备,添加一个名为 Data 的数据组 。

 

点位是分配给一条信息的非分层唯一关键字,其中定义了设备中的数据存储位置和数据操作属性,还包含有关数据的一些元数据信息,如比例因子、精确度和读/写属性等。我使用的温湿度传感器有两个点位:温度和湿度。点位将被分配到组中。同一个组的数据以相同的频率进行采集以及上报。创建好组和点位,即可从数据监控中获取点位的实时值。

 

我选用的传感器是冀欧速传感器,它的产品采用的是MODBUS协议。MODBUS是一个非常老的协议,1979年成为事实上的国际标准,目前有个国际组织进行维护:The Modbus Organization。

 

RS485接口产品中使用的是MODBUS over Serial Line协议,或者称为MODBUS RTU协议,其官方文档定义:Specification and Implementation Guide for MODBUS over serial line

 

协议的基本格式非常简单,有地址域、功能码、数据和CRC校验组成。

RK3588

冀欧速传感器的查询命令如下,这里功能码0x03就是用来查询数据的。

RK3588

对数据简单解释一下:

湿度数据0x164,就是10进制的356,对应着35.6% RH

温度数据0xFFDD,就是-35的补码,对应-3.5℃。

在组列表页,点击组名称进入点位列表页,添加需要采集的设备点位,包括点位地址,点位属性,数据类型等。我们添加两个点位:

温度:read属性,INT16类型,地址:1!40001,乘系数值为 0.1

湿度:read属性,INT16类型,地址:1!40002,乘系数值为 0.1

其中,其中Read属性用于读取数据,1 代表 Modbus 模拟器中设置的点位站点号,40001 代表点位寄存器地址,400001是第一个保持寄存器,设备值 * 乘系数 = 显示值`。

5

数据查看

在南向设备中,可以看到RS485设备的运行状态。

RK3588

在数据监控页面就可以看到温湿度传感器传过来的信息。

RK3588

至此,我们完成了南向设备的添加工作。

 

前面介绍了如何在HZHY-AI300G智能盒创建南向设备,有了南向设备就可以实现数据采集,但是还需要建立北向设备才能将数据发送到MQTT服务器上。在介绍北向设备之前,先介绍如何在华为IoTDA平台上建立设备。

 

华为IoTDA平台

华为云设备接入IoTDA指的是设备接入服务(IoT Device Access),是华为云的物联网平台提供海量设备连接上云、设备和云端双向消息通信、批量设备管理、远程控制和监控、OTA升级、设备联动规则等能力,并可将设备数据灵活流转到华为云其他服务,帮助物联网行业用户快速完成设备联网及行业应用集成。

 

首先进入华为云IoTDA网站:华为云物联网平台_华为云IoT平台_IoT_设备接入-华为云,点击控制台按钮进行登录。控制台界面如下图:

RK3588

注册IoTDA实例

在控制台界面处点击左上角三条横线,会出现菜单;

选择“IoT物联网”——“设备接入IoTDA”;

在左侧栏目中选择IoTDA实例,在标准版处选择购买实例;

每位用户都有一次免费的使用机会,在其中选择免费单元即可。

RK3588

创建产品

1.在左栏中选择 产品→创建产品;

2.填写产品名称、协议类型(MQTT)和数据格式(JSON);

3.设备类型选择调整为“自定义类型”,设备类型随意填写;

4.创建完产品进入产品详情界面,随后可以为产品定义物模型,添加物模型中的服务,并添加相应的功能属性。不过Neuron的MQTT插件不支持华为物模型的数据格式,除非专门写一个北向插件,否则Neuron发送的数据可以被华为云接收处理,但是不能显示为华为物模型,所以我们省略物模型的构建。

RK3588

添加设备

选择左栏中的“设备→所有设备” 注册新设备,为后面Neuron的数据上传做准备。

RK3588

接下来介绍一下如何建立北向应用将采集到的数据发送到华为云物联网服务器上。

 

Neuron的北向应用

Neuron 是运行在物联网边缘网关硬件上的工业协议网关软件,通过将来自繁杂多样工业设备的不同协议类型数据转换为统一标准的物联网 MQTT 消息,实现设备与工业物联网系统之间、设备彼此之间的互联互通,进行远程的直接控制和信息获取。Neuron 支持同时为多个不同通讯协议设备、数十种工业协议进行一站式接入及 MQTT协议转换。北向插件用于连接到IOT平台或边缘流处理引擎,北向插件和南向插件组合使用实现数据采集和数据传递。

 

创建北向节点

在Neuron控制台创建北向 MQTT 节点,连接并将点位数值上传到 MQTT Broker,此处是华为IoTDA平台。

 

在配置 -> 北向应用,点击 添加应用 添加 MQTT 客户端节点:

名称:此应用节点名称,例如,HuaweiIoT;

插件:选择 MQTT 插件。

RK3588

点击创建后,将跳转至应用配置页面,我们将在这里配置 Neuron 与北向应用建立连接所需的参数。您也可点击设备卡片上的设备配置图标进入应用配置界面。

 

设置MQTT连接参数

点击应用卡片上的 应用配置 按键进入应用配置界面设置 MQTT 连接。

RK3588RK3588

上述参数可以在云平台的左栏中 “设备→所有设备“,然后选定要使用的设备,进入设备详情后,选择”MQTT连接参数:查看” 中找到。我选择非SSL模式,这里的端口信息一定要选择1883。如果要使用SSL,则端口为8883,则在服务器和Neuron中都需要配置CA证书。

RK3588RK3588

在Neuron中点击提交,完成北向应用的配置,应用卡片自动进入 运行中 的工作状态。如果连接状态显示为断开,请检查网络状态或者MQTT连接参数是否正确。

订阅南向设备的数据

采集点位是以组为单位进行数据上传的,订阅选择要上传的点位组。

RK3588

在设备卡片或设备列,可点击数据统计图表查看及应用运行情况、接收和发送的数据情况。

在华为云上查看上传数据

如果Neuron中设备状态显示为已连接,就意味数据被成功发送到华为云上了。

 

登录华为云的控制台,在左栏中点击“监控运维→在线调试/消息跟踪→选择设备” 选中目标设备后返回点击IoT平台即可查看到相关日志。

RK3588RK3588

数据也可以导出为Excel文件供进一步分析。数据也可以转发给华为的数据库,然后利用数据大屏进行可视化分析。这些内容超出了本次测评的范围,就不详细介绍了。前面已经展示了AI300G智能盒转为工业网关的能力,接下来我们将测试RK3588的NPU推理能力。

 

首先,需要安装RKNN相关工具和Python的环境。

安装RKNN工具

瑞芯微提供的NPU相关工具包括RKNN-Toolkit2、RKNN Toolkit Lite2。

 

RKNN-Toolkit2是为用户提供在 PC、 Rockchip NPU平台上进行模型转换、 推理和性能评估的开发套件, 用户通过该工具提供的 Python接口可以便捷地完成以下功能:

1.模型转换: 支持 Caffe、 TensorFlow、 TensorFlow Lite、 ONNX、 DarkNet、 PyTorch等模型转为 RKNN模型, 并支持 RKNN模型导入导出, RKNN模型能够在 Rockchip NPU平台   上加载使用。

2.量化功能: 支持将浮点模型量化为定点模型, 目前支持的量化方法为非对称量化( asymmetric_quantized-8及asymmetric_quantized-16) , 并 支 持 混 合 量 化 功 能 。

3.模型推理: 能够在 PC上模拟 Rockchip NPU运行 RKNN模型并获取推理结果; 或将 RKNN模型分发到指定的 NPU设备上进行推理并获取推理结果。

4.性能评估: 将 RKNN模型分发到指定 NPU设备上运行, 以评估模型在实际设备上运行时的性能。

5.内存评估: 评估模型运行时的内存的占用情况。 使用该功能时, 必须将 **RKNN 模型分发 到 NPU设备中运行, 并调用相关接口获取内存使用信息。

6.量化精度分析: 该功能将给出模型量化前后每一层推理结果与浮点模型推理结果的余弦距离, 以便于分析量化误差是如何出现的, 为提高量化模型的精度提供思路。

 

RKNN Toolkit Lite2为 Rockchip NPU平台提供 Python编程接口,帮助用户部署 RKNN模型,加速 AI应用的落地。我们在开发板上一般只需要安装RKNN Toolkit Lite2,而RKNN-Toolkit2通常是安装在电脑上的。

安装pip3

AI-300G采用的是Ubuntu系统,默认是安装了Python 3.8,但是没有安装RKNN相关的工具。开发板上没有pip3,所以需要先安装一个:

sudo apt install python3-pip

 

安装RKNN Toolkit Lite2

然后从https://github.com/airockchip/rknn-toolkit2/tree/master/rknn-toolkit-lite2/packages下载所需要rknn_toolkit_lite2的安装包,对于我的配置,就是rknn_toolkit_lite2-2.0.0b0-cp38-cp38-linux_aarch64.whl文件。

RK3588

使用pip进行安装:

pip install rknn_toolkit_lite2-2.0.0b0-cp38-cp38-linux_aarch64.whl

 

另外,安装一下OpenCV,方便进行图像处理:

pip install -i https://mirror.baidu.com/pypi/simple opencv_contrib_python

 

安装RKNPU2运行库

瑞芯微的NPU运行还需要RKNPU2运行库支持。首先从https://github.com/airockchip/rknn-toolkit2/tree/master/rknpu2/runtime/Linux下载所需要的RKNN Server和RKNPU2 Runtime库。注意:不要使用厂商提供的百度盘里面的库文件,那些文件版本太低了。 瑞芯微的NPU相关工具迭代速度相当快,要注意模型、工具之间的版本匹配。

RK3588RK3588

 

至此,运行Python NPU推理程序的开发环境就准备好了。环境准备好之后,接下来利用瑞芯微的NPU进行道路视频中的车辆识别,根据识别到的车辆的数量估计道路的流量情况,实现智慧交通中的流量监控功能。

 

YOLOv8的RKNN模型

我们使用YOLOv8框架进行目标的检测。YOLOv8(You Only Look Once version 8)是一个深度学习框架,用于实现实时对象检测。YOLOv8 继承了前代模型的优点,并在此基础上进行了多项改进,包括更复杂的网络架构、更优化的训练流程和更强大的特征提取能力。

 

瑞芯微在其Github仓库中提供了大量已经优化和测试验证过的模型,其中就包括YOLOv8:

https://github.com/airockchip/rknn_model

_zoo/blob/main/examples/yolov8/

README.md。

瑞芯微提供的模型是一个优化后的模型,与官方原始模型不同。以yolov8n.onnx为例来展示它们之间的差异。

 

1、它们输出信息的对比如下。左边是官方原始模型的输出,右边是优化后的模型输出。如图所示,原始模型的输出被分为三个部分。例如,在输出集合([1,64,80,80],[1,80,80,80],[1,1,80,80])中,[1,64,80,80]是边界框的坐标,[1,80,80,80]是对应于80个类别的边界框置信度,而[1,1,80,80]是80个类别置信度的总和。

 

请注意,这里的解释是基于常见目标检测模型(如YOLO系列)的输出格式,具体细节(如维度含义)可能因模型版本或实现而异。但一般来说,上述解释提供了关于YOLO类模型输出结构的通用理解。

RK3588

2、以输出集合([1,64,80,80],[1,80,80,80],[1,1,80,80])为例,瑞芯微在模型中移除了两个卷积节点之后的子图,保留了这两个卷积的输出([1,64,80,80],[1,80,80,80]),并增加了一个reducesum+clip分支来计算80个类别置信度的总和([1,1,80,80])。

 

这里的“reducesum”操作通常用于对某个维度上的元素进行求和,而“clip”操作用于限制求和结果的取值范围,以避免数值溢出或保持数值在特定范围内。

RK3588

瑞芯微提供的YOLOv8模型的训练方法和官方的完全相同,只是在导出的时候做了一些修改,有关导出 RKNPU 适配模型说明请见:https://github.com/airockchip/ultralytics_

yolov8/blob/main/RKOPT_README.zh-CN.md。

 

程序的部署

YOLOv8程序在RK3588上的部署,我们参考了风筝2100的博文https://blog.csdn.net/weixin_42206548

/article/details/138507491,在此表示感谢。

 

和RKNN_model_zoo 中的examples 提供的YOLOv8 的相关 demo,该程序有两点改进:

1.借助rknn-multi-threaded使用多线程推理提高NPU的占用率,参考:

https://blog.csdn.net/2401_84011132/

article/details/137803348

2.优化了Python 后处理部分去除PyTorch 依赖,将后处理耗时从几百毫秒降低到了几十毫秒。

 

在 main.py 文件中,可以修改模型、线程数,还可以修改成实时推理摄像头。

1.# 推理视频文件

2.cap = cv2.VideoCapture('./720p60hz.mp4')

3.

4.# 推理实时摄像头
 

5.cap = cv2.VideoCapture(0)

6.cap.set(cv2.CAP_PROP_FRAME_

WIDTH,640)cap.set(cv2.CAP_PROP_

FRAME_HEIGHT,480)

程序启动后会显示RNKK的相关信息:

1.python3 main.py

2.I RKNN: [1932.433] RKNN Runtime Information, librknnrt version: 2.0.0b0 (35a6907d79@2024-03-24T1014)

3.I RKNN: [1932.433] RKNN Driver Information, version: 0.9.3

4.I RKNN: [1932.434] RKNN Model Information, version: 6, toolkit version: 1.6.0+81f21f4d(compiler version: 1.6.0 (585b3edcf@2023-12-11T0756)), target: RKNPU v2, target platform: rk3588, framework name: ONNX, framework layout: NCHW, model inference type: static_shape

5./rknnModel/yolov8s.rknn         done

6.I RKNN: [1932.644] RKNN Runtime Information, librknnrt version: 2.0.0b0 (35a6907d79@2024-03-24T1014)

7.I RKNN: [1932.644] RKNN Driver Information, version: 0.9.3

8.I RKNN: [1932.644] RKNN Model Information, version: 6, toolkit version: 1.6.0+81f21f4d(compiler version: 1.6.0 (585b3edcf@2023-12-11T0756)), target: RKNPU v2, target platform: rk3588, framework name: ONNX, framework layout: NCHW, model inference type: static_shape

9./rknnModel/yolov8s.rknn         done

10.I RKNN: [1932.770] RKNN Runtime Information, librknnrt version: 2.0.0b0 (35a6907d79@2024-03-24T1014)

11.I RKNN: [1932.770] RKNN Driver Information, version: 0.9.3

12.I RKNN: [1932.771] RKNN Model Information, version: 6, toolkit version: 1.6.0+81f21f4d(compiler version: 1.6.0 (585b3edcf@2023-12-11T0756)), target: RKNPU v2, target platform: rk3588, framework name: ONNX, framework layout: NCHW, model inference type: static_shape

13../rknnModel/yolov8s.rknn         done
 

 

流量统计
 

我们在每帧推理结束后,统计其中"car"、"motorbike "、 "bus"和"truck"对象的数量,作为流量统计的依据。

RK3588

为了避免上传到云服务器的数据过多,每30帧上传一次数据。我的程序已经可以在开发板上实时运行,并显示车辆检测结果。

RK3588

完成了车辆检测工作,我们将数据通过MQTT协议上传到华为IoTDA服务器。
 

 

华为IoTDA建立产品和设备

华为IoTDA的用法前面已经介绍了,这里就简单描述一下步骤。先在华为云中创建一个产品。

RK3588

然后在该产品的物模型中,添加5个属性,即合计、轿车、卡车、摩托车和客车。

RK3588

再在产品中创建一个设备用于MQTT接入。

Python程序编写MQTT客户端

pip install paho.mqtt程序中使用了paho.mqtt库,所以先需要安装该库文件:

1.pip install paho.mqtt


 

每30帧发送一次数据到服务器,发送数据的函数定义如下:

RK3588

 

运行程序,从华为云的控制台,我们就可以看到上传的数据了。

RK3588

程序下载

完整的程序可以从这里下载:*附件:hzhy-ai300g.zip

说明:其中MQTT的参数被用XXXX代替了,需要用真实的华为云接入参数代替。测试用的720p60hz.mp4和RKNN模型文件太大了,需要的同学请到publish / rknn3588-yolov8 · GitLab (bwbot.org)下载。

 

至此,我们这次评测就完全结束了,欢迎大家留言提出宝贵的意见。
 

目前电子发烧友上产品使用测评正在进行中,欢迎大家积极反馈,正是有了你们的支持,我们才能不断进步,为用户带来更加优质的智能产品体验。
 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分