当前位置: 首页 > news >正文

香橙派OrangePi AIpro,助力国产AIoT迈向新的台阶!

前言:很高兴受邀CSDN与OrangePi官方组织的测评活动,本次测评是一块基于AI边缘计算的香橙派开发板OrangePi AIpro。这是 香橙派 联合 华为昇腾 合作精心打造的新一代边缘AI计算产品,于2023年12月初发布,提供 8/20TOPS澎湃算力[1],能覆盖生态开发板者的主流应用场景,让用户实践各种创新场景,并为其提供配套的软硬件。价格方面也是颇具性价比,8TOPS、8GB内存的创客价/预售价仅为799元。

本篇博文就围绕OrangePi AIpro 开发板进行较为全面的测评,包括基础开箱及环境配置,同时会从 AI IOT 两个部分进行较为深入的测评体验。  

开箱测评

开箱展示

拿到产品,第一时间进行了拆箱。可以看到包装非常的专业、很严实,产品包括OrangePi AIpro开发板、65w pd充电器、充电线。瓷漆的设计高端大气,各细节考虑全面,很有质感。看了下充电器参数,兼容了5V/3A、9V/3A、12V/3A、15V/3A、20V/3.25A这几个常见的电压和电流输出,同时看到散热风扇和烧录系统镜像的32G内存卡都已经安装好了,一般AI CPU运行模型都需要散热,将芯片维持在一个正常的温度范围内是很有必要的。所以拿到板子不需要额外过多的安装步骤,开箱就能用起来,这一点还是非常友好的。

芯片方面,拆开风扇可以看到丝印上印制CN,表示中国制造的国产华为芯片,不过具体哪个厂商制作的目前还不清楚。可以说拿到这块香橙派开发板还是感觉很自豪的,即使国外限制芯片也不必担心,我们也拥有自己优秀的AI芯片,所以非常值得我们学习和使用OrangePi AIpro。

视图展示

下面是官方的开发板正反面视图,更好地展示香橙派细节。

正面试图:

背面试图:

注意到MIPI摄像头和显示器的接口,三年前玩过树莓派3B,也有摄像头的接头,没记错的话接口应该是一样的。板载的蓝牙WIFI天线,这里还专门标出来2.4G频段。背面可以看到可以接M.2的固态硬盘,定位孔和传统的开发板设计是非常相似的,上手也是非常的友好 。

⚠香橙派提醒:使用板子时天线不能贴到板子上,同时天线上的导电布也不能挨着板子,否则可能会烧坏板子哦~

接线登录

OrangePi AIpro的接线非常简单,因为板子上有个Micro-USB的调试串口,旁边正好有一根Micro-USB接口的接线。可是插入电脑没识别到串口,这根线好久没用可能坏掉了,现在更常见的是Type-C接口的,手头也没有其他Micro-USB的线了,不过没关系,还可以使用CH340串口调试工具。按照官方手册,UART0 的 TX 和 RX 引脚接到了40 Pin 扩展接口中的8号和10号引脚。

注意:查看手册,这里拨码开关BOOT1和BOOT2都拨到右边,否则无法正常启动内核。

刚上电风扇飕飕一顿转,吓我一跳,哈哈!看来是板子运行起来了,过一会风扇速度降下来了,风扇转速应该是软件控制的,后面再改一下吧。

打开MobaXterm软件,使用串口登录,这里波特率设置115200,RESET后打印启动信息和登录命令行,输入如下账号和密码即可完成串口登录:

除了串口,还有更为方便的WIFI方式连接到开发板,因为板子是带WIFI模块的。这里电脑和开发板连接同一个路由器,确保IP地址在同一个网段下,这样我们就能用SSH连接开发板,然后就可以把串口线拿掉,方便开发调试。

#板子搜索连接周围WIFI热点的方法:
nmcli dev wifi  #WIFI扫描
sudo nmcli dev wifi connect wifi_name password wifi_passwd
wifi_name:    需要换成想连接的WIFI 热点的名字。
wifi_passwd:  需要换成想连接的WIFI 热点的密码。

电脑和开发板连接同一个路由器并处在同一个网段后,就可以通过终端输入ssh HwHiAiUser@xxx.xxx.xx.xx远程登录开发板了,密码对应为Mind@123,当然也可以直接使用mobaxterm进行连接,这也是官方推荐的方式,

