【2023 · CANN训练营第一季】应用开发深入讲解——第四章 DVPP初级

举报
STRUGGLE_xlf 发表于 2023/05/10 16:34:20 2023/05/10
【摘要】 学习资源1.JPEG图片解码文档2.图片缩放文档 媒体数据处理 数据预处理的典型使用场景 数据预处理的多种方式分为两种,AIPP和DVPP DVPP数据预处理功能了解两个重要概念宽stride 和 高stride理解:这里假设一张图片的宽为500,高为300,由于JPEG对输出图片的要求为: 宽stride:64对齐 高stride:16对齐 当500/64=7.8125 不是整数,要向上...

学习资源

1.JPEG图片解码
文档
2.图片缩放
文档

媒体数据处理

数据预处理的典型使用场景

image.png

数据预处理的多种方式

分为两种,AIPP和DVPP
image.png

DVPP数据预处理功能

image.png

了解两个重要概念

宽stride 和 高stride

理解:这里假设一张图片的宽为500,高为300,由于JPEG对输出图片的要求为: 宽stride:64对齐 高stride:16对齐 当500/64=7.8125 不是整数,要向上取整,所以使用8*64=512 ,得出了宽stride,高stride也是类似。

image.png

内存申请与释放

image.png

JPEG图片解码

第1单元 使用约束

图片分辨率约束
image.png

图片格式、宽高对齐、内存约束表格

image.png

第2单元 媒体数据处理V1版本

流程:

image.png

JPEG图片解码——内存申请与释放

·acldvppMalloc
·函数功能:

该接口主要用于分配内存给Device侧媒体数据处理时使用,申请的大页内存满足数据处理的要求(例如,内存首地址128对齐),同步接口。
调用acldvppMalloc接口申请内存时,会对用户输入的size按向上对齐成32整数倍后,再多加32字节申请。
若用户使用acldvppMalloc接口申请大块内存并自行划分、管理内存时,用户在管理内存时,需按每张图片的实际数
据大小向上对齐成32整数倍+32字节(ALIGN UPIlenl+32字节)来管理内存。
例如,用户已使用acldvppMalloc接口申请大块内存并自行管理内存,用户需管理n张图片的内存,每张图片大小为 len字节,实际应按照n*(ALIGNUP[len]+32字节)的大小管理内存,每张图片的内存地址按(ALIGN UP[len]+32字节)为单位偏移。
ALIGN UP表示向上按32字节对齐:((len-1)/32+1)*32。
调用该接口申请大页内存失败,仅表示系统内的大页内存不够>调用该接口申请内存后,必须使用acldvppFree接口释放内存。

image.png

通道创建与销毁

·acldvppCreateChannelDesc
·函数功能:

创建acldvppChannelDesc类型的数据,表示创建图片数据处理通道时的通道描述信息。该接口为同步接口。
·函数原型:
acldvppChannelDescacldvppCreateChannelDesc)·返回值说明:
返回acldvppChannelDesc类型,表示成功。>返回null,表示失败。
· = = = = = = = = = = = = ========== = = = = = = = = = = = = = = = = = = = = = = =
·acldvppDestroyChannelDesc
·函数功能:
销毁acldvppChannelDesc类型的数据,只能销毁通过acldvppCreateChannelDesc接口创建的 acldvppChannelDesc类型。该接口为同步接口。
必须在调用acldvppDestroyChanne接口销毁channel通道之后再调用acldvppDestroyChannelDesc接口释放 acldvppChannelDesc类型的数据,否则报错。
·函数原型:
·aclError acldvppDestroyChannelDesc(acldvppChannelDesc
channelDesc)

image.png

描述图片

·acldvppCreatePicDesc·函数功能:

创建图片描述信息。同步接口。·函数原型:
acldvppPicDesc*acldvppCreatePicDesc()·返回值说明:
返回acldvppPicDesc类型,表示成功。>返回null,表示失败。
= = = = = = = = = = = = = = = ====================================

·acldvppDestroyPicDesc·函数功能:

销毁图片描述信息,只能销毁通过acldvppCreatePicDesc接口创建的图片描述信息。·函数原型:
aclErroracldvppDestroyPicDesc(acldvppPicDesc*picDesc)

image.png

整体调用顺序

JPEG图片解码–整体调用顺序·整体调用顺序:

