使用香橙派 AI pro 开发板生成卡通版的东契奇

引言

AI应用如火如荼,而嵌入式设备与AI的结合也是不可或缺的重要场景。香橙派 AI pro 开发板正是面向嵌入式AI场景而生。

这篇文章记录了对香橙派 AI pro开发板的试用体验。介绍了开发板的基础操作,以及对其中一个AI应用样例的体验,初步感受下 AI 开发板的特别魅力。

  • 开发板基础操作部分,我是远程SSH登录后开启Jupyter,之后通过浏览器访问开发板IP即可操作,跳过了繁琐了远程桌面工具。

  • AI应用样例体验部分,记录了卡通图像生成样例,用东契奇的照片尝试生成了一张卡通图片。

img

嵌入式 AI 场景思考

相较于通用AI,嵌入式AI的优势在设备体积更小,虽然处理能力弱一些,但胜在小巧灵活,在低功耗、边缘场景是不可或缺的。

嵌入式设备在人工智能推理方面有广泛的应用场景。以下是一些常见的嵌入式设备AI推理应用场景:

1.视觉识别和物体检测:
嵌入式设备可以用于实时的视觉识别和物体检测任务。例如,智能摄像头可以使用嵌入式AI模型来实现人脸识别、行人检测、车辆识别等功能。这些应用可以用于安防监控、智能交通系统等领域。

2.语音识别和语音控制:
嵌入式设备可以使用AI模型进行语音识别和语音控制。例如,智能音箱、智能手机等设备可以通过嵌入式AI模型实现语音助手功能,如语音指令识别、语音搜索、语音翻译等。

3.自动驾驶和智能交通:
嵌入式设备在自动驾驶和智能交通领域也有重要应用。例如,嵌入式AI模型可以用于实时的车辆检测、行人检测、交通标志识别等任务,以支持自动驾驶系统的决策和控制。

4.智能家居和物联网:
嵌入式设备可以用于智能家居和物联网应用中的智能感知和控制。例如,智能家电、智能灯具等设备可以使用嵌入式AI模型来实现人体检测、姿态识别、环境感知等功能,以提供更智能化的用户体验。

5.医疗诊断和健康监测:
嵌入式设备可以应用于医疗领域,用于医疗诊断和健康监测。例如,便携式医疗设备可以使用嵌入式AI模型进行疾病诊断、心电图分析、血压监测等任务,以提供更便捷和准确的医疗服务。

这些只是一些嵌入式设备AI推理的应用场景示例,实际上,嵌入式设备的AI推理可以应用于各种领域,如工业自动化、农业智能化、智能机器人等。随着技术的不断发展,嵌入式设备AI推理的应用场景将会越来越广泛。

香橙派 AI Pro 的 AI 初体验

img

Orange Pi AI Pro 开发板是香橙派联合华为精心打造的高性能 AI 开发板, 其搭载了昇腾 AI 处理器, 可提供 8TOPS INT8 的计算能力, 内存提供了 8GB 和 16GB两种版本。 可以实现图像、 视频等多种数据分析与推理计算, 可广泛用于教育、 机器人、 无人机等场景。

登录 Jupyter Lab 界面后,可以看到有9个典型的AI应用样例。

  • 目标检测
  • 文字识别
  • 目标分类
  • 图像曝光增强
  • 卡通图像生成
  • 蛋白质分类评估
  • 细胞图像分割
  • 人像分割与背景替换
  • 语音识别

这些样例涵盖了图片识别、语音识别、图片生成几个大类,也覆盖了高大上的医疗场景。

另外社区中也有不少网友贡献了一些其他应用,有兴趣的可以去搜来体验下。

我发几个让我比较有印象的。

香橙派OrangePi在智能交通上的应用,实现了车牌识别等典型的智能交通应用。

img

香橙派AIpro初体验,详解如何安装Home Assistant Supervised

img

开发板基础操作

开机

原以为都是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 即可。

img

AI样例_卡通图像生成

卡通图像生成样例使用 cartoonGAN 模型对输入图片进行卡通化处理。在样例中已经包含转换后的 om 模型和测试图片,可以按照以下流程在 Jupyter Lab 中运行该样例。

样例操作

  1. 首先在 Jupyter Lab 界面双击“05-cartoonGAN_picture” , 进入到该目录下。
  2. 在该目录下有运行该示例的所有资源,其中 main.ipynb 是在 Jupyter Lab 中运行该样例的文件,双击打开 main.ipynb,在右侧窗口中会显示 main.ipynb 文件中的内容。
  3. 单击 >> 按钮运行样例,在弹出的对话框中单击“Restart” 按钮,此时该样例开始运行。
  4. 若干秒后, 在窗口中出现了一张卡通画风格的风景图。

如下便是根据教程指导,未修改代码情况下直接运行后得到的结果。

img

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 点击 >>,重新运行示例。

若干秒之后,卡通版的东契奇上线,难以形容。这和我理解的卡通差异比较大,哈哈。

img

小结

香橙派 AI pro 开发板正是面向嵌入式AI场景而生。如何发挥嵌入式设备小巧灵活的优势,在低功耗、边缘场景如何进行应用更好地发挥优势。香橙派 AI pro 给出丰富的AI样例。开发板在镜像中自带了 jupyter lab,并且附带了多个AI样例,极大降低了开发者上手AI的门槛。同时社区也涌现了不少有趣的应用,也对开发者具有参考意义。

这次算是小试牛刀,记录了搭建香橙派AI pro开发板的开发环境的整个过程,并且用开发板生成了卡通图像。

但这个应用肯定不是最理想的方式,如果要生成图像为何不在PC上运行,要在嵌入式设备上做呢?还需要琢磨琢磨。现在嵌入式设备更多是识别场景,目标检测、图像识别,至于图像生成还未看到典型的场景应用。

后续可以思考下,该怎么样发挥嵌入式AI的长处,做点更有意思的东西。

  • 20
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值