外设引脚

OrangePi AIpro接口很丰富,引脚也引出来了,一共40 Pin,非常的细致,如下图所示:

这里手册也介绍了40 Pin 接口使用的一些注意事项:

  • 40 pin 接口中总共有26 个GPIO 口,但8 号和10 号引脚默认是用于调试串口功能的,并且这两个引脚和Micro USB 调试串口是连接在一起的,所以这两个引脚请不要设置为GPIO 等功能。

  • 所有的GPIO 口的电压都是3.3v。

  • 40 pin 接口中27 号和28 号引脚只有I2C 的功能,没有GPIO 等其他复用功能,另外这两个引脚的电压默认都为1.8v。

有了以上这些基本的环境搭建和板子初步了解后,就可以初步体验一下部分外设功能了。

点亮一盏LED灯

作为一名嵌入式工程师,拿到一块新的板子,怎么能不点亮一盏灯呢?正好手里有一个HW-269灯珠模块,使用杜邦线飞线连接,这里选取了几个靠近的GPIO进行接线。

具体接线:香橙派两个提供5V电源分别接到灯珠引脚2和引脚3,GPIO2_15连接灯珠引脚3,输出低电平即可点亮灯。

手册里介绍 Linux 镜像中预装了 gpio_operate 工具用于设置 GPIO 管脚的输入与输出方向,也可将每个GPIO 管脚独立的设为 0 或 1。

gpio_operate set_direction 2 15 1  //设置GPIO2_15为输出方向
gpio_operate set_value 2 15 0      //设置GPIO2_15输出低电平,点亮
gpio_operate set_value 2 15 0      //设置GPIO2_15输出高电平,熄灭

接好线,命令行分别键入设置GPIO方向以及输出电平,可以发现灯亮了,燃起来了!好像又回到了最初学习单片机的场景,一瞬间有点恍惚......

感受:

这里不得不说香橙派 AIpro的 40 Pin引脚确实丰富,提供了丰富的外设资源,包含:GPIO、I2C、UART、SPI 和 PWM等功能。Linux 镜像中给我们提前预装了 gpio_operate 工具用于设置 GPIO 管脚的输入与输出方向,也可将每个 GPIO 管脚独立的设为 0 或 1。很方便。后面自己又试用了 USART、SPI、IIC,手册上都有对应的例程,稍加改动就能应用到实际的项目中去。

OrangePi AIpro AI功能体验测评

登录juypter lab

官方手册给出的几个AI例程均在 Linux 系统桌面使用,这里如果你没有HDMI屏幕的话,可以在电脑上远程连接的,需要确保开发板和电脑在同一个频段,将板子IP跟在notebooks启动脚本后面即可。具体操作步骤如下:

首先进入这个目录:

 cd ~/samples/notebooks

开启notebook服务器:

./start_notebook.sh 192.168.2.109  #IP是OrangePi AIpro开发板的地址

将上图中红框内容粘贴到Chrome浏览器,如下所示,即可运行官方预制的AI例程了,可以看到有9个AI样例,下面就挑选几个感受一下OrangePi AIpro的算力。

目标检测用例测评

该样例中 infer_mode 的值可赋值为image、video 和camera,分别对应对图片、视频、USB 摄像头中的内容进行目标检测,默认值为video。这里使用的是video,实际运行启动时间大概20秒,检测效果不错,没有出现误标情况。

这里在运行此模型时我SSH另起一个连接,以此检测案例运行过程中芯片的数据信息,键入如下指令:

npu-smi info watch

在运行目标检测YOLOv5s例程时,通过监测发现芯片温度稳定在57°左右,正常待机时在52°左右,在风扇加持下温度没有明显上升;AI Core占用率不超过30%,内存占用率稳定在37%,可见YOLOv5轻量的网络在OrangePi AIpro运行还是挺流畅,适合在边缘设备部署,进行实时目标检测。

文字识别用例测评

OCR一般指Scene Text Recognition (场景文字识别),主要面向自然场景。 OCR两阶段方法一般包含两个模型,检测模型负责找出图像或视频中的文字位置,识别模型负责将图像信息转换为文本信息。此样例中,我们使用的检测模型为CTPN,识别模型则是SVTR。

