香橙派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)操作。昇腾论坛有博主专门对此做了对比测试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/656974.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

关于Java程序入口args参数

关于Java程序入口args参数 我们都知道一个java工程会有一个主程序入口,即我们常见到的如下代码 public static void main(String[] args) {// 中间程序 }但是很多人可能都不知道主程序入口中的String[] args后面的args会有怎么样一个使用场景呢? 其实在…

【chagpt】广泛使用API之前:考虑成本和数据隐私

文章目录 一. 定价和标记限制二. 安全和隐私 在广泛使用API之前,应该考虑两个重要因素:成本和数据隐私。 一. 定价和标记限制 OpenAI在Pricing页面上列出了模型的定价。请注意,OpenAI不一定及时更新该页面上的定价信息,因此实际…

Rust 赋能前端 -- 写一个 File 转 Img 的功能

所有耀眼的成绩,都需要苦熬,熬得过,出众;熬不过,出局 大家好,我是柒八九。一个专注于前端开发技术/Rust及AI应用知识分享的Coder 此篇文章所涉及到的技术有 Rustwasm-bindgen/js-sys/web-sysWeb WorkerWebAssemblyWebpack/Vite配置WebAssemblyOffscreenCanvas脚手架生成项…

[AI Google] I/O 2024大会上我们宣布的100件事情

I/O 2024 发生了很多事情!无论你对最新的 Gemini 应用更新感兴趣,对开发者即将推出的内容感到特别兴奋,还是迫不及待想尝试最新的生成式 AI 工具,这里几乎为每个人都提供了一些内容。不信?以下是我们在过去两天宣布的 …

如何使用 Monte Carlo 模拟作为项目管理工具

Monte Carlo 模拟是一种预测不确定事件可能结果的数学技术。我们之前曾撰写过有关其为研发专业人员带来的益处的文章,并主持过有关 Monte Carlo 模拟功能的网络讲座,以帮助产品满足预期规格、预测过程能力并确定最佳过程设置。然而,Monte …

隐藏服务器源IP怎么操作,看这一篇学会!

在当今的网络环境中,服务器作为信息和服务的中枢,常驻于公网之上,面临着各式各样的安全威胁,其中,分布式拒绝服务(DDoS)攻击尤为猖獗,它通过协调大量计算机同时向目标服务器发送请求…

打印机手动双面打印技巧

一、WORD和PDF (1)首先选择要打印的页面范围,然后选择仅奇数页打印 (2)将打印完的纸张翻过来,白纸朝上,纸张的头部先放入打印机 (3)选择要打印的页面范围,然…

【算法】递归、搜索与回溯——汉诺塔

题解:汉诺塔(递归、搜索与回溯算法) 目录 1.题目2.题目背景(拓展了解)3.题解4.参考代码5.细节6.总结 1.题目 题目链接:LINK 2.题目背景(拓展了解) 汉诺塔问题是一个通过隐式使用递归栈来进行实现的一个经典问题,该问题最早的发明人是法国…

从零教你实现django的前后端分离模式文件上传下载功能实现(2024最新)

文章目录 项目初始化配置具体文件上传下载代码的实现数据库模型类建立 运行测试 项目初始化配置 1.使用pycharm编辑器新建一个django项目 2.Terminal终端下载需要的依赖包 # 和数据库建立连接的依赖包 pip install mysqlclient # 解决跨域问题的依赖包 pip install django-co…

使用阿里云OSS实现视频上传功能

目录 前言 视频上传 前言 阿里云对象存储服务(OSS)作为一种高可用、高扩展性的云端存储服务,为开发者提供了便捷、安全的对象存储解决方案。本文将介绍如何利用阿里云OSS实现视频上传功能。 视频上传 前期准备请看阿里云OSS文件上传和下载…

颜色空间的选择

1.选择Gamma颜色空间,Web平台或者不支持线性空间,或者追求高饱和度的 2.选择Linear,追求真实光照和物理准确

9、C#【进阶】特性

特性 文章目录 1、特性概念2、自定义特性 Attribute3、特性的使用4、限制自定义特性的使用范围5、系统自带特性1、过时特性2、调用者信息特性3、条件编译特性4、外部dll包函数特性 1、特性概念 特性是一种允许我们向程序的程序集添加元数据的语言结构 它是用于保存程序机构信息…

Springboot启动时报错Property ‘mapperLocations‘ was not specified.

这几天没整boot 晚上直接运行不了了 本想是在表现层写点代码测测接口的 localhost8080找半天 结果404 先考虑好久 是不是url输入错了 然后 就发现 结果boot都不能启动了 JUnit也测不出来 找了半天 结果是开关机导致数据库没开 手动打开服务 找到MySQL启动 IDEA连接数据…

Istio ICA考试之路---2-6

Istio ICA考试之路---2-6 1. 题目2. 解题2.1 获取模板2.3 整理yaml 3. 测试 1. 题目 Using Kubernetes context cluster-2 Create and configure Istio resources necessary for routing all traffic destined for http://example.org through the default Istio egress gat…

PLC远程调试

随着工业自动化的快速发展,PLC(可编程逻辑控制器)已经成为现代工业生产线的核心控制设备。然而,传统的PLC调试方式往往受限于地理位置和物理连接,使得工程师在调试过程中面临诸多不便。在这个背景下,HiWoo …

河道流量监测解决方案 河道水位监测 水质在线监测-计讯物联科技

在城市河道与入海口间的通道施工项目中,拦水坝不仅承担着调节水流、保护生态平衡的使命,也是确保施工区域安全的关键屏障。当前,项目团队面临着严峻的挑战:水位的异常上升和流量的急剧变化,这些都可能对拦水坝的稳定性…

YOLO训练报错解决:OSError: [WinError 1455] 页面文件太小,无法完成操作

问题:OSError: [WinError 1455] 页面文件太小,无法完成操作。 Error loading "C:\Users\12706.conda\envs\yolov8\lib\site-packages\torch\lib\cudnn_cnn_infer64_8.dll" or one of its dependencies. 解决方法: 降低数据加载的线…

SpringSecurity登录和校验流程简述

认证: 验证当前访问系统的是不是本系统的用户,并且要确认具体是哪个用户 授权: 经过认证后判断当前用户是否有权限进行某个操作 一、入门案例实现 搭建springboot工程后,创建启动类和Controller,引入SpringSecurity依…

Spring Cache基本使用

Spring 从 3.1 版本开始定义缓存抽象来统一不同的缓存技术;在应用层面与后端存储之间,提供了一层抽象,这层抽象目的在于封装各种可插拔的后端存储( ehcache, redis, guava),最小化因为缓存给现有业务代码带来的侵入。 一、Spring…

【代码随想录】面试常考类型之动态规划01背包

前言 更详细的在大佬的代码随想录 (programmercarl.com) 本系列仅是简洁版笔记,为了之后方便观看 不同的二叉搜索树 96. 不同的二叉搜索树 - 力扣(LeetCode) 通过举例子发现重叠子问题 代码很简单,主要是思路问题&#xff0…