【2022年第一期 CANN训练营进阶班应用课】第一次大作业

前情提要

  1. 按照官方B站视频介绍,接收镜像,并创建云服务器;如果不想看视频,可以参照其他开发者的教程配置环境,推荐教程【CANN训练营进阶班应用课笔记】大作业1实战趟坑记录
  2. ssh登录服务器,可以用MobaXterm,也可以直接用Visual Studio Code,这里选择前者,因为MobaXterm支持X server,简单来说,就是支持图形界面,方便我们后续查看yuv文件,如果有朋友不熟悉,推荐教程【CANN训练营进阶班应用课笔记】大作业1实战趟坑记录

准备工作

  1. 安装ffmepg。方便通过ffplay查看yuv文件。在root用户下执行如下命令即可:
sudo apt-get install ffmpeg

     2.切换到用户HwHiAiUser。因为默认是root用户登陆,但是运行代码用HwHiAiUser用户才行,否则报错。

操作

  1. 将jpeg图片解码成yuv格式(输入文件是dog1_1024_683.dog,尺寸为1024 x 683)先来看看输入jpg文件

         接下来操作!

# 确保已经切换到HwHiAiUser用户
cd /home/HwHiAiUser/samples/cplusplus/level2_simple_inference/0_data_process/jpegd/scripts
# 注意下面命令运行时,会弹出架构选项,因为我们的CPU是x86架构的,所以这里选择x86,如下图所示
bash sample_build.sh
bash sample_run.sh

最终程序运行成功截图:



我们到这个目录下可以看到生成的.yuv文件:

/home/HwHiAiUser/samples/cplusplus/level2_simple_inference/0_data_process/jpegd/out/output

如下图所示:


接下来,我们查看图片,在root用户下执行命令:

# 注意在root用户下执行,如果不是root用户,可执行su root进行切换
ffplay -f rawvideo -video_size 1024x683 dvpp_output.yuv

可以看到,如下图片,注意这是依赖了MobaXterm的X Server

此时程序运行截图:

可以看到yuv格式的文件上方有一条黄边,在使用ffplay查看时,需要设置图像大小,这里设置的是解码之前的jpeg文件大小,即1024 x 683,而得到的yuv文件,要符合DVPP的宽128对齐,高16对齐要求,原文件宽度没问题,高度要调整对齐,则应为1024 x 688(688是16的倍数),即高度增加了,接下来,我们运行如下代码试试:

ffplay -f rawvideo -video_size 1024x688 dvpp_output.yuv

得到如下图片:

上方的黄边没了,但是下方多了一条绿边,应该就是因为高度对齐带来的吧,正如作业文档提到的那样:

    2. 对yuv格式进行resize(输入是上一步得到的yuv格式文件)

# 注意之前可能是root用户,这里我们通过su HwHiAiUser切换为HwHiAiUser用户
cd /home/HwHiAiUser/samples/cplusplus/level2_simple_inference/0_data_process/resize/scripts
# 注意下面命令运行时,仍然会弹出架构选项,因为我们的CPU是x86架构的,所以这里选择x86,如下图所示
bash sample_build.sh

我们希望resize第一步生成的yuv文件,并设置resize大小,所以先将之前生成的yuv文件拷贝到当前程序的输入目录

cp /home/HwHiAiUser/samples/cplusplus/level2_simple_inference/0_data_process/jpegd/out/output/dvpp_output.yuv /home/HwHiAiUser/samples/cplusplus/level2_simple_inference/0_data_process/resize/data/

接下来,修改运行脚本sample_run.sh,主要是输入图片的路径和resize的分辨率:

cd ../scripts/
vim sample_run.sh

# 将sample_run.sh的第10行,替换为如下,表示输入yuv文件路径是../data/dvpp_output.yuv,大小是1024 x 688,resize后大小是224 224
running_command="./main ../data/dvpp_output.yuv 1024 688 ./output/output.yuv 224 224 "

# 运行程序
bash sample_run.sh

我们来看下运行成功截图:

下面看看resize后的yuv文件

# 查看yuv文件要root用户,所以先切换
su root

# 切换到输出的yuv文件目录
cd ../out/output

# 查看yuv文件
ffplay -f rawvideo -video_size 224x224 output.yuv

可以看到明显变小了,而且没有绿边或黄边,这应该是因为DVPP的输入是符合前面提到的宽高对齐要求的。但要注意的是我们设置的resize大小224 x 224的宽度是不符合128对齐的。

    3. resize后的yuv文件编码成jpg图片(输入是上一步得到的resize后的yuv格式文件)

# 注意之前可能是root用户,这里我们通过su HwHiAiUser切换为HwHiAiUser用户
cd /home/HwHiAiUser/samples/cplusplus/level2_simple_inference/0_data_process/jpege/scripts

# 修改main.cpp文件,执行输入yuv文件路径和大小
# 切换到main.cpp所在文件夹
cd /home/HwHiAiUser/samples/cplusplus/level2_simple_inference/0_data_process/jpege/src
# 修改文件
vim main.cpp
# 在第242行,将该行替换为如下:
PicDesc testPic = {"../data/output.yuv", 224, 224};

# 注意下面命令运行时,仍然会弹出架构选项,因为我们的CPU是x86架构的,所以这里选择x86
bash sample_build.sh

# 接下来,我们要将上一步得到的resize后的yuv文件拷贝过来作为输入
cp /home/HwHiAiUser/samples/cplusplus/level2_simple_inference/0_data_process/resize/out/output/output.yuv /home/HwHiAiUser/samples/cplusplus/level2_simple_inference/0_data_process/jpege/data/dvpp_output.yuv 

# 运行程序
bash sample_run.sh

最终运行成功截图:

最终得到编码后的图片

至此,我们完成了全部流程,对于输入文件是dog1_1024_683.dog,尺寸为1024 x 683的jpg文件——> 解码为YUV文件——>resize到224 x 224 大小——>编码为jpg文件,最终得到了编码后的,如上图所示的jpg文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值