AI开发初体验:昇腾加持,OrangePi AIpro 开发板
文章目录
- 一、前言
- 二、板子介绍
- 2.1 拆箱
- 2.2 板子规格
- 2.2.1 常规项目
- 2.2.2 扩展项目
- 2.2.3 操作系统
- 2.3 点板画面
- 三、AI程序初体验
- 3.1 新奇的地方
- 3.2 运行第一个AI程序
- 3.2.1 硬件连接
- 3.2.2 串口连接
- 3.2.3 开启外部IP端口
- 3.2.4 查询板子IP地址
- 3.2.5 了解 juypter lab 启动脚本
- (1)samples 目录
- (2)查看 start\_notebook.sh 脚本
- 3.2.6 启动 juypter lab
- 3.2.7 登入 juypter lab 开发环境
- 3.2.8 编译、运行AI程序:01-yolov5
- 3.3 其他例子
- 3.3.1 文字识别:02-ocr
- 3.3.2 图像分类:03-resnet
- 3.3.3 制作卡通图片:05-cartoonGAN\_picture
- 四、篇尾
一、前言
因为工作需要,以及个人兴趣,本人经常购买开发板进行调试、学习,但具备AI计算的开发板,本人尚未体验过,究其原因,是因为自觉知识储备可能无法胜任AI的开发工作。然而,在体验了OrangePi AIpro 开发板之后,却大大改变了我的看法——AI时代,真的已经来临!
二、板子介绍
OrangePi AIpro 开发板是香橙派联合华为精心打造的高性能 AI 开发板,其内置华为昇腾 AI 处理器,作为国产AI 芯片翘楚,实乃开发板的一大亮点!
2.1 拆箱
- 拆开包装,可见板子设计的相当精巧,裸板尺寸仅107*68mm,重量仅82克,搭配小巧的收纳盒,非常方便携带。而板子的小巧体积,也方便用做产品的原型开发,或直接用作二次开发。
2.2 板子规格
个人看法,从下列规格参数,从其接口数量和种类之多,可体会到 OrangePi AIpro 是一片相当不错的开发板,可应付日常开发中遇到的各种IO场景,举几个例子:
- 例如存储接口,32M的spi flash,足以存储并运行linux 小系统;而SD卡槽和eMMc卡槽,则可应付日常电子产品的存储需求,例如8G到64GB的eMMc,被广泛应用于TV、投影、平板、机顶盒、行车记录等等。而M.2接口,则可以用于大容量的数据储存,例如个人云存储、安防摄像头、小型电脑。
- 又如 HDMI TX接口,对于开发非常方便,只需接上家里任一显示器,就可见到板子操作画面;而 MIPI CSI/DSI 接口,则可用于适配许多主流摄像头、显示屏。
- 再如,所具备的40 pin 扩展口,均有多种功能复用,除默认的GPIO外,还可可配置成UART、I2C、SPI、PWM 等接口。
2.2.1 常规项目
- 型号:OrangePi AIpro
- CPU:昇腾 4 核 64 位 Arm 处理器 + AI 处理器 (310B4)
- 算力:半精度 4 TFLOPS、整数精度:8 TOPS
- 内存 :8GB (另有16GB版本)
- 存储:板载 32MB 的 SPI Flash、具备SD卡槽、eMMc卡槽、 M.2接口( NVMe SSD 或 SATA SSD)
- 网络:千兆有线网口、支持2.4G 和 5G 双频 WIFI • BT4.2
- USB:2 个 USB3.0 Host 接口 、1 个 Type-C 接口
- 音频:1 个 3.5mm 耳机孔,支持音频输入输出、2 个 HDMI 音频输出
- 视频输入:2 个 MIPI CSI 2 Lane 接口
- 视频输出:2 个 HDMI 接口 、1 个 MIPI DSI 2 Lane 接口
- 电源输入:Type-C 供电(20V PD-65W 适配器,非常好用)
2.2.2 扩展项目
- 40 pin 扩展口:用于扩展 UART、I2C、SPI、PWM 和 GPIO 等接口
- 按键:1 个复位键,1 个关机键,1 个升级按键
- 拨码开关:2 个,可控制从 SD 卡、eMMC 或SSD 启动系统
- 风扇接口:支持 4 Pin 0.8mm 间距,12V PWM 散热风扇
- 电池接口:2 pin,2.54mm 间距,用于接 3 串电池,支持快充
- 串口:Micro USB 接口的调试串口(调试很方便)
2.2.3 操作系统
ubuntu系统相信大部分人都已经使用过,也是本人最熟悉的系统,而 openEuler 则是华为正式发布操作系统,绝对是花粉的不二之选!
- 支持 Ubuntu 22.04
- 支持 openEuler 22.03
2.3 点板画面
因为出厂已经刷好了Ubuntu 22.04的系统,所以,收到后,整个点板的过程,就非常简单了:
- 首先,接入20V的Type C接口电源线;
- 其次,连接上HDMI线到显示器,上电即可看到下图画面。
- 备注:下图中,本人还连接上了网线、以及无线键盘鼠标,如此就可以如同使用x86 Ubuntu系统一样,使用开发板了!
三、AI程序初体验
作为一名熟悉Linux驱动开发的博主,本想写一些驱动的章节,但想一想,这不是暴殄天物吗?如此一片国产AI开发板,自然要以推广AI的学习、体验、应用为主!
3.1 新奇的地方
如本文开头所述,本人之前从未接触过AI开发,而本人也是香橙派的老用户了,手上已有其他3片香橙派不同Soc的开发板。
以前的这些开发板,都是使用交叉编译,从未想过在开发板上编译、运行、调试应用程序。
而 OrangePi AIpro 开发板,就是这么做的(虽然它也支持交叉编译),究其原因,如下:
- 因存在昇腾AI处理器,不仅可以支持代码开发和编译,同时还可以运行AI应用程序、进行训练脚本的迁移、开发、调试。
- 而在交叉编译服务器上,因不具备昇腾AI处理器,仅能用于代码开发、编译等不依赖于昇腾AI处理器的开发活动(例如ATC模型转换、算子、离线或在线的推理和训练、应用程序的纯代码开发)。
3.2 运行第一个AI程序
在运行AI程序前,我们需要先准备开发和运行环境,参照着 OrangePi AIpro 开发板的用户手册,可以很方便的完成平台搭建。因本人库存的屏幕太小,仅有7寸,不太方便直接在7寸屏上操作,所以,下面的实验,本人稍作了一些改动,省去了让开发板连接HDMI显示器的步骤,供大家参考。
3.2.1 硬件连接
- 串口:使用对应接口USB线(需购买),连接开发板MicroUSB 接口和 PC 的USB口,可看到设备管理器中多出了一个CH343的USB转串口设备。
- 电源:使用开发板套件的20V PD-65W 适配器即可,用TypeC口连接到开板,给板子供电。
- 网口:连接到自己的路由器上,需要能上网,因为后面需要安装许多软件工具,以及开启Samba、Web端口。
3.2.2 串口连接
因板子直接提供了MicroUSB串口,使得连线非常简单,连上MicroUSB线之后,按下图设置好串口,即可登录。
- 默认用户名: HwHiAiUswer
- 默认密码:Mind@123
- root密码:Mind@123
3.2.3 开启外部IP端口
- 开启端口,需要首先安装 ufw 防火墙,并设置相关规则
- 关于端口,因AI应用程序的编译、运行依赖于 juypter lab(一个基于web浏览器的程序),而默认程序的运行地址端口为 127.0.0.1:8888,所以,如果不是在本机运行浏览器,而是想通过局域网访问的话,就需要开启对外的8888端口。
(1)获取root权限
(base) HwHiAiUser@orangepiaipro:~$ sudo su
[sudo] password for HwHiAiUser: (2)安装防火墙
(base) root@orangepiaipro:/home/HwHiAiUser# apt install ufw(3)设置防火墙端口策略,开启对外8888端口
(base) root@orangepiaipro:/home/HwHiAiUser# ufw allow 8888
3.2.4 查询板子IP地址
- 如下图,使用ifconfig命令,查询到 eth0 的IP地址为:192.168.5.21
3.2.5 了解 juypter lab 启动脚本
juypter lab 可以简单把它看做是一个基于web的IDE,可以编辑、运行、调试本文所涉及的AI程序。
(1)samples 目录
- 进入如下samples目录,除了看到有9个AI Sample 程序外,还有一个 start_notebook.sh 脚本
(base) HwHiAiUser@orangepiaipro:~$ cd samples/notebooks/
(base) HwHiAiUser@orangepiaipro:~/samples/notebooks$ ls
01-yolov5 06-human_protein_map_classification
02-ocr 07-Unet++
03-resnet 08-portrait_pictures
04-image-HDR-enhance 09-speech-recognition
05-cartoonGAN_picture start_notebook.sh
(2)查看 start_notebook.sh 脚本
- 从下面启动脚本,可以获知 juypter lab的启动方式,我们需要以 --ip $1 的形式来启动,这样就不用外接一个显示器了,直接在PC上就可以通过 web浏览器来操作实验。
(base) HwHiAiUser@orangepiaipro:~/samples/notebooks$ more start_notebook.sh
. /usr/local/Ascend/ascend-toolkit/set_env.sh
export PYTHONPATH=/usr/local/Ascend/thirdpart/aarch64/acllite:$PYTHONPATHif [ $# -eq 1 ];thenjupyter lab --ip $1 --allow-root --no-browser
elsejupyter lab --ip 127.0.0.1 --allow-root --no-browser
fi(base) HwHiAiUser@orangepiaipro:~/samples/notebooks$
3.2.6 启动 juypter lab
- 如下图,执行 $ start_notebook.sh 192.168.5.21
- 启动完成后,复制如图所示的 http地址字符串,填入到浏览器地址栏中,即可打开 jupyter lab
3.2.7 登入 juypter lab 开发环境
- 如下图所示,将楼上复制的http地址字符串,填入到PC浏览器中,回车,即可登入 juypter lab 开发环境。
- 此IDE环境的各个功能区布局,一目了然,非常简单。
3.2.8 编译、运行AI程序:01-yolov5
YOLOv5 是系列中较为轻量的AI算法模型,适合在边缘设备部署,进行实时目标检测。这个程序,就如同一个 Helloworld,对于AI小白来说,很快便能联想到 AI应用程序的开发流程和应用场景。简单的说,这些开源的模型,或者算法,让AI应用开发工程师,可以跳过晦涩难懂的AI算法,直接进入AI模型的训练和AI应用开发阶段,如此,一扇大门,已为我们打开!
如下图所示:
- 先点击,进入到 01-yolov5 项目目录,这是一个基于目标检测的AI程序。
- 双击 main.lpynb 文件,此文件是在 Jupyter Lab 中运行 该样例的文件,双击打开,在右侧窗口中会显示 main.ipynb 文件的内容,同时在编译运行后,还能显示运行结果。
- 点击貌似快进播放的按键,让项目restart编译运行。
- 若干秒后,即显示运行结果。
动态画面显示:
3.3 其他例子
篇幅有限,不能将所有例子一一展示。最后,本人再抽出其中几个,分别是文字识别、图像分类和图像转化(卡通化),大家看看,它们是不是也非常有趣、非常实用呢?
3.3.1 文字识别:02-ocr
- 该AI程序可以解析出图片中的文字
3.3.2 图像分类:03-resnet
- 如下演示,输入图片,以94%的可能性,识别为一只标准贵宾犬
3.3.3 制作卡通图片:05-cartoonGAN_picture
- 功能:使用cartoonGAN模型对输入图片进行卡通化处理。
- 转化前,如下图,是一张自然的风景照
- 转化后,如下图,已具备卡通图的风格
四、篇尾
首先,总体来说,这次 OrangePi AIpro 开发板的体验是非常棒的。所提供的样例程序,都是日常中使用非常多的,例如图像分类,文字识别,语音识别等。同时也还有许多 AI 模型,通过昇腾ATC工具转换后,即可在开发板上使用,样例是非常的丰富。
其次,基于本次体验,本人也能很快想到一些应用场景,可以作为后续的开发尝试,举个例子,如今我们拍照已经非常方便,但也导致了一个结果,相机里的照片实在太多,比如幼儿园的老师,小学的老师,都会拍摄很多学生日常的校园照片,但苦于分类,也不知道哪个学生拍的多,哪个学生拍得少(那可得留意下哦,否则家长很生气哦)。就此,就可以利用本平台,开发一个照片的AI分类程序,对照片人物进行识别,经过模型训练后,即可将输入的照片分类到各个学生名字的目录下,还能统计各学生的照片数量,可以提醒老师给那些缺乏关注的孩子多拍些照片,而经过云存储对接后,还可方便的分享给家长,这样的AI程序,是不是很棒呢?
最后,作为一名程序员,虽然生活中,AI虽然已被广泛应用,但亲身体验一番AI应用程序的开发后,那感觉还是大不一样!AI 的时代,真的到来了,开始步入了寻常百姓家!
相关文章:

AI开发初体验:昇腾加持,OrangePi AIpro 开发板
文章目录 一、前言二、板子介绍2.1 拆箱2.2 板子规格2.2.1 常规项目2.2.2 扩展项目2.2.3 操作系统 2.3 点板画面 三、AI程序初体验3.1 新奇的地方3.2 运行第一个AI程序3.2.1 硬件连接3.2.2 串口连接3.2.3 开启外部IP端口3.2.4 查询板子IP地址3.2.5 了解 juypter lab 启动脚本&a…...

微服务架构下Docker容器技术与Kubernetes(K8S)
Kubernetes、微服务和Docker容器技术的结合提供了一个强大、灵活且高效的平台,能够应对现代应用程序的复杂性和动态性。Kubernetes的自动化管理、服务发现、负载均衡和配置管理,与Docker的标准化打包和运行环境相结合,最大化地发挥了微服务架…...

风萧萧兮易水寒,壮士一去兮不复还 的 rm 命令
风萧萧兮易水寒,壮士一去兮不复还 的 rm 命令 风萧萧兮易水寒,壮士一去兮不复还 的 rm语法几个示例/bin/rm Argument list too long – Linux”配合find与xargs完成删除海量文件使用find的delete选项 快速删除大文件 风萧萧兮易水寒,壮士一去…...

How Diffusion Models Work
introduction intuition goal 让神经网络学到图像是什么样的,一种方式是对数据添加不同级别的噪音,让神经网络能够区分细节/总体轮廓 训练一个神经网络去产生精灵 sampling nn 图像恢复 论文 https://zhuanlan.zhihu.com/p/686235079...

antd table列选中效果实现
前言 开发中有一个需要呈现不同时间点各个气象要素的值需求,我觉得一个table可以实现这类数据的展示,只是因为时间点时关注的重点,所以需要列选中效果,清晰的展示时间点下的要素数据。我选择的是antd的table组件,这个…...

Golang实现文件复制
方法:三种 package zdpgo_fileimport ("errors""io""os" )// CopyFile 使用io.Copy进行文件的复制,同时也会复制文件的所有权限 // param src 复制文件 // param des 目标文件 // return error 错误信息 func CopyFile(s…...

探秘SpringBoot默认线程池:了解其运行原理与工作方式(@Async和ThreadPoolTaskExecutor)
文章目录 文章导图Spring封装的几种线程池SpringBoot默认线程池TaskExecutionAutoConfiguration(SpringBoot 2.1后)主要作用优势使用场景如果没有它 2.1版本以后如何查看参数方式一:通过Async注解--采用ThreadPoolTaskExecutordetermineAsync…...

kubernetes(Jenkins、kubernetes核心、K8s实战-KubeSphere、)
文章目录 1. Jenkins1.1. 概述1.1.1. 简单部署1.1.2. 自动化部署1.1.3. DevOps概述1.1.4. CI/CD概述 1.2. jenkins介绍及安装1.2.1. 安装1.2.2. 解锁jenkins1.2.3. 安装推荐插件1.2.4. 创建管理员用户1.2.5. 升级jenkins版本1.2.6. 安装额外插件blue ocean1.2.7. jenkins界面说…...

国际数字影像产业园|科技与文创产品创意集市,共筑创新文化新高地
5月29日,为进一步增强园区与企业之间粘性,不断激发企业的创新活力,园区举办了“数媒大厦科技与文创产品创意集市活动”。本次活动由成都树莓信息技术有限公司主办,成都目莓商业管理有限公司、树莓科技(成都)…...

leetcode-55 跳跃游戏
leetcode Problem: 55. 跳跃游戏 思路 假设我们是一个小人,从第一个下标开始,每次经过一个位置,我们就可以根据当前位置的数值nums[i]和位置下标i计算出该位置所能到达的后续位置的最大值rnums[i]i。而这个r之前的区域一定都是可以经过的。…...

Vue——计算属性 computed 与方法 methods 区别探究
文章目录 前言计算属性的由来方法实现 计算属性 同样的效果计算属性缓存 vs 方法 前言 在官方文档中,给出了计算属性的说明与用途,也讲述了计算属性与方法的区别点。本篇博客只做自己的探究记录,以官方文档为准。 vue 计算属性 官方文档 …...

Java中的ORM框架——myBatis
一、什么是ORM ORM 的全称是 Object Relational Mapping。Object代表应用程序中的对象,Relational表示的是关系型数据库,Mapping即是映射。结合起来就是在程序中的对象和关系型数据库之间建立映射关系,这样就可以用面向对象的方式,…...

vue2生命周期和计算属性
vue2的生命周期 删除一些没用的 App.vue 删成这个样子就行 <template><router-view/></template><style lang"scss"></style>来到路由把没用的删除 import Vue from vue import VueRouter from vue-router import HomeView from .…...

Hadoop3:MapReduce之简介、WordCount案例源码阅读、简单功能开发
一、概念 MapReduce是一个 分布式运算程序 的编程框架,是用户开发“基于 Hadoop的数据分析 应用”的核心框架。 MapReduce核心功能是将 用户编写的业务逻辑代码 和 自带默认组件 整合成一个完整的 分布式运算程序 ,并发运行在一个 Hadoop集群上。 1、M…...

centos8stream 编译安装 php-rabbit-mq模块
官方GitHub:https://github.com/php-amqp/php-amqp 环境依赖安装 dnf install cmake make -y 1.安装rabbitmq-c cd /usr/local/src/ wget https://github.com/alanxz/rabbitmq-c/archive/refs/tags/v0.14.0.tar.gz tar xvf v0.14.0.tar.gz cd rabbitmq-c-0.14.0/…...

「异步魔法:Python数据库交互的革命」(二)
哈喽,我是阿佑,上篇文章带领了大家跨入的异步魔法的大门——Python数据库交互,一场魔法与技术的奇幻之旅! 从基础概念到DB-API,再到ORM的高级魔法,我们一步步揭开了数据库操作的神秘面纱。SQLAlchemy和Djan…...

php正则中的i,m,s,x,e分别表示什么
正则表达式模式修饰符(也称为标志或模式修饰符)用于改变正则表达式的行为。这些修饰符可以附加在正则表达式的定界符之后,通常为正斜杠(/)或井号(#),以改变搜索或替换的方式。 1、i…...

最新!2023年台湾10米DEM地形瓦片数据
上次更新谷歌倾斜摄影转换生成OSGB瓦片V1.1版本,使用该版本生产了台北、台中、桃园三个地方的倾斜摄影OSGB数据,在OSGB可视化软件中进行展示,可视化效果和加载效率俱佳。已经很久没更新地形瓦片数据,主要是热点地区的原始数据没有…...

网络学习(11) |深入解析客户端缓存与服务器缓存:HTTP缓存控制头字段及优化实践
文章目录 客户端缓存与服务器缓存的区别客户端缓存浏览器缓存应用程序缓存优点缺点 服务器缓存优点缺点 HTTP缓存控制头字段Cache-ControlExpiresLast-ModifiedETag 缓存策略的优化与实践经验分享1. 使用合适的缓存头字段2. 结合使用Last-Modified和ETag3. 利用CDN进行缓存4. 实…...

uniapp中二次封装jssdk和使用
直接上代码 // import wx from "weixin-js-sdk"; /*** 考虑到包的大小,所以直接在 index.html 文件中cdn引入了jssdk* <script src"https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>* 注意:这里 jWeixin 一…...

只刷题可以通过PMP考试吗?
咱们都知道,PMBOK那本书,哎呀,读起来确实有点费劲。所以,有些人就想了,干脆我就刷题吧,题海战术,没准儿也能过。这话啊,听起来似乎有点道理,但咱们得好好琢磨琢磨。 刷题…...

Python Selenium 详解:实现高效的UI自动化测试
落日余辉,深情不及久伴。大家好,在当今软件开发的世界中,自动化测试已经成为保障软件质量和快速迭代的重要环节。而在自动化测试的领域中,UI自动化测试是不可或缺的一部分,它可以帮助测试团队快速验证用户界面的正确性…...

npm获取yarn在安装依赖时 git://github.com/user/xx.git 无法访问解决方法 -- 使用 insteadOf设置git命令别名
今天在使用一个node项目时突然遇到 一个github的拉取异常,一看协议居然是git://xxx 貌似github早就不用这种格式了, 而是使用的gitgithub.com:xxx 这种或者https协议,解决方法: 使用insteadof设置git别名 url.<base>.inste…...

Centos7网络故障,开机之后连不上网ens33mtu 1500 qdisc noop state DOWN group default qlen 1000
说明 这是Linux系统网络接口的信息,其中"mtu 1500"表示最大传输单元大小为1500字节,“qdisc noop”表示没有设置特殊的队列算法,“state down”表示该接口当前处于关闭状态,“group default”表示该接口属于“default”…...

分析 Base64 编码和 URL 安全 Base64 编码
前言 在处理数据传输和存储时,Base64 编码是一种非常常见的技术。它可以将二进制数据转换为文本格式,便于在文本环境中传输和处理。Go 语言提供了对标准 Base64 编码和 URL 安全 Base64 编码的支持。本文将通过一个示例代码,来分析这两种编码…...

cocos 屏幕点击坐标转换为节点坐标
let scPos event.getLocation(); let camera find(Canvas/Camera).getComponent(Camera).screenToWorld(new Vec3(scPos.x,scPos.y,0));//摄像机 let p this.node.getComponent(UITransform).convertToNodeSpaceAR(camera);//this.node为指定的节点为原点(0,0&…...

电瓶车进电梯识别报警摄像机
随着电动车的普及,越来越多的人选择电动车作为出行工具。在诸多场景中,电梯作为一种常见的交通工具,也受到了电动车用户的青睐。然而,电动车进入电梯时存在一些安全隐患,为了提高电动车进电梯的安全性,可以…...

数据库到服务器提权
数据库提权流程: 1、先获取到数据库用户密码 -网站存在SQL注入漏洞 -数据库的存储文件或备份文件 -网站应用源码中的数据库配置文件 -采用工具或脚本爆破(需解决外联问题) 2、利用数据库提权项目进行连接 MDUT //jkd1.8 启动 Databasetools …...

【MySQL精通之路】InnoDB(9)-表和页压缩(1)-表压缩
目录 1.表压缩概述 2.创建压缩表 2.1 在FPT表空间中创建压缩表 2.2 在通用表空间中创建压缩表 2.3 压缩表的限制 3.优化InnoDB表的压缩 4.运行时监控InnoDB表压缩 5.InnoDB表的压缩工作原理 5.1 压缩算法 5.2 InnoDB数据存储和压缩 5.3 B树页面的压缩 5.4 压缩BLOB、…...

【前端】vue+element项目中select下拉框label想要显示多个值多个字段
Vue Element项目中select下拉框label想要显示多个值 <el-selectv-model"form.plantId"collapse-tagsfilterableplaceholder"请选择品种种类"style"width: 270px;"><el-optionv-for"item in plantIdArray":key"item.id&…...