函数:dvpp_vpc_resize_async
功能说明
功能说明
VPC(Vision Preprocessing Core)各功能的介绍、各版本的功能支持度如下表所示。
| 功能 | 描述 | Atlas 200/500 A2推理产品 |
|---|---|---|
| 抠图 | 从输入图片中抠出需要用的图片区域,支持一图多框和多图多框。 | √ |
| 缩放 | - 针对不同分辨率的图像,支持8K缩放、非8K缩放。 - 支持单图裁剪缩放(支持非压缩格式)、一图多框裁剪缩放(支持非压缩格式)。 - 其它缩放方式,如:原图缩放、等比例缩放(缩放前后图片的宽高比例相同)。 | √ |
| 叠加 | 从输入图片中抠出来的图,对抠出的图进行缩放后,放在用户输出图片的指定区域,输出图片可以是空白图片(由用户申请的空输出内存产生的),也可以是已有图片(由用户申请输出内存后将已有图片读入输出内存),只有当输出图片是已有图片时,才表示叠加。 | √ |
| 拼接 | 从输入图片中抠多张图片,对抠出的图进行缩放后,放到输出图片的指定区域。 | √ |
| 图像金字塔 | 对原图进行多次高斯滤波之后向下采样产生不同尺寸的图像。 | x |
| 直方图统计 | 统计图像每个通道(RGB/YUV)的像素值分布。 | √ |
| 色彩重映射 | 根据配置信息将图片从原图映射为另一张图。 | √ |
| 边界填充 | 对图像进行边界填充。 | √ |
| 格式转换 | 支持RGB格式、YUV格式之间的格式转换。 | √ |
| 图像灰度化 | 将彩色图像转化为灰度图像。需注意,输入为灰度图像、输出只能为灰度图像。 | √ 实现图像灰度化的操作是输出YUV400格式的输出图片 |
功能示意图(Atlas 200/500 A2推理产品)
图1 VPC功能示意图(抠图+缩放+叠加)

图2 VPC功能示意图(拼接)

图3 等比例缩放(贴图区域在输出图片的中心位置),即缩放前后图片的宽高比例相同

参考说明
RGB、YUV格式图像的各分量排布示意图。示例:SP图像以YUV420SP为例,Packed和RGB图像以ARGB图像为例。

