张小白带你玩转Atlas 200DK+CANN 5.0.4+MindStudio 3.0.4(八)完成CANN进阶班大作业1
张小白在 https://bbs.huaweicloud.com/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图片已生成。
打开看看:
可见图片结果正确。
- 点赞
- 收藏
- 关注作者
评论(0)