引言
AI应用如火如荼,而嵌入式设备与AI的结合也是不可或缺的重要场景。香橙派 AI pro 开发板正是面向嵌入式AI场景而生。
这篇文章记录了对香橙派 AI pro开发板的试用体验。介绍了开发板的基础操作,以及对其中一个AI应用样例的体验,初步感受下 AI 开发板的特别魅力。
开发板基础操作部分,我是远程SSH登录后开启Jupyter,之后通过浏览器访问开发板IP即可操作,跳过了繁琐了远程桌面工具。
AI应用样例体验部分,记录了卡通图像生成样例,用东契奇的照片尝试生成了一张卡通图片。
嵌入式 AI 场景思考
相较于通用AI,嵌入式AI的优势在设备体积更小,虽然处理能力弱一些,但胜在小巧灵活,在低功耗、边缘场景是不可或缺的。
嵌入式设备在人工智能推理方面有广泛的应用场景。以下是一些常见的嵌入式设备AI推理应用场景:
1.视觉识别和物体检测:
嵌入式设备可以用于实时的视觉识别和物体检测任务。例如,智能摄像头可以使用嵌入式AI模型来实现人脸识别、行人检测、车辆识别等功能。这些应用可以用于安防监控、智能交通系统等领域。
2.语音识别和语音控制:
嵌入式设备可以使用AI模型进行语音识别和语音控制。例如,智能音箱、智能手机等设备可以通过嵌入式AI模型实现语音助手功能,如语音指令识别、语音搜索、语音翻译等。
3.自动驾驶和智能交通:
嵌入式设备在自动驾驶和智能交通领域也有重要应用。例如,嵌入式AI模型可以用于实时的车辆检测、行人检测、交通标志识别等任务,以支持自动驾驶系统的决策和控制。
4.智能家居和物联网:
嵌入式设备可以用于智能家居和物联网应用中的智能感知和控制。例如,智能家电、智能灯具等设备可以使用嵌入式AI模型来实现人体检测、姿态识别、环境感知等功能,以提供更智能化的用户体验。
5.医疗诊断和健康监测:
嵌入式设备可以应用于医疗领域,用于医疗诊断和健康监测。例如,便携式医疗设备可以使用嵌入式AI模型进行疾病诊断、心电图分析、血压监测等任务,以提供更便捷和准确的医疗服务。
这些只是一些嵌入式设备AI推理的应用场景示例,实际上,嵌入式设备的AI推理可以应用于各种领域,如工业自动化、农业智能化、智能机器人等。随着技术的不断发展,嵌入式设备AI推理的应用场景将会越来越广泛。
香橙派 AI Pro 的 AI 初体验
Orange Pi AI Pro 开发板是香橙派联合华为精心打造的高性能 AI 开发板, 其搭载了昇腾 AI 处理器, 可提供 8TOPS INT8 的计算能力, 内存提供了 8GB 和 16GB两种版本。 可以实现图像、 视频等多种数据分析与推理计算, 可广泛用于教育、 机器人、 无人机等场景。
登录 Jupyter Lab 界面后,可以看到有9个典型的AI应用样例。
- 目标检测
- 文字识别
- 目标分类
- 图像曝光增强
- 卡通图像生成
- 蛋白质分类评估
- 细胞图像分割
- 人像分割与背景替换
- 语音识别
这些样例涵盖了图片识别、语音识别、图片生成几个大类,也覆盖了高大上的医疗场景。
另外社区中也有不少网友贡献了一些其他应用,有兴趣的可以去搜来体验下。
我发几个让我比较有印象的。
香橙派OrangePi在智能交通上的应用,实现了车牌识别等典型的智能交通应用。
香橙派AIpro初体验,详解如何安装Home Assistant Supervised
开发板基础操作
开机
原以为都是type C 接口,但使用手机的电源带不起来,怀疑是电压不同。
关机
关机除了 poweroff 命令之外,有个关机键,可以直接关机。这点还是挺方便的,有时候不方便通过命令行输入,直接按键就行,避免了拔电暴力关机。
串口配置 WiFi
家里没有单独的显示器,我的办公桌离路由器也有点远。因此先通过串口给开发板配置WiFi,让开发板使用无线WiFi,首次配置之后使用远程SSH连接开发板操作,就可以连串口线也免去了,避免有线连接。
整个开发板就只需一个电源连接,干干净净。
orangepiaipro login: root
Password:
___ ____ _
/ _ \ _ __ __ _ _ __ __ _ ___ | _ \ (_)
| | | || '__|/ _` || '_ \ / _` | / _ \ | |_) || |
| |_| || | | (_| || | | || (_| || __/ | __/ | |
\___/ |_| \__,_||_| |_| \__, | \___| |_| |_|
|___/
Welcome to Orange Pi Ai Pro
This system is based on Ubuntu 22.04.3 LTS (GNU/Linux 5.10.0+ aarch64)
This system is only applicable to individual developers and cannot be used for commercial purposes.
By using this system, you have agreed to the Huawei Software License Agreement.
Please refer to the agreement for details on https://www.hiascend.com/software/protocol
Last login: Tue Feb 27 12:11:30 CST 2024
(base) root@orangepiaipro:~#
(base) root@orangepiaipro:~#
(base) root@orangepiaipro:~# sudo nmcli dev wifi connect 脱敏 password 脱敏
Device 'wlan0' successfully activated with '5a2a6ed7-acd5-4974-a11e-eed8e1495082'.
root@orangepiaipro:~# ping baidu.com
PING baidu.com (39.156.66.10) 56(84) bytes of data.
64 bytes from 39.156.66.10 (39.156.66.10): icmp_seq=1 ttl=50 time=49.7 ms
64 bytes from 39.156.66.10 (39.156.66.10): icmp_seq=2 ttl=50 time=44.5 ms
64 bytes from 39.156.66.10 (39.156.66.10): icmp_seq=3 ttl=50 time=44.7 ms
64 bytes from 39.156.66.10 (39.156.66.10): icmp_seq=4 ttl=50 time=45.1 ms
^C
--- baidu.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 44.543/45.983/49.663/2.132 ms
配置了 WiFi 之后,做了下ping测试,确认网络通信正常。
远程SSH登录
开发板通过 WiFi 连接之后,便可以在局域网中直接 SSH 访问开发板了。通过路由器管理页面查询到开发板的局域网IP,直接ssh登录。
% ssh root@192.168.31.19
root@192.168.31.19's password:
___ ____ _
/ _ \ _ __ __ _ _ __ __ _ ___ | _ \ (_)
| | | || '__|/ _` || '_ \ / _` | / _ \ | |_) || |
| |_| || | | (_| || | | || (_| || __/ | __/ | |
\___/ |_| \__,_||_| |_| \__, | \___| |_| |_|
|___/
Welcome to Orange Pi Ai Pro
This system is based on Ubuntu 22.04.3 LTS (GNU/Linux 5.10.0+ aarch64)
This system is only applicable to individual developers and cannot be used for commercial purposes.
By using this system, you have agreed to the Huawei Software License Agreement.
Please refer to the agreement for details on https://www.hiascend.com/software/protocol
Last login: Tue Feb 27 12:18:45 2024
(base) root@orangepiaipro:~#
开发板AI样例基础操作
香橙派 AI pro 开发板在镜像中预装了 Jupyter Lab 软件。Jupyter Lab 软件是一个基于 web 的交互式开发环境,集成了代码编辑器、终端、文件管理器等功能,使得开发者可以在一个界面中完成各种任务。并且镜像中也预置了一些可以在 Jupyter Lab 软件中运行的 AI 应用样例。
不得不说这样非常贴心,极大降低了 AI 开发的门槛。
远程操作 Jupyter Lab
手册中 AI 应用样例都是通过 Jupyter Lab 来体验,因此这是必要的。
原本以为需要通过远程桌面工具来访问开发板,后来发现 Jupyter Lab 实际是在开发板本地起了一个 http server,因此局域网可以远程访问了,只需要提前 SSH 登录后启动 Jupyter Lab 即可,无需安装远程桌面工具。
遇到的一个问题 jupyter: command not found
HwHiAiUser@orangepiaipro:~$ cd samples/notebooks/
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
HwHiAiUser@orangepiaipro:~/samples/notebooks$ ./start_notebook.sh
./start_notebook.sh: line 7: jupyter: command not found
初步怀疑是因为先以root用户登录,后续切换用户后未能启动python虚拟环境。后续直接以 HwHiAiUser 登录后未再复现该问题。
浏览器直接访问开发板
默认 start_notebook.sh 脚本执行启用了本地 127.0.0.1,因此无法远程访问开发板上的 jupyter lab 开启的 http server。
看了下脚本内容,只需携带监听地址即可。
. /usr/local/Ascend/ascend-toolkit/set_env.sh
export PYTHONPATH=/usr/local/Ascend/thirdpart/aarch64/acllite:$PYTHONPATH
if [ $# -eq 1 ];then
jupyter lab --ip $1 --allow-root --no-browser
else
jupyter lab --ip 127.0.0.1 --allow-root --no-browser
fi
(base) HwHiAiUser@orangepiaipro:~/samples/notebooks$ ./start_notebook.sh 0.0.0.0
[W 2024-05-27 23:07:45.145 ServerApp] A `_jupyter_server_extension_points` function was not found in notebook_shim. Instead, a `_jupyter_server_extension_paths` function was found and will be used for now. This function name will be deprecated in future releases of Jupyter Server.
[I 2024-05-27 23:07:45.146 ServerApp] jupyter_lsp | extension was successfully linked.
[I 2024-05-27 23:07:45.158 ServerApp] jupyter_server_terminals | extension was successfully linked.
[I 2024-05-27 23:07:45.172 ServerApp] jupyterlab | extension was successfully linked.
[I 2024-05-27 23:07:45.611 ServerApp] notebook_shim | extension was successfully linked.
[I 2024-05-27 23:07:45.762 ServerApp] notebook_shim | extension was successfully loaded.
[I 2024-05-27 23:07:45.768 ServerApp] jupyter_lsp | extension was successfully loaded.
[I 2024-05-27 23:07:45.771 ServerApp] jupyter_server_terminals | extension was successfully loaded.
[I 2024-05-27 23:07:45.774 LabApp] JupyterLab extension loaded from /usr/local/miniconda3/lib/python3.9/site-packages/jupyterlab
[I 2024-05-27 23:07:45.774 LabApp] JupyterLab application directory is /usr/local/miniconda3/share/jupyter/lab
[I 2024-05-27 23:07:45.776 LabApp] Extension Manager is 'pypi'.
[I 2024-05-27 23:07:45.783 ServerApp] jupyterlab | extension was successfully loaded.
[I 2024-05-27 23:07:45.784 ServerApp] Serving notebooks from local directory: /home/HwHiAiUser/samples/notebooks
[I 2024-05-27 23:07:45.784 ServerApp] Jupyter Server 2.12.5 is running at:
[I 2024-05-27 23:07:45.784 ServerApp] http://orangepiaipro:8888/lab?token=f571de4a5eb5430f719d2ef9c36d5a66a0fe91f6efaecb5f
[I 2024-05-27 23:07:45.784 ServerApp] http://127.0.0.1:8888/lab?token=f571de4a5eb5430f719d2ef9c36d5a66a0fe91f6efaecb5f
[I 2024-05-27 23:07:45.785 ServerApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 2024-05-27 23:07:45.792 ServerApp]
To access the server, open this file in a browser:
file:///home/HwHiAiUser/.local/share/jupyter/runtime/jpserver-3227-open.html
Or copy and paste one of these URLs:
http://orangepiaipro:8888/lab?token=f571de4a5eb5430f719d2ef9c36d5a66a0fe91f6efaecb5f
http://127.0.0.1:8888/lab?token=f571de4a5eb5430f719d2ef9c36d5a66a0fe91f6efaecb5f
[I 2024-05-27 23:07:45.853 ServerApp] Skipped non-installed server(s): bash-language-server, dockerfile-language-server-nodejs, javascript-typescript-langserver, jedi-language-server, julia-language-server, pyright, python-language-server, python-lsp-server, r-languageserver, sql-language-server, texlab, typescript-language-server, unified-language-server, vscode-css-languageserver-bin, vscode-html-languageserver-bin, vscode-json-languageserver-bin, yaml-language-server
[W 2024-05-27 23:08:12.156 LabApp] Could not determine jupyterlab build status without nodejs
监听了 0.0.0.0 之后,我在本地macbookpro 上浏览器直接访问 http://192.168.31.19:8888/lab?token=f571de4a5eb5430f719d2ef9c36d5a66a0fe91f6efaecb5f 即可。
AI样例_卡通图像生成
卡通图像生成样例使用 cartoonGAN 模型对输入图片进行卡通化处理。在样例中已经包含转换后的 om 模型和测试图片,可以按照以下流程在 Jupyter Lab 中运行该样例。
样例操作
- 首先在 Jupyter Lab 界面双击“05-cartoonGAN_picture” , 进入到该目录下。
- 在该目录下有运行该示例的所有资源,其中 main.ipynb 是在 Jupyter Lab 中运行该样例的文件,双击打开 main.ipynb,在右侧窗口中会显示 main.ipynb 文件中的内容。
- 单击 >> 按钮运行样例,在弹出的对话框中单击“Restart” 按钮,此时该样例开始运行。
- 若干秒后, 在窗口中出现了一张卡通画风格的风景图。
如下便是根据教程指导,未修改代码情况下直接运行后得到的结果。
cartoonGAN 模型解析
CartoonGAN是一种生成对抗网络(GAN)的变体,它的目标是将真实的图片转换为卡通风格的图片。GAN是一种深度学习模型,由两个部分组成:生成器(Generator)和判别器(Discriminator)。生成器的任务是生成新的数据,而判别器的任务是判断这些数据是否真实。在CartoonGAN中,生成器的任务是将输入的真实图片转换为卡通风格的图片,而判别器的任务是判断生成的图片是否具有卡通风格。
CartoonGAN的主要创新点在于它引入了一个特殊的损失函数,称为边缘损失(Edge-Promoting Loss)。这个损失函数的目标是保持生成的卡通图片的边缘清晰,这是因为在卡通图片中,边缘通常比真实图片更加清晰和明显。
CartoonGAN的另一个特点是它使用了大量的卡通图片进行训练。这使得生成的图片能够更好地模仿卡通的风格和特点。
总的来说,CartoonGAN是一种强大的模型,能够将真实的图片转换为具有卡通风格的图片,在艺术创作、动画制作等领域有着广泛的应用。
样例解析
开发板自带的样例都是使用 Python 编写的,并调用了 Python 版本的 AscendCL 编程接口。
本示例具体的样例代码位于 05-cartoonGAN_picture/main.ipynb,对该文件进行初步的解析。
总体步骤大致是这样:
1.初始化acl资源:在调用acl相关资源时,必须先初始化AscendCL,否则可能会导致后续系统内部资源初始化出错。
2.对图片进行前处理:在此样例中,我们首先根据图片路径,构造AclLiteImage类型的数据,再利用.jpegd和.crop_and_paste_get_roi转换图片格式、裁剪图片。注意由于模型输入是yuv格式,所以我们利用了AclLiteImageProc.jpegd将图片转为yuv,使得模型正常推理。
3.推理:利用AclLiteModel.execute接口对图片进行推理。
4.对推理结果进行后处理:包括两个步骤,即转换像素值值域以及将图片缩放到原图大小。
5.可视化图片:利用plt将结果画出。
DIY生成自己的卡通图像
上手对示例做个修改,不妨自己搞个图片来试试。随手下载了一张东契奇的照片,有点好奇东契奇卡通化之后长啥样。
因为以前吃过图片版本的坑,我也不确定这张东契奇的帅照是否有版权问题,因此就不放原图了,大家直接看效果图。
具体操作上,本地使用scp命令上传图片至开发板指定目录。
% scp Don77.jpg HwHiAiUser@192.168.31.19:~/samples/notebooks/05-cartoonGAN_picture/
HwHiAiUser@192.168.31.19's password:
Don77.jpg 100% 38KB 3.4MB/s 00:00
将 Don77.jpg,修改为默认的图片文件名,之后返回 Jupyter Lab 点击 >>,重新运行示例。
若干秒之后,卡通版的东契奇上线,难以形容。这和我理解的卡通差异比较大,哈哈。
小结
香橙派 AI pro 开发板正是面向嵌入式AI场景而生。如何发挥嵌入式设备小巧灵活的优势,在低功耗、边缘场景如何进行应用更好地发挥优势。香橙派 AI pro 给出丰富的AI样例。开发板在镜像中自带了 jupyter lab,并且附带了多个AI样例,极大降低了开发者上手AI的门槛。同时社区也涌现了不少有趣的应用,也对开发者具有参考意义。
这次算是小试牛刀,记录了搭建香橙派AI pro开发板的开发环境的整个过程,并且用开发板生成了卡通图像。
但这个应用肯定不是最理想的方式,如果要生成图像为何不在PC上运行,要在嵌入式设备上做呢?还需要琢磨琢磨。现在嵌入式设备更多是识别场景,目标检测、图像识别,至于图像生成还未看到典型的场景应用。
后续可以思考下,该怎么样发挥嵌入式AI的长处,做点更有意思的东西。