运行结果:两排字均能识别出来,包括标点符号,识别速度还是很快的。

目标分类用例测评

运行结果:案例运行大概3秒后,我们可以看到模型对图片进的推理结果,一共展示了五种类别的置信度,最高的置信度类别是Standard Poodle,达到94%,效率很高。

OrangePi AIpro IoT亚马逊云使用测评

IoT作为AIoT的重要组成部分,正好作者最近工作和这方面强相关,对IoT也比较熟悉,在这里顺带测试一下OrangePi AIpro 在IoT方面的使用效果,这里选取的是AWS亚马逊云。

连接AWS IoT Core

AWS IoT Core 支持与 IoT 设备、无线网关、服务和应用程序的连接。设备可以连接到服务和其他设备,这样它们就可以向 AWS IoT 服务和其他设备发送数据和从中接收数据。应用程序和其他服务还可以连接 AWS IoT Core 以控制和管理物联网设备,并处理来自物联网解决方案的各种数据。

SDK 和工具

  • 这些AWS 软件开发工具包为 API 和其他服务的 AWS IoT Core API 提供特定语言的支持。 AWS AWS 移动 SDK 为应用程序开发者提供针对特定平台的 AWS IoT Core API 支持,以及移动设备上的其他 AWS 服务。

  • AWS CLI提供对 AWS IoT 服务端点提供命令行访问权限,并提供在 PowerShell 脚本环境中管理 AWS 服务和资源的工具。

身份验证

  • 服务终端节点使用 IAM 用户和 AWS 证书对用户进行身份验证。

连接前需要先创建一个产品,详细细节参考文档:创建AWS IoT资源然后保存Download certificates and keys,下载根 CA 文件,入下图所示:

将证书私钥等文件保存到香橙派的root/certs路径下保持,使用SSL加密socket通信导入到AWS SDK即可,入下所示。

static int32_t setCredentials( SSL_CTX * pSslContext,const OpensslCredentials_t * pOpensslCredentials )
{int32_t sslStatus = 0;sslStatus = setRootCa( pSslContext, pOpensslCredentials->pRootCaPath );sslStatus = setClientCertificate( pSslContext, pOpensslCredentials->pClientCertPath );sslStatus = setPrivateKey( pSslContext, pOpensslCredentials->pPrivateKeyPath );return sslStatus;
}

使用官方AWS IoT 嵌入式 C 示例的设备 SDK运行程序,由于是C语言,需要在香橙派安装CMake,编译后运行查看日志发现已经先后成功地建立TLS和MQTT连接。

基于MQTT数据交互

Json格式的请求响应文档下格式如下所示:

{"state": {"desired": {"attribute1": integer2,"attribute2": "string2",..."attributeN": boolean2},"reported": {"attribute1": integer1,"attribute2": "string1",..."attributeN": boolean1}},"clientToken": "token","version": version
}
  • state — 更新仅影响指定字段。通常,您将使用 desiredreported 属性,但不能在同一请求中同时使用这两个属性。

    • desired — 请求在设备中更新的状态属性和值。

    • reported — 设备报告的状态属性和值。

  • clientToken — 如果使用,您可以通过客户端令牌匹配请求和相应的响应。

  • version 如果使用,仅当指定的版本与 Device Shadow 服务拥有的最新版本相符时,该服务才会处理更新。

我们通过desiredreported 这种AWS的格式,实现数据上报和下发控制。

OTA初探

作为一款AI功能开发板,当我们的模型经过不断迭代优化后,需要将新的程序更新到板子,这里就需要通过远程空中下载的方式给设备升级(OTA)。使用AWS JOB机制便可实现功能,同时考虑到Linux升级文件一般会比较大,为了加快升级速度这里引用差分逻辑。

下面是AWS 官方文档给出的整个JOB 流转过程,这里简单移植使用了一下。

我把OrangePi AIpro的初始版本号设置成0.0.0,云平台上传了两个基础包和一个差分包,这里升级检测的时候会下载这两个差分包和全包,然后还原成原始文件。在板载外置天线加持下,下载速度还是比较快的,这里我只是把包下载好了,然后直接上报升级成功。后面有时间会研究一下OrangePi AIpro bootloader相关内容,把完整的OTA链路打通。

