【CANN训练营进阶班应用课笔记】在AI1S云服务器上体验DVPP的JPEGD-RESIZE-JPEGE

举报
张辉 发表于 2022/03/31 18:31:32 2022/03/31
【摘要】 学无止境。

原文参见: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控制台关机,否则会扣费很严重。


(全文完,谢谢阅读)

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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