张小白带你玩转Atlas 200DK+CANN 5.0.4+MindStudio 3.0.4(八)完成CANN进阶班大作业1

举报
张辉 发表于 2022/04/15 07:05:59 2022/04/15
【摘要】 Atlas 200DK+CANN 5.0.4+MindStudio 3.0.4

张小白在 https://bbs.huaweicloud.cn/blogs/344172 帖子里介绍了如何在200DK上完成 2022年CANN训练营进阶班应用课的大作业1 。我们现在用MindStudio来完成一下吧!

我们首先要理解下,在合设环境(Atlas 200DK)直接编译执行,与使用分设环境,在分设环境之开发环境(X86虚拟机)交叉编译,在分设环境之运行环境(Atlas 200DK)的真实区别:

在合设环境,编译和运行时,整个环境是一个整体,如果要依次运行大作业中jpegd、resize和jpege三个工程,那么是可以依次编译,依次执行——后一步是可以成功引用前一步的运行结果的。但是在分设环境,编译和运行时在不同的环境中完成,如果要依次运行大作业中jpegd、resize和jpege三个工程,MindStudio的处理逻辑是:在分设环境之开发环境(X86虚拟机)编译了项目工程后,将整个项目工程传递到 分设环境之运行环境(Atlas 200DK)的MindStudio-WorkSpace目录下:

并根据该项目Deployment的设置,生成了一个跟原有工程相同的前缀,但是后面带了一个随机字符串的目录。所以实际上代码的运行环境的目录是 ~/MindStudio-WorkSpace/项目工程_随机串

因此,那么在编译代码的时候,凡涉及相关路径的时候,如果涉及到绝对路径,千万记得要改一下路径名称。后一个工程在引用前一个工程的运行结果时有点麻烦,也需要写上前一个工程的带随机数的目录名称。

原来在代码编译的时候使用的是sample_build.sh,里面有一些样例图片和视频的准备等过程,但是在MindStudio编译的时候,一般是只能用Makefile,这个过程可能需要手工准备。

原来在编译的时候使用的是sample_run.sh,里面可以反复执行编译好的可执行代码,实现多个图片的反复运行。但是在MindStudio运行的时候,只能运行一次。所以如果涉及到参数不同的反复执行过程,最好是在main代码中做循环控制完成。

我们来实际体验一下:

打开jpegd工程:

注意这里是常规操作,遇到警告提示不用怕,点OK:

再点OK:

点击Tools-》Deployment-》Configuration:

点击+:

输入200DK,点击OK:

点击SSH configuration的下拉框,选择 HwHiAiUser!@192.168.199.204:22,这个配置过后就可以反复选择,不用再配置了:

点击Test Connection:

点击OK:

再依次点击Mappings和下面的+:

在蓝色框中分别点一下,会自动弹出目录:

点击Apply和OK关闭窗口。

点击Build-》Edit Build Configuration:

修改Target OS为Euleros2.10,系统会自动弹出Target Architecture为aarch74:

点击Save

再点击Build-》Build-》Build Configuration:

惯例会找不到库的路径.

修改 src/CMakeLists.txt:

将 link_directories改为 $ENV{INSTALL_DIR}/arm64-linux/runtime/lib64/stub

保存后再重新编译:

可见编译成功完成。

但是你会发现,在合设环境直接编译的时候,无需改任何Makefile就能成功编译和运行:

当然,MindStudio是交叉编译,shell是直接编译,这个当然不同。

好了,我们还得在MindStudio上完成运行:

点击Run。。-》Edit Configurations:

点击Executable右边的文件夹按钮:

选择前面编译好的可执行代码:out/main。注意这个代码在开发环境是无法运行的:

因为它本质上是一个arm版的代码。

点击OK:

至于Command Arguments怎么加,需要对比下scripts/sample_run.sh的脚本,先点击Apply-:

再点击Close。然后打开sample_run.sh,发现运行参数:../data/dog1_1024_683.jpg

重新打开运行配置界面,将 ../data/dog1_1024_683.jpg 贴入到Command Arguments:

先点击Apply,再点击Run:

当然这样是运行不成功的:

因为并没有像 bash sample_build.sh那样下载好这个图片。

不过不要紧,无论怎么下载,搞到这个文件就好,将其放到 data目录下:

cd data

wget https://c7xcode.obs.cn-north-4.myhuaweicloud.com/models/jpegd/dog1_1024_683.jpg --no-check-certificate

然后重新运行:

还是出错,对了,你需要在IDE界面手工创建下out/output目录:在下图的out目录点右键,点击New->Directory:

输入output后回车。然后再重新编译:

所以大家会发现,运行成功,且output目录下多了一个 yuv文件。这个文件是在200DK上运行后,被MindStudio从200DK上拷贝回来的。

所以通过第一个MindStudio的例子,我们应该是更清楚地了解了MindStudio的使用方法和实现机理。

 

下面在打开其他工程进行的时候,上述操作张小白就不讲解那么细致了,可以参考上面进行处理。

我们点击File-Close Project:

再open resize工程:

打开后的惯例做法这里就不提了。(CANN的选择,Deployment配置,Build参数,Makefile库路径)

编译:

直接能成功(如果你是按照前面的方式一个一个做的话)

查看sample_run.sh,这个时候就不能用这里running_command的参数(  ../data/wood_rabbit_1024_1068_nv12.yuv 1024 1068 ./output/output.yuv 224 224  )作为运行的参数了。

而是应该用前面jpegd工程的运行结果

两种方式:

1.将上次的结果拷贝到 data目录下:

在run-》edit configuration中,将参数改为:../data/dog1_1024_683_jpegd_1024_683.yuv 1024 683 ./output/output.yuv 640 480 

点击Apply-》Run。

可见,output下成功生成了resize后的output.yuv。

我们点击File-Close Project,再打开jpege工程,同样完成  CANN的选择,Deployment配置,Build参数,Makefile库路径等操作。

执行build:

查看sample_run.sh的脚本:

先将resize的结果拷贝到jpege的data目录下:

创建output目录:

编辑run-》configuration配置:参数设置为 ../data/output.yuv 640 480

点击apply后run:

可以看到结果jpg图片已生成。

打开看看:

可见图片结果正确。

 

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。