总结建议

本文通过开箱简单做了测评,从OrangePi AIpro的试图展示到外设资源,同时也点亮了一盏LED灯初步感受这块开发板的使用体验,然后从AI和IOT两个方面进行较为细致的测试。由于是第一次接触香橙派,以前一直使用的都是树莓派,经过对比发现OrangePi AIpro功能还是非常的强大,生态比想象的要完善,虽然网上相关资源比树莓派要少,但通过阅读官方手册就能上手,还是比较全面的。同时开发板的外观精致,包装专业,配件也齐全。可以发现OrangePi AIpro无论是在人工智能领域、工业自动化、还是智能家居等,都是一个不错的选择。

不过在使用过程中,个人感觉有以下两个点可以优化下:

  • 1、相比较之前使用过的树莓派,Micro-USB的串口调试很方便,不过建议换成Type-C接口更好,毕竟更普遍;

  • 2、两个BOOT拨码开关都在板子背面,如果开发板放入金属壳子,打开顶盖是看不到拨码开关的,需取下板子才能更改拨码开关位置,放置正面会更方便一点,或许官方觉得一般人不会频繁更改启动配置吧。

未来展望

昇腾的不断发展在AIoT领域发挥着越来越重要的作用,但相比较树莓派成熟的生态体系来讲还有一段距离,毕竟进场晚,不过没关系,有这么多优秀的开发工程师不断使用、改进、分享合作,共同推动昇腾AI官方社区生态发展,所谓前人种树,后人乘凉。同时我们对国产品牌也要有信心,期待香橙派与华为昇腾团不断更新迭代,促进国产AIoT为各行业的智能化转型赋能。

以上是OrangePi AIpro到手一周的使用感受,后期有时间会继续探索输出更多有关OrangePi AIpro教程及技术博文,欢迎大家交流探讨。

[1]:TOPS,全称为Tera Operations Per Second,是处理器运算能力单位。TOPS是Tera Operations Per Second的缩写,1TOPS代表处理器每秒钟可进行一万亿次(10^12)操作。昇腾论坛有博主专门对此做了对比测试

相关文章:

  • 阿里开源React应用动效解决方案:ant-motion
  • C语言#include<>和#include““有什么区别?
  • 【算法】位运算算法——丢失的数字
  • Flutter 中的 BaseLine 小部件:全面指南
  • Linux快速定位日志 排查bug技巧和常用命令
  • 06_知识点总结(JS高级)
  • 基于FPGA实现LED的闪烁——HLS
  • AURIX TC3xx单片机介绍-启动过程介绍2
  • 他用AI,抄袭了我的AI作品
  • C#--WPF自定义控件模板示例
  • mysqlbinlog解析
  • 数据分析之统计学基础
  • debian 常用命令
  • 通关!游戏设计之道Day17
  • 【如何在Qt C++中使用SSL和TLS加密传输数据?】
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • 2017前端实习生面试总结
  • C++11: atomic 头文件
  • C语言笔记(第一章:C语言编程)
  • echarts花样作死的坑
  • Java 最常见的 200+ 面试题:面试必备
  • JavaScript DOM 10 - 滚动
  • React+TypeScript入门
  • REST架构的思考
  • scrapy学习之路4(itemloder的使用)
  • Spring Boot快速入门(一):Hello Spring Boot
  • vue数据传递--我有特殊的实现技巧
  • 程序员最讨厌的9句话,你可有补充?
  • 关于List、List?、ListObject的区别
  • 漂亮刷新控件-iOS
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 浅谈web中前端模板引擎的使用
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 移动端解决方案学习记录
  • 用jquery写贪吃蛇
  • ionic入门之数据绑定显示-1
  • 扩展资源服务器解决oauth2 性能瓶颈
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • ### RabbitMQ五种工作模式:
  • #宝哥教你#查看jquery绑定的事件函数
  • %check_box% in rails :coditions={:has_many , :through}
  • (八)Spring源码解析:Spring MVC
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (译)2019年前端性能优化清单 — 下篇
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转)linux下的时间函数使用
  • ./和../以及/和~之间的区别
  • .NET 发展历程
  • .Net中wcf服务生成及调用
  • /proc/stat文件详解(翻译)
  • ::