父主题: VPC功能
约束说明
本节中8K、非8K的概念如下:
图片分辨率约束
-
输入图片分辨率,支持如下分辨率的输入图片。
10*6~8192*8192
在调用接口实现VPC功能时,各接口对分辨率的要求可能不同,请参见VPC功能下各接口的说明。其中,当输入图片格式为YUV440SP、YUV440P时,输入图片的宽最大值为4096。
-
输出图片分辨率
版本 分辨率范围 Atlas 200/500 A2推理产品 10*6~4096*8192
图片格式、宽高对齐、内存约束
VPC在处理图片时,需调用acl.media.dvpp_malloc接口申请Device上的输入、输出内存,调用acl.media.dvpp_free接口释放输入、输出内存,这部分内存的生命周期由用户自行管理。
Atlas 200/500 A2推理产品,在8K场景下,输入图片格式支持如下格式:
- YUV400 8bit
- YUV420SP NV12 8bit、YUV420SP NV21 8bit
- YUV422SP 8bit、YVU422SP 8bit
- YUV444SP 8bit、YVU444SP 8bit
- YUV422P YUYV 8bit、YUV422P UYVY 8bit、YUV422P YVYU 8bit、YUV422P VYUY 8bit
:::note 说明 在调用接口实现VPC功能时:
- 图片格式的定义请参见acldvppPixelFormat,宽stride、高stride、8K等概念请参见基本概念。
- Atlas 200/500 A2推理产品,宽stride最小10、最大16384(16384=4096*4,宽是4096的argb格式的图像,1个像素占用4个字节,一行像素就占用4096*4,即宽stride);高stride最小6、最大16384。 :::
表1 输入图片格式、宽高对齐、内存大小约束
版本 | 输入图片格式 | 输入图片宽、高对齐要求 | 输入图片宽stride、高stride、内存大小要求 Atlas 200/500 A2推理产品 |
|---|---|---|---|
通用格式,各版本都支持 | YUV400 8bit | 无对齐要求 | 宽stride无对齐要求,与宽相同即可。 高stride无对齐要求,与高相同即可。 内存大小(单位Byte)= 宽stride * 高stride |
YUV420SP NV12 8bit | 宽2对齐 高2对齐 | 宽stride无对齐要求,与宽相同即可。 高stride为高2对齐后的值。 内存大小(单位Byte)= 宽stride * 高stride * 3/2 | |
YUV420SP NV21 8bit | |||
YUV422SP 8bit | 宽2对齐 高无对齐要求 | 宽stride无对齐要求,与宽相同即可。 高stride无对齐要求,与高相同即可。 内存大小(单位Byte)= 宽stride * 高stride * 2 | |
YVU422SP 8bit | |||
YUV444SP 8bit | 无对齐要求 | 宽stride无对齐要求,与宽相同即可。 高stride无对齐要求,与高相同即可。 内存大小(单位Byte)= 宽stride * 高stride * 3 | |
YVU444SP 8bit | |||
YUV422Packed YUYV 8bit | 宽2对齐 高无对齐要求 | 宽stride为宽乘以2的值。 高stride无对齐要求,与高相同即可。 内存大小(单位Byte)= 宽stride * 高stride | |
YUV422Packed UYVY 8bit | |||
YUV422Packed YVYU 8bit | |||
YUV422Packed VYUY 8bit | |||
YUV444Packed 8bit | 无对齐要求 | 宽stride为宽乘以3的值。 高stride无对齐要求,与高相同即可。 内存大小(单位Byte)= 宽stride * 高stride | |
RGB888 | |||
BGR888 | |||
ARGB8888 | 无对齐要求 | 宽stride为宽乘以4的。 高stride无对齐要求,与高相同即可。 内存大小(单位Byte)= 宽stride * 高stride | |
ABGR8888 | |||
RGBA8888 | |||
BGRA8888 | |||
该部分格式仅以下版本支持: Atlas 200/500 A2推理产品 | YUV440SP 8bit | 宽无对齐要求 高2对齐 | 宽stride无对齐要求,与宽相同即可。 高stride为高2对齐后的值。 内存大小(单位Byte)= 宽stride * 高stride * 2 |
YVU440SP 8bit | |||
该部分格式仅以下版本支持: Atlas 200/500 A2推理产品 | YVU420Planar | 宽2对齐,高2对齐 | 宽stride无对齐要求,与宽相同即可。 高stride无对齐要求,与高相同即可。 内存大小(单位Byte)= 宽stride * 高stride * 3/2 |
YUV420Planar | |||
YVU422Planar | 无对齐要求 | 宽stride无对齐要求,与宽相同即可。 高stride无对齐要求,与高相同即可。 内存大小(单位Byte)= 宽stride * 高stride * 2 | |
YUV422Planar | |||
YVU444Planar | 无对齐要求 | 宽stride无对齐要求,与宽相同即可。 高stride无对齐要求,与高相同即可。 内存大小(单位Byte)= 宽stride * 高stride * 3 | |
YUV444Planar | |||
YVU444Packed 8bit | 无对齐要求 | 宽stride无对齐要求,宽stride为宽乘以3的值。 高stride无对齐要求,与高相同即可。 内存大小(单位Byte)= 宽stride * 高stride | |
YUV440Planar | 宽无对齐要求,但宽≤4096 高2对齐 | 宽stride无对齐要求,与宽相同即可。 高stride无对齐要求,与高相同即可。 内存大小(单位Byte)= 宽stride * 高stride * 2 | |
YVU440Planar | |||
RGB888Planar | 无对齐要求 | 宽stride无对齐要求,与宽相同即可。 高stride无对齐要求,与高相同即可。 内存大小(单位Byte)= 宽stride * 高stride * 3 | |
BGR888Planar |
表2 输出图片格式、宽高对齐、内存大小约束
版本 | 输出图片格式 | 输出图片宽、高对齐要求 | 输出图片宽stride、高stride、内存大小要求 Atlas 200/500 A2推理产品 |
|---|---|---|---|
通用格式,各版本都支持 | YUV420SP NV12 8bit | 宽2对齐 高2对齐 | 宽stride无对齐要求,与宽相同即可。 高stride为高2对齐后的值。 内存大小(单位Byte)= 宽stride * 高stride * 3/2 |
YUV420SP NV21 8bit | |||
该部分格式仅以下版本支持: Atlas 200/500 A2推理产品 | YUV400 8bit | 无对齐要求 | 宽stride无对齐要求,与宽相同即可;高stride无对齐要求,与高相同即可。 内存大小(单位Byte)= 宽stride * 高stride |
YUV422SP 8bit | 宽2对齐 高无对齐要求 | 宽stride无对齐要求,与宽相同即可;高stride无对齐要求,与高相同即可。 内存大小(单位Byte)= 宽stride * 高stride * 2 | |
YVU422SP 8bit | |||
YUV444Packed 8bit | 无对齐要求 | 宽stride为宽乘以3的值;高stride无对齐要求,与高相同即可。 内存大小(单位Byte)= 宽stride * 高stride | |
RGB888 | |||
BGR888 | |||
ARGB8888 | 无对齐要求 | 宽stride为宽乘以4的值;高stride无对齐要求,与高相同即可。 内存大小(单位Byte)= 宽stride * 高stride | |
ABGR8888 | |||
RGBA8888 | |||
BGRA8888 | |||
该部分格式仅以下版本支持: Atlas 200/500 A2推理产品 | YVU444Packed | 无对齐要求 | 宽stride为宽乘以3的值;高stride无对齐要求,与高相同即可。 内存大小(单位Byte)= 宽stride * 高stride |
RGB888Planar BGR888Planar | 无对齐要求 | 宽stride无对齐要求,与宽相同即可;高stride无对齐要求,与高相同即可。 内存大小(单位Byte)= 宽stride * 高stride * 3 |
抠图、贴图约束
-
抠图区域不超出输入图片区域。
-
贴图区域不超出输出图片区域,最大贴图个数256个。
-
抠图、贴图区域的奇数、偶数限制为:
抠图起始坐标无奇数、偶数限制;当输出图片格式为YUV420时,贴图区奇数、偶数限制为:左偏移和上偏移为偶数、右偏移和下偏移为奇数;当输出图片格式为YUV422时,贴图区奇数、偶数限制为:左偏移为偶数、右偏移为奇数。
YUV格式图像下采样约束
VPC在处理图片时,会根据输入或输出图片格式,将输入图片格式转换为YUV444或RGB用于内部处理,YUV444或RGB没有宽高奇偶数的限制,但当输出图片格式为YUV420SP或YUV422SP格式时,会进行下采样处理,由于YUV420SP或YUV422SP格式本身的数据排布导致宽高存在奇偶数限制,因此输出图片的边缘可能存在异常数据。
图1 异常效果图片举例
出现异常数据的根因在于,在计算过程中,出现输出图片位置处于奇数起始点时,此时YUV444格式的图片是正确的,但是下采样到YUV420SP格式时,由于奇数行和偶数行是共用同一个uv的,导致图片起始行的Y与上一行的UV组成新的像素,产生异常数据。
父主题: VPC功能
性能指标说明
性能指标说明
单个Device场景下的性能指标参考如下(1路对应一个通道,一个通道对应一个线程,或者n路对应一个通道,一个通道对应n个线程):
| 场景举例 | 总帧率 |
|---|---|
| - 输入图片分辨率:1080p(1920*1080) - 输出图片分辨率:1080p(1920*1080) - 输入/输出图片格式:YUV420SP - n路(n<2) | n*800fps |
| - 输入图片分辨率:1080p(1920*1080) - 输出图片分辨率:1080p(1920*1080) - 输入/输出图片格式:YUV420SP - n路(n≥2) | 1600fps |
| - 输入图片分辨率:4K图像(3840*2160) - 输出图片分辨率:4K图像(3840*2160) - 输入/输出图片格式:YUV420SP - n路(n<2) | n*200fps |
| - 输入图片分辨率:4K图像(3840*2160) - 输出图片分辨率:4K图像(3840*2160) - 输入/输出图片格式:YUV420SP - n路(n≥2) | 400fps |
| - 输入图片分辨率:8K图像(7680*4320) - 输出图片分辨率:4K图像(3840*2160) - 输入/输出图片格式:YUV420SP - n路(n<2) | n*100fps |
| - 输入图片分辨率:8K图像(7680*4320) - 输出图片分辨率:4K图像(3840*2160) - 输入/输出图片格式:YUV420SP - n路(n≥2) | 200fps |
:::note 说明 调用VPC批处理接口(接口命名中包含batch,例如acl.media.dvpp_vpc_batch_crop_async接口)时,由于图像处理单元DVPP(Digital Video Pre-Processing)内部多个VPC硬件单元会并行处理图片任务,因此单路就可以达到最大总帧率。 :::
父主题: VPC功能
函数:dvpp_vpc_resize_async
| C函数原型 | aclError acldvppVpcResizeAsync(acldvppChannelDesc *channelDesc, acldvppPicDesc *inputDesc, acldvppPicDesc *outputDesc, acldvppResizeConfig *resizeConfig, aclrtStream stream) |
|---|---|
| Python函数 | ret = acl.media.dvpp_vpc_resize_async(dvpp_channel_desc, input_dvpp_pic_desc, output_dvpp_pic_desc, dvpp_resize_config, stream) |
| 函数功能 | 将输入图片缩放到输出图片大小,异步接口。 |
| 输入说明 | dvpp_channel_desc:int,指定通道描述信息的指针地址,与调用acl.media.dvpp_create_channel接口创建通道时指定的dvpp_channel_desc保持一致。 input_dvpp_pic_desc:int,输入图片信息的指针地址。 - 调用acl.media.dvpp_create_pic_desc接口创建图片描述信息。 - 调用acl.media.dvpp_set_pic_desc系列接口设置图片描述参数(例如,图片格式、宽、高等)。 output_dvpp_pic_desc:int,输出图片信息的指针地址。 output_dvpp_pic_desc参数作为输入时,需要用户调用如下接口: - 调用acl.media.dvpp_create_pic_desc接口创建图片描述信息。 - 调用acl.dvpp.set_pic_desc系列接口设置图片描述参数(例如,内存地址、内存大小、图片格式、宽、高等)。 dvpp_resize_config:int,指定图片缩放配置数据的指针地址。 调用acl.media.dvpp_create_resize_config接口创建图片缩放配置数据。 stream:int,指定Stream对象。 |
| 返回值说明 | ret:int,错误码。 - 返回0表示任务下发成功。 - 返回非0表示任务下发失败。 |
约束说明
| 昇腾AI处理器 | 约束 |
|---|---|
| Atlas 200/500 A2推理产品 | - 关于输入、输出图片分辨率: - 输入图片分辨率:10*6 - 输出图片分辨率:10*6 - 关于图片格式、宽高对齐、内存等总体约束,请参见图片格式、宽高对齐、内存约束。 - 当输入、输出图片格式都为ARGB8888、ABGR8888、RGBA8888、BGRA8888格式时,在经过本接口缩放处理后,A分量值会变为0。 |
父主题: VPC功能
函数:dvpp_vpc_crop_async
| C函数原型 | aclError acldvppVpcCropAsync(acldvppChannelDesc *channelDesc, acldvppPicDesc *inputDesc, acldvppPicDesc *outputDesc, acldvppRoiConfig *cropArea, aclrtStream stream) |
|---|---|
| Python函数 | ret = acl.media.dvpp_vpc_crop_async(dvpp_channel_desc, input_dvpp_pic_desc, output_dvpp_pic_desc, crop_area, stream) |
| 函数功能 | 按指定区域从输入图片中抠图,再将抠的图片存放到输出内存中,作为输出图片,异步接口。 输出图片区域与crop_area不一致时会对图片再做一次缩放操作。 Atlas 200/500 A2推理产品,默认缩放算法为“业界通用的Bilinear算法”。 |
| 输入说明 | dvpp_channel_desc:int,指定通道描述信息的指针地址,与调用acl.media.dvpp_create_channel接口创建通道时指定的dvpp_channel_desc保持一致。 input_dvpp_pic_desc:int,输入图片信息的指针地址。 - 调用acl.media.dvpp_create_pic_desc接口创建图片描述信息。 - 调用acl.media.dvpp_set_pic_desc系列接口设置图片描述参数(例如,图片格式、宽、高等)。 output_dvpp_pic_desc:int,输出图片信息的指针地址。 outputDesc参数作为输入时,需要用户调用如下接口: - 调用acl.media.dvpp_create_pic_desc接口创建图片描述信息。 - 调用acl.media.dvpp_set_pic_desc系列接口设置图片描述参数(例如,内存地址、内存大小、图片格式、宽、高等)。 crop_area:int,抠图区域位置的指针地址。调用acl.media.dvpp_create_roi_config接口创建区域位置数据。 stream:int,指定Stream对象。 |
| 返回值说明 | ret:int,错误码。 - 返回0,表示任务下发成功。 - 返回非0,表示任务下发失败。 |
约束说明
| 昇腾AI处理器 | 约束 |
|---|---|
| Atlas 200/500 A2推理产品 | - 关于输入、输出图片分辨率: - 输入图片分辨率:10*6 - 输出图片分辨率:10*6 - 关于图片格式、宽高对齐、内存等总体约束,请参见图片格式、宽高对齐、内存约束。 - 由于通过本接口抠的图直接作为输出图片,所以需满足输出图片最大分辨率4096*8192的限制,因此本接口中抠图区域最大分辨率为4096*8192。 |
父主题: VPC功能
函数:dvpp_vpc_crop_resize_async
| C函数原型 | aclError acldvppVpcCropResizeAsync(acldvppChannelDesc *channelDesc, acldvppPicDesc *inputDesc, acldvppPicDesc *outputDesc, acldvppRoiConfig *cropArea, acldvppResizeConfig *resizeConfig, aclrtStream stream) |
|---|---|
| Python函数 | ret = acl.media.dvpp_vpc_crop_resize_async(dvpp_channel_desc, input_dvpp_pic_desc, output_dvpp_pic_desc, crop_area, resize_config, stream) |
| 函数功能 | 按指定区域从一张输入图片中抠出一张子图,再将抠的图片存放到输出内存中,作为输出图片,异步接口。 输出图片区域与crop_area不一致时会对图片再做一次缩放操作,按照resize_config处配置的缩放算法。 |
| 输入说明 | dvpp_channel_desc:int,指定通道描述信息的指针地址,与调用acl.media.dvpp_create_channel接口创建通道时指定的dvpp_channel_desc保持一致。 input_dvpp_pic_desc:int,输入图片信息的指针地址。 - 调用acl.media.dvpp_create_pic_desc接口创建图片描述信息。 - 调用acl.media.dvpp_set_pic_desc系列接口设置图片描述参数(例如,内存地址、内存大小、图片格式、宽、高等)。 output_dvpp_pic_desc:int,输出图片信息的指针地址。 - 调用acl.media.dvpp_create_pic_desc接口创建图片描述信息。 - 调用acl.media.dvpp_set_pic_desc系列接口设置图片描述参数(例如,内存地址、内存大小、图片格式、宽、高等)。 crop_area:int,抠图区域位置的指针地址。调用acl.media.dvpp_create_roi_config接口创建区域位置数据。 resize_config:int,指定图片缩放配置数据的指针地址。需提前调用acl.media.dvpp_create_resize_config接口创建图片缩放配置数据。 stream:int,指定Stream对象。 |
| 返回值说明 | ret:int,错误码。 - 返回0表示任务下发成功。 - 返回非0表示任务下发失败。 |
| 参考资源 | 接口调用示例,参见抠图缩放(一图一框)示例代码。 |
约束说明
| 昇腾AI处理器 | 约束 |
|---|---|
| Atlas 200/500 A2推理产品 | - 关于输入、输出图片分辨率: - 输入图片分辨率:10*6 - 输出图片分辨率:10*6 - 关于图片格式、宽高对齐、内存等总体约束,请参见图片格式、宽高对齐、内存约束。 - 当输入、输出图片格式都为ARGB8888、ABGR8888、RGBA8888、BGRA8888格式时,在经过本接口缩放处理后,A分量值会变为0。 |
父主题: VPC功能
函数:dvpp_vpc_batch_crop_async
| C函数原型 | aclError acldvppVpcBatchCropAsync(acldvppChannelDesc *channelDesc, acldvppBatchPicDesc *srcBatchPicDescs, uint32_t *roiNums, uint32_t size, acldvppBatchPicDesc *dstBatchPicDescs, acldvppRoiConfig *cropAreas[], aclrtStream stream) |
|---|---|
| Python函数 | dst_batch_pic_descs, ret = acl.media.dvpp_vpc_batch_crop_async(dvpp_channel_desc, src_batch_pic_descs, roi_nums_list, dst_batch_pic_descs, crop_area_list,stream) |
| 函数功能 | 对于一张或多张输入图片,支持从每个输入图片中抠出一张或多张子图并一一对应存放到多个输出区域,输出图片区域与抠图区域不一致时会对图片再做一次缩放操作。异步接口。 Atlas 200/500 A2推理产品,默认缩放算法为“业界通用的Bilinear算法”。 |
| 输入说明 | dvpp_channel_desc:int,指定通道描述信息的指针地址,与调用acl.media.dvpp_create_channel接口创建通道时指定的dvpp_channel_desc保持一致。 src_batch_pic_descs:int,指定批量输入图片描述信息的指针地址。 - 调用acl.media.dvpp_create_batch_pic_desc接口创建批量图片描述信息。 - 调用acl.media.dvpp_get_pic_desc接口获取指定图片的图片描述信息。 - 调用acl.media.dvpp_set_pic_desc系列接口设置图片描述参数(例如,内存地址、内存大小、图片格式、宽、高等)。 roi_nums_list:list,表示抠图的数量的列表,当前最大抠图数量为256。 - roi_nums_list总和小于等于256,与dst_batch_pic_descs中的batch_size值保持一致。 - roi_nums_list[0] + ... + roi_nums_list[size - 1] <= 256 dst_batch_pic_descs:int,指定批量输出图片描述信息的指针地址。 - 用acl.media.dvpp_create_batch_pic_desc接口创建批量图片描述信息。 - 调用acl.media.dvpp_get_pic_desc接口获取指定图片的图片描述信息。 - 调用acl.media.dvpp_set_pic_desc系列接口设置图片描述参数(例如,内存地址、内存大小、图片格式、宽、高等)。 crop_area_list:list,抠图区域位置列表。调用acl.media.dvpp_create_roi_config接口创建区域位置数据。 stream:int,指定Stream。 |
| 返回值说明 | dst_batch_pic_descs:int,批量输出图片描述信息。 ret:int,错误码。 - 返回0,表示任务下发成功。 - 返回非0,表示任务下发失败。 |
约束说明
| 昇腾AI处理器 | 约束 |
|---|---|
| Atlas 200/500 A2推理产品 | - 关于输入、输出图片分辨率: - 输入图片分辨率:10*6 - 输出图片分辨率:10*6 - 关于图片格式、宽高对齐、内存等总体约束,请参见图片格式、宽高对齐、内存约束。 - 当输入、输出图片格式都为ARGB8888、ABGR8888、RGBA8888、BGRA8888格式时,在经过本接口缩放处理后,A分量值会变为0。 |
父主题: VPC功能
在线提单