【CANN训练营进阶班应用课笔记】在AI1S云服务器上体验DVPP的JPEGD-RESIZE-JPEGE
原文参见:https://bbs.huaweicloud.com/forum/thread-183329-1-1.html
根据进阶班作业贴:https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=182679&fromuid=446160
大作业1题目如下:开发DVPP应用,输入,输出都是JPEG图片,且分辨率不同。
根据作业提示,转换的思路如下:
原始JPEG图片-》JPEG解码成YUV格式-》YUV图片缩放-》YUV格式编码成JPEG格式-》目的JPEG图片。
这些应该使用dvpp技术,在device端进行转换。其流程应满足dvpp的流程设计和编码方式。
下面看看如何实战。
(一)购买ECS AI1S服务器
首先需要一台Atlas310的推理服务器。
这个时候可以利用昇腾小助手发的代金券,在华为云论坛,使用镜像买一台AI1S的服务器。
我们看一下购买流程:
打开 https://console.huaweicloud.com/console/?region=cn-north-4#/home
点击ECS-》镜像服务-》共享镜像:
可以收到 本次训练营共享的镜像 camp-course-2022-3
点击右边的 申请服务器:
分别选择:
按需计费,X86计算,AI加速型,ai1s.large.4(确认是1个Ascend 310芯片),
确认共享镜像是刚才的camp-course-2022-3(80GB)
选择最便宜的硬盘(高IO) 80GB。
如果你选了别的型号的硬盘,下面的计费会有变化。反正选择最便宜的就行了。
点击下一步,网络配置:
分别选择:
网络,自动分配
安全组:Full Access
弹性公网:现在购买
线路:全动态BGP
按流量计费
带宽 5M
随实例释放。
随时关注 下面的计费情况。
点击 下一步,高级配置
输入云服务器名称,这里也可以不改,使用默认的名称
输入root密码两次。
其他选择缺省。
点击下一步,确认配置。
点击同意协议前面的复选框,再次确认下费用。点击立即购买。
因为这个时候如果购买成功就要开始算钱了。
看到任务提交成功后,点击 返回服务器列表按钮
耐心等待服务器创建完毕并启动成功。
这里有个IP地址,117开头的那个(每个人不一样),可以复制下来。
这就完成了大作业所需的服务器的创建。
(二)MobaXTerm连接服务器
打开MobaXterm, 右键点击 UserSession,点击弹出的New Session
点击ssh:
输入刚才的IP地址,选中用户root,点击OK:
输入密码,并在弹出的菜单钟选择记住OK,记住密码,进入ubuntu 18.04环境:
(三)查看样例代码
我们去昇腾的samples代码仓看看实例代码。看看有没有能完成这个任务的样例。
打开 https://gitee.com/ascend/samples/tree/master/cplusplus/level2_simple_inference/0_data_process
我们发现,把jpegd , resize , jpege 三个代码组合起来,就能完成我们的目标。
所以应该先把samples仓库clone下来:
git clone https://gitee.com/ascend/samples.git
不过发现 HwHiAiUser用户下已经有了samples代码仓了。
(四)实现JPEGD图片解码
先进入 jpegd目录:
cd /home/HwHiAiUser/samples/cplusplus/level2_simple_inference/0_data_process/jpegd
根据README_CN.md进行脚本编译
cd scripts
bash sample_build.sh
编译成功。
运行解码:
bash sample_run.sh
然后可以在 out/output目录下找到生成的YUV文件:
dvpp_output.yuv
此时,解码完毕。
原图的文件名为 dog1_1024_683.dog
我们来看看是否真的是那么大
使用MobaXterm左边框,将这个文件下载下来:
方法就是找到这个文件,在这个文件上点右键,点Download
在Windows下查看属性:
这个文件大小确实是1024X683.
从dvpp解码的要求来看,宽128对齐,高16对齐,1024是128的倍数,683却不是。所以宽应该是扩展到了 16的倍数 688. 所以原理上应该是多了5个像素的绿边。
但是这个YUV文件好像不知道怎么看。
(五)实现RESIZE图片缩放
那么。下面我们来考虑下,到底缩放到多大比较合适呢?
先试试 变成 640 X 480 试试
我们切换到 resize目录
cd
/home/HwHiAiUser/samples/cplusplus/level2_simple_inference/0_data_process/resize
先进入scripts目录编译代码:
cd script
bash sample_build.sh
将前面生成的yuv文件移动到resize所需的图片输入目录data:
/home/HwHiAiUser/samples/cplusplus/level2_simple_inference/0_data_process/resize/data
这里面原来有个图片,可以将其移走。
cd /home/HwHiAiUser/samples/cplusplus/level2_simple_inference/0_data_process/jpegd/out/output
cp dvpp_output.yuv /home/HwHiAiUser/samples/cplusplus/level2_simple_inference/0_data_process/resize/data/
根据sample_run的代码,换成前面图片的路径,分辨率也改成 640X480
然后运行:
生成好的文件放在了output目录下:
这就完成了图片缩放。
(六)实现JPEGE图片编码
最后一步,我们来试试将缩放后的YUV文件编码成JPG图片。
进入jpege目录:
照例编译代码:
cd script
bash sample_build.sh
同样的,将原data目录下的yuv文件移走:
mv dvpp_output.yuv ..
再把刚才resize/out/output目录下生成好的yuv文件拷贝过来:
cp ../../resize/out/output/dvpp_output_after_resize.yuv .
再看看试试能否运行:
哎,它需要的输入文件是 dvpp_output.yuv文件。
我们看看代码:
打开 ~/samples/cplusplus/level2_simple_inference/0_data_process/jpege/src/main.cpp
原来这里写死了输入的文件名。
那就改一下吧。
来,重新编译:bash sample_build.sh
再重新执行:bash sample_run.sh
去output目录看看:
同样的方法将这个文件下载下来看看:
打开文件并查看文件属性:
可见原来1024X683的图片已经缩放到了 640X480。
但是,张小白还真的不知道这个狗的比例有没有变。。。
唉。有没有人知道的,麻烦告诉我一声。我真的真的很想知道它是不是真的减肥了。
(七)关机
记得去ECS控制台关机,否则会扣费很严重。
(全文完,谢谢阅读)
- 点赞
- 收藏
- 关注作者
评论(0)