创建通道描述对象:调用acldvppCreateChannelDesc
创建acldvppChannelDesc对象
创建通道:调用acldvppCreateChannel(acldvppChannelDesc)创建通道
创建图片描述:调用acldvppCreatePicDesc创建acldvppPicDesc对象
执行操作.……
销毁图片描述:调用acldvppDestroyPicDesc(acldvppPicDesc)销毁图片描述
创建图片描述:调用acldvppCreatePicDesc创建acldvppPicDesc对象
执行操作…
销毁图片描述:调用acldvppDestroyPicDesc(acldvppPicDesc)销毁图片描述
销毁通道:调用acldvppDestroyChannel(acldvppChannelDesc)销毁通道
销毁通道描述对象:调用acldvppDestroyChannelDesc(acldvppChannelDesc)销毁通道描述对象

解码主接口

image.png

读取图片宽高

image.png

预测输出内存

image.png

VPC图片约束

图片分辨率约束
image.png

图片格式、宽高对齐、内存约束
image.png

image.png

VPC图片缩放

VPC
·功能:

抠图,从输入图片中抠出需要用的图片区域。
缩放-针对不同分辨率的图像,当前支持非8K缩放。
(非8K缩放,用于处理输入图片分辨率在326~40964096范围内的图片。)
-从是否抠多张图的维度,可分为单图裁剪缩放(支持非压缩格式) 一图多框裁剪缩放(支持非压缩格式)。
-其它缩放方式,如:原图缩放、等比例缩放。
善加,从输入图片中抠出来的图,对抠出的图进行缩放后,放在用户输出图片的指定区域,输出图片可以是空白图片(由用户申请的空输出内存产生的),也可以是已有图片(由用户申请输出内存后将已有冬片读入输出内存),只有当输出图片是已有图片时,才表示叠加。
拼接,从输入图片中报多张图片,对抠出的图进行缩放后,放到输出图片的指定区域。

8K缩放现在也支持了,用于处理宽或高在4096~8192范围内的输入图片,实际开发时请参见对应版本的文档,了解8K缩放时支持的图片格式。

抠图+缩放+叠加
image.png

image.png

调用流程
image.png

VPC–典型流程
·调用acldvppCreateChannel接口创建图片数据处理的通道。创建图片数据处理的通道前,需先调用acldvppCreateChannelDesc接口创建通道描述信息。
·调用acldvppCreateRoiConfig接口、acldvppCreateResizeConfig接口分别创建抠图区域位置的配置、缩放配置。
实现抠图、缩放功能前,若需要申请Device上的内存存放输入或输出数据,需调用acldvppMalloc申请内存、调用acldvppFree接口释放内存。
·执行抠图、缩放。

关于抠图:
调用acldvppVpcCropAsync异步接口,按指定区域从输入图片中抠图,再将抠的图片存放到输出内存中,作为输出图片。输出图片区域与抠图区域 cropArea不一致时会对图片再做一次缩放操作。
-当前系统还提供了acldvppVpcCropAndPasteAsync异步接口,支持按指定区域从输入图片中抠图,再将抠的图片贴到目标图片的指定位置,作为输出图片。
·抠图区域cropArea的宽高与贴图区域pasteArea宽高不一致时会对图片再做一次缩放操作。
·如果用户需要将目标图片读入内存用于存放输出图片,将贴图区域叠加在目标图片上,则需要编写代码逻辑:在申请输出内存后,将目标图片读入输出内存。
关于缩放
-调用acldvppVpcResizeAsync异步接口,将输入图片缩放到输出图片大小
调用acldvppCreateResizeConfiq接口创建图片缩放配置数据,不支持指定缩放算法,默认缩放算法为“最近邻插值”。
-缩放后输出图片内存根据YUV420SP格式计算,计算公式:对齐后的宽对齐后的高3/2
对于异步接口,还需调用aclrtSynchronizeStream接口阻塞Host运行,直到指定Stream中的所有任务都完成,
·调用acldvppDestroyRoiConfig接口、acldvppDestroyResizeConfig接口分别销毁抠图区域位置的配置、缩放配置。
·调用acldvppDestroyChannel接口销毁图片数据处理的通道。销毁图片数据处理的通道后,再调用acdvppDestroyChannelDesc接销毁通道描述信息。

缩放接口
在这里插入图片描述image.png

裁剪接口
image.png

剪切粘贴

image.png

V2版本
接口调用流程
image.png

应用开发初级章节小测

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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