【2023 · CANN训练营第一季】应用开发深入讲解——第四章 DVPP初级
学习资源
媒体数据处理
数据预处理的典型使用场景
数据预处理的多种方式
分为两种,AIPP和DVPP
DVPP数据预处理功能
了解两个重要概念
宽stride 和 高stride
理解:这里假设一张图片的宽为500,高为300,由于JPEG对输出图片的要求为: 宽stride:64对齐 高stride:16对齐 当500/64=7.8125 不是整数,要向上取整,所以使用8*64=512 ,得出了宽stride,高stride也是类似。
内存申请与释放
JPEG图片解码
第1单元 使用约束
图片分辨率约束
图片格式、宽高对齐、内存约束表格
第2单元 媒体数据处理V1版本
流程:
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接口释放内存。
通道创建与销毁
·acldvppCreateChannelDesc
·函数功能:
创建acldvppChannelDesc类型的数据,表示创建图片数据处理通道时的通道描述信息。该接口为同步接口。
·函数原型:
acldvppChannelDescacldvppCreateChannelDesc)·返回值说明:
返回acldvppChannelDesc类型,表示成功。>返回null,表示失败。
· = = = = = = = = = = = = ========== = = = = = = = = = = = = = = = = = = = = = = =
·acldvppDestroyChannelDesc
·函数功能:
销毁acldvppChannelDesc类型的数据,只能销毁通过acldvppCreateChannelDesc接口创建的 acldvppChannelDesc类型。该接口为同步接口。
必须在调用acldvppDestroyChanne接口销毁channel通道之后再调用acldvppDestroyChannelDesc接口释放 acldvppChannelDesc类型的数据,否则报错。
·函数原型:
·aclError acldvppDestroyChannelDesc(acldvppChannelDescchannelDesc)
描述图片
·acldvppCreatePicDesc·函数功能:
创建图片描述信息。同步接口。·函数原型:
acldvppPicDesc*acldvppCreatePicDesc()·返回值说明:
返回acldvppPicDesc类型,表示成功。>返回null,表示失败。
= = = = = = = = = = = = = = = ====================================
·acldvppDestroyPicDesc·函数功能:
销毁图片描述信息,只能销毁通过acldvppCreatePicDesc接口创建的图片描述信息。·函数原型:
aclErroracldvppDestroyPicDesc(acldvppPicDesc*picDesc)
整体调用顺序
JPEG图片解码–整体调用顺序·整体调用顺序:
创建通道描述对象:调用acldvppCreateChannelDesc
创建acldvppChannelDesc对象
创建通道:调用acldvppCreateChannel(acldvppChannelDesc)创建通道
创建图片描述:调用acldvppCreatePicDesc创建acldvppPicDesc对象
执行操作.……
销毁图片描述:调用acldvppDestroyPicDesc(acldvppPicDesc)销毁图片描述
创建图片描述:调用acldvppCreatePicDesc创建acldvppPicDesc对象
执行操作…
销毁图片描述:调用acldvppDestroyPicDesc(acldvppPicDesc)销毁图片描述
销毁通道:调用acldvppDestroyChannel(acldvppChannelDesc)销毁通道
销毁通道描述对象:调用acldvppDestroyChannelDesc(acldvppChannelDesc)销毁通道描述对象
解码主接口
读取图片宽高
预测输出内存
VPC图片约束
图片分辨率约束
图片格式、宽高对齐、内存约束
VPC图片缩放
VPC
·功能:
抠图,从输入图片中抠出需要用的图片区域。
缩放-针对不同分辨率的图像,当前支持非8K缩放。
(非8K缩放,用于处理输入图片分辨率在326~40964096范围内的图片。)
-从是否抠多张图的维度,可分为单图裁剪缩放(支持非压缩格式) 一图多框裁剪缩放(支持非压缩格式)。
-其它缩放方式,如:原图缩放、等比例缩放。
善加,从输入图片中抠出来的图,对抠出的图进行缩放后,放在用户输出图片的指定区域,输出图片可以是空白图片(由用户申请的空输出内存产生的),也可以是已有图片(由用户申请输出内存后将已有冬片读入输出内存),只有当输出图片是已有图片时,才表示叠加。
拼接,从输入图片中报多张图片,对抠出的图进行缩放后,放到输出图片的指定区域。
8K缩放现在也支持了,用于处理宽或高在4096~8192范围内的输入图片,实际开发时请参见对应版本的文档,了解8K缩放时支持的图片格式。
抠图+缩放+叠加
调用流程
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接销毁通道描述信息。
缩放接口
裁剪接口
剪切粘贴
V2版本
接口调用流程
应用开发初级章节小测
- 点赞
- 收藏
- 关注作者
评论(0)