acldvppVpcCalcHistAsync
acldvppVpcEqualizeHistAsync
函数功能
实现图片的色彩重映射。异步接口。
约束说明
-
输入图片分辨率为10*6~4096*4096(包括4096)。
-
输入图片格式支持acldvppPixelFormat枚举值中的如下枚举项:
PIXEL_FORMAT_YUV_400 = 0, // YUV400 8bitPIXEL_FORMAT_YUV_SEMIPLANAR_420 = 1, // YUV420SP NV12 8bitPIXEL_FORMAT_YVU_SEMIPLANAR_420 = 2, // YUV420SP NV21 8bitPIXEL_FORMAT_YUV_SEMIPLANAR_422 = 3, // YUV422SP 8bitPIXEL_FORMAT_YVU_SEMIPLANAR_422 = 4, // YVU422SP 8bitPIXEL_FORMAT_YUV_PACKED_444 = 11, // YUV444P 8bitPIXEL_FORMAT_RGB_888 = 12, // RGB888PIXEL_FORMAT_BGR_888 = 13, // BGR888 -
输出图片分辨率、输出图片格式、widthStride对齐要求、heightStride对齐要求等,必须与输入图片格的要求保持一致。
-
不同图片格式的对齐要求请参见图片格式、宽高对齐、内存约束。
函数原型
aclError acldvppVpcEqualizeHistAsync(const acldvppChannelDesc *channelDesc,
const acldvppPicDesc *inputDesc,
acldvppPicDesc *outputDesc,
const acldvppLutMap *lutMap,
aclrtStream stream)
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| channelDesc | 输入 | 通道描述信息的指针。 与调用acldvppCreateChannel接口创建通道时指定的channelDesc保持一致。 |
| inputDesc | 输入 | 输入图片信息的指针。 - 调用acldvppCreatePicDesc接口创建图片描述信息。 - 调用acldvppSetPicDesc系列接口设置图片描述参数(例如,内存地址、内存大小、图片格式、宽、高等)。 |
| outputDesc | 输入&输出 | 输出图片信息的指针。 outputDesc参数作为输入时,需要用户调用如下接口: - 调用acldvppCreatePicDesc接口创建图片描述信息。 - 调用acldvppSetPicDesc系列接口设置图片描述参数(例如,内存地址、内存大小、图片格式、宽、高等)。 |
| lutMap | 输入 | 色彩重映射表的指针。 调用acldvppCreateLutMap接口创建acldvppLutMap类型的数据(表示色彩重映射表),再调用acldvppGetLutMapData获取内存指针,由用户自行向该内存中写入色彩重映射表数据,写完数据后,再将acldvppLutMap类型的数据作为入参传入acldvppVpcEqualizeHistAsync。 |
| stream | 输入 | 指定Stream。 |
返回值说明
返回0表示任务下发成功,返回非0表示任务下发失败。
父主题: VPC功能
acldvppVpcMakeBorderAsync
函数功能
实现图片边界填充功能。异步接口。
约束说明
- 输入图片分辨率为10*6~4096*4096(包括4096),输入图片格式、对齐、内存等约束,请参见图片格式、宽高对齐、内存约束。
- 输出图片分辨率、图片格式、对齐、内存等约束,请参见约束说明。
- 由于YUV格式图像下采样约束,当输出图片格式为YUV420SP或YUV422SP格式时,需注意:
- 对于YUV420SP输出格式,上下左右填充的尺寸建议为偶数;
- 对于YUV422SP输出格式,左右填充的尺寸建议为偶数。
函数原型
aclError acldvppVpcMakeBorderAsync(const acldvppChannelDesc *channelDesc,
const acldvppPicDesc *inputDesc,
acldvppPicDesc *outputDesc,
const acldvppBorderConfig *borderConfig,
aclrtStream stream)
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| channelDesc | 输入 | 通道描述信息的指针。 与调用acldvppCreateChannel接口创建通道时指定的channelDesc保持一致。 |
| inputDesc | 输入 | 输入图片信息的指针。 - 调用acldvppCreatePicDesc接口创建图片描述信息。 - 调用acldvppSetPicDesc系列接口设置图片描述参数(例如,内存地址、内存大小、图片格式、宽、高等)。 |
| outputDesc | 输入&输出 | 输出图片信息的指针。 outputDesc参数作为输入时,需要用户调用如下接口: - 调用acldvppCreatePicDesc接口创建图片描述信息。 - 调用acldvppSetPicDesc系列接口设置图片描述参数(例如,内存地址、内存大小、图片格式、宽、高等)。 |
| borderConfig | 输入 | 填充边界配置的指针。 调用acldvppCreateBorderConfig接口创建填充边界配置。 |
| stream | 输入 | 指定Stream。 |
返回值说明
返回0表示任务下发成功,返回非0表示任务下发失败。
父主题: VPC功能
acldvppVpcCalcHistAsync
函数功能
统计图像中每个像素的各颜色分量的分布。异步接口。
约束说明
-
关于输入图片分辨率的要求:
版本 约束 Atlas 200/500 A2推理产品 输入图片分辨率:10*6~4096*8192(包括4096*8192)。 -
输入图片格式支持acldvppPixelFormat枚举值中的如下枚举项:
PIXEL_FORMAT_YUV_400 = 0, // YUV400 8bitPIXEL_FORMAT_YUV_SEMIPLANAR_420 = 1, // YUV420SP NV12 8bitPIXEL_FORMAT_YVU_SEMIPLANAR_420 = 2, // YUV420SP NV21 8bitPIXEL_FORMAT_YUV_SEMIPLANAR_422 = 3, // YUV422SP 8bitPIXEL_FORMAT_YVU_SEMIPLANAR_422 = 4, // YVU422SP 8bitPIXEL_FORMAT_YUV_SEMIPLANAR_444 = 5, // YUV444SP 8bitPIXEL_FORMAT_YVU_SEMIPLANAR_444 = 6, // YVU444SP 8bitPIXEL_FORMAT_YUYV_PACKED_422 = 7, // YUV422Packed YUYV 8bitPIXEL_FORMAT_UYVY_PACKED_422 = 8, // YUV422Packed UYVY 8bitPIXEL_FORMAT_YVYU_PACKED_422 = 9, // YUV422Packed YVYU 8bitPIXEL_FORMAT_VYUY_PACKED_422 = 10, // YUV422Packed VYUY 8bitPIXEL_FORMAT_YUV_PACKED_444 = 11, // YUV444P 8bitPIXEL_FORMAT_RGB_888 = 12, // RGB888PIXEL_FORMAT_BGR_888 = 13, // BGR888PIXEL_FORMAT_YUV_SEMIPLANAR_440 = 1000, // YUV440SP 8bitPIXEL_FORMAT_YVU_SEMIPLANAR_440 = 1001, // YVU440SP 8bit -
关于图片格式、宽高对齐、内存等总体约束,请参见图片格式、宽高对齐、内存约束。
函数原型
aclError acldvppVpcCalcHistAsync(****acldvppChannelDesc *channelDesc,
acldvppPicDesc *srcPicDesc,
acldvppHist *hist,
void *reserve,
aclrtStream stream)
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| channelDesc | 输入 | 通道描述信息的指针。 与调用acldvppCreateChannel接口创建通道时指定的channelDesc保持一致。 |
| srcPicDesc | 输入 | 输入图片信息的指针。 - 调用acldvppCreatePicDesc接口创建图片描述信息。 - 调用acldvppSetPicDesc系列接口设置图片描述参数(例如,内存地址、内存大小、图片格式、宽、高等)。(说明:当图片格式为YUV440SP 8bit、YVU440SP 8bit时,Y分量统计准确,UV分量统计上存在误差。) |
| hist | 输入&输出 | 直方图描述信息的指针。 调用acldvppCreateHist接口创建直方图描述信息作为输入。 调用本接口后,输出每张图像各颜色分量的像素值(0-255)分布情况。 |
| reserve | 输入 | 直方图统计配置的指针,预留,当前可填NULL。 |
| stream | 输入 | 指定Stream。 |
返回值说明
返回0表示任务下发成功,返回非0表示任务下发失败。
父主题: VPC功能
功能及约束说明
功能说明
JPEGD(JPEG Decoder)实现.jpg、.jpeg、.JPG、.JPEG图片文件的解码。
-
JPEGD在解码图片时,支持对图片进行旋转。
如果输入图片的码流中包含Orientation信息(代表捕获图像时摄像机相对于场景的方向),则JPEGD在解码时会解析Orientation信息,将图片进行90度、180度、270度或镜像旋转。旋转后输出图片的宽stride、高stride、输出内存仍需满足图片格式、宽高对齐、内存约束中的要求。
如果输入图片的码流异常,导致JPEGD解码时无法读取Orientation信息,则不能实现图片旋转的功能。
:::note 说明 Atlas 200/500 A2推理产品上,JPEGD 422格式旋转那图片,若原图高为奇数,并且旋转方式为宽高对换,则旋转后宽存在黑边,建议用户将宽向下对齐到偶数使用(即去除黑边),比如原图为200*101,若旋转后为101*200,则建议用户实际使用区域为100*200。
Atlas 200/500 A2推理产品上,JPEGD 440格式旋转那图片,若原图宽为奇数,并且旋转方式为宽高对换,则旋转后高存在黑边,建议用户将高向下对齐到偶数使用(即去除黑边),比如原图为201*101,若旋转后为100*201,则建议用户实际使用区域为100*200。 :::
-
JPEGD在解码图片时,支持按源图片格式解码。
源图片格式解码是指解码前后图片的编码格式保持一致,例如解码前输入图片为jpeg(440),解码后输出图片为YUV440SP V在前U在后或YUV440SP U在前V在后。
使用源图片格式解码,有以下方式:
- 调用acldvppJpegGetImageInfoV2接口,获取JPEGD解码前输入图片的编码格式,在调用JPEGD解码接口时,将输出图片格式设置的与输入图片编码格式一致。
- 在调用JPEGD解码接口时,将输出图片格式配置为PIXEL_FORMAT_UNKNOWN,输出格式默认按源图片格式输出、且是V在前U在后的Semi-Planar格式。例如,JPEG输入图片编码格式为jpeg(440),输出图片格式配置为PIXEL_FORMAT_UNKNOWN,JPEGD解码后,实际输出图片格式为YUV440SP V在前U在后。
:::note 说明 JPEGD解码后的输出图片,如果要直接作为模型推理的输入,建议将输出图片格式配置为PIXEL_FORMAT_UNKNOWN,这时JPEGD使用源图片格式解码(但这里要确保解码后的图片格式模型是支持的),保证模型推理的精度。
JPEGD解码后的输出图片,如果直接作为VPC的输入,该场景下若使用源图片格式解码时,则需要关注解码后的输出图片格式VPC是否支持(VPC输入图片的格式请参见约束说明),如果VPC不支持,则用户需按VPC支持的情况指定JPEGD的输出图片格式。 :::
图片分辨率约束
-
输入图片分辨率
版本 分辨率范围 Atlas 200/500 A2推理产品 最大分辨率:16384*16384,最小分辨率:32*32。 -
输出图片分辨率
JPEGD只对图片解码,不会改变图片分辨率,因此输出与输入的图片分辨率保持一致。
图片格式、宽高对齐、内存约束
实现JPEGD图片解码功能时,需调用acldvppMalloc接口申请Device上的输入、输出内存,调用acldvppFree接口释放输入、输出内存,这部分内存的生命周期由用户自行管理。
- 输入内存的大小就是指实际的输入图片所占用的大小。
- 输出内存的大小,可调用acldvppJpegPredictDecSize接口预估,计算公式参见下表。
实现JPEGD图片解码功能时,仅支持Huffman编码,压缩前的原图像色彩空间为YUV,像素的各分量比例为4:4:4或4:2:2或4:2:0或4:0:0或4:4:0,不支持算术编码、不支持渐进JPEG格式、不支持JPEG2000格式。
:::note 说明 输出图片格式的定义请参见acldvppPixelFormat,宽stride、高stride等概念请参见基本概念。 :::
表1 图片格式、宽高对齐、内存大小约束
输入图片格式(YUV分量比例) | 输出图片格式 | 输出图片宽、高对齐要求 | 输出图片宽stride、高stride、内存大小要求 Atlas 200/500 A2推理产品 |
|---|---|---|---|
jpeg(444) | YVU444SP 8bit | 无对齐要求 | 宽stride为宽64对齐后的值。 高stride为高16对齐后的值。 内存大小(单位Byte)≥ 宽stride * 高stride * 3 |
YUV444SP 8bit | |||
YUV420SP NV12 8bit | 宽2对齐 高2对齐 | 宽stride为宽64对齐后的值。 高stride为高16对齐后的值。 内存大小(单位Byte)≥ 宽stride * 高stride * 3/2 | |
YUV420SP NV21 8bit | |||
jpeg(422) | YVU422SP 8bit | 宽2对齐 高2对齐 | 宽stride为宽64对齐后的值。 高stride为高16对齐后的值。 内存大小(单位Byte)≥ 宽stride * 高stride * 2 |
YUV422SP 8bit | |||
YUV420SP NV12 8bit | 宽2对齐 高2对齐 | 宽stride为宽64对齐后的值。 高stride为高16对齐后的值。 内存大小(单位Byte)≥ 宽stride * 高stride * 3/2 | |
YUV420SP NV21 8bit | |||
jpeg(420) | YUV420SP NV12 8bit | 宽2对齐 高2对齐 | 宽stride为宽64对齐后的值。 高stride为高16对齐后的值。 内存大小(单位Byte)≥ 宽stride * 高stride * 3/2 |
YUV420SP NV21 8bit | |||
jpeg(400) | YUV420SP NV12 8bit | 宽2对齐 高2对齐 | 宽stride为宽64对齐后的值。 高stride为高16对齐后的值。 内存大小(单位Byte)≥ 宽stride * 高stride * 3/2 |
YUV420SP NV21 8bit | |||
YUV400 8bit | 无对齐要求 | 宽stride为宽64对齐后的值。 高stride为高16对齐后的值。 内存大小(单位Byte)≥ 宽stride * 高stride | |
jpeg(440) | YVU440SP 8bit | 宽2对齐 高2对齐 | 宽stride为宽64对齐后的值。 高stride为高16对齐后的值。 内存大小(单位Byte)≥ 宽stride * 高stride * 2 |
YUV440SP 8bit | |||
YUV420SP NV12 8bit | 宽2对齐 高2对齐 | 宽stride为宽64对齐后的值。 高stride为高16对齐后的值。 内存大小(单位Byte)≥ 宽stride * 高stride * 3/2 | |
YUV420SP NV21 8bit |
软、硬件约束
- 硬件约束:
- 最多支持4张Huffman表,其中包括2 张DC(直流)表和2 张AC(交流)表。
- 最多支持3张量化表。
- 只支持8bit采样精度。
- 只支持对顺序式编码的图片进行解码。
- 只支持基于DCT(Discrete Cosine Transform)变换的JPEG 格式解码。
- 只支持一个SOS(Start of Scan)标志的图片解码。
- 软件约束:
- 支持3个SOS标志的图片解码。
- 支持mcu(Minimum Coded Unit)数据不足的异常图片解码。
精度相关约束
在Atlas 200/500 A2推理产品上,JPEGD+VPC串联使用时,由于JPEGD解码后的输出图片的宽stride*高stride有64*16对齐的约束,因此解码后的输出图片的宽、高有一些补边的无效数据,所以在执行VPC功能时(例如缩放时),需调用acldvppSetPicDescWidth和acldvppSetPicDescHeight接口正确设置输入图片的原图宽高,这样VPC在缩放图片前会先根据原图宽高自行抠图,目的是去除无效数据对图像精度的影响。
父主题: JPEGD功能
性能指标说明
性能指标说明(Atlas 200/500 A2推理产品)
JPEGD性能指标是基于硬件解码的性能,JPEGD硬件解码不支持3个SOS的图片解码,对于硬件不支持的格式,会使用软件解码,软件解码性能参考为1080P 15fps。JPEGD解码的输出图片如果涉及旋转,则性能指标低于软件解码的参考值,例如对于1080P的图片,性能指标低于15fps。
以下性能数据,是基于一个stream上下发10个异步媒体数据处理任务后,执行一次aclrtSynchronizeStream接口。
1080p指分辨率为1920*1080的图片;4K指分辨率为3840*2160的图片。单个Device的基本场景性能指标参考如下(1路对应一个通道,一个通道对应一个线程):
| 场景举例 | 总帧率 |
|---|---|
| 1080p*n路(1≤n≤2) | n*256fps |
| 1080p*n路(n>2) | 512fps |
| 4k*n路(1≤n≤2) | n*64fps |
| 4k*n路(n>2) | 128fps |
父主题: JPEGD功能
acldvppJpegDecodeAsync
函数功能
解码.jpg、.jpeg、.JPG、.JPEG图片,异步接口。
函数原型
aclError acldvppJpegDecodeAsync(acldvppChannelDesc *channelDesc,
const void *data,
uint32_t size,
acldvppPicDesc *outputDesc,
aclrtStream stream)
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| channelDesc | 输入 | 通道描述信息的指针。 与调用acldvppCreateChannel接口创建通道时指定的channelDesc保持一致。 |
| data | 输入 | 输入图片内存地址的指针。 |
| size | 输入 | 输入图片的实际数据大小,单位Byte。 |
| outputDesc | 输入&输出 | 输出图片信息的指针。 outputDesc参数作为输入时,需要用户调用如下接口: - 调用acldvppCreatePicDesc接口创建图片描述信息。 - 调用acldvppSetPicDesc系列接口设置输出图片的内存地址、内存大小、格式、widthStride、heightStride。 - 输出图片的内存大小可提前调用acldvppJpegPredictDecSize接口预估。 - JPEG原图的宽、高可通过acldvppJpegGetImageInfo/acldvppJpegGetImageInfoV2接口获取。 - 输出图片格式、输出图片的宽高对齐要求,请参见功能及约束说明。 outputDesc参数作为输出时,用户可以从内存地址中获取解码后的输出图片数据、可以调用acldvppGetPicDesc系列接口获取输出图片的宽/高。 (说明:、 Atlas 200/500 A2推理产品 上,如果解码后的输出图片数据需要在后续操作(例如,使用VPC实现抠图、缩放等功能)中使用,建议在解码后调用 acldvppGetPicDesc系列接口 获取输出图片的宽/高,因为解码过程中可能会对输出图片的宽高执行对齐操作,例如,jpeg(444) 源码的图片解码成YUV420SP格式的输出图片时,当jpeg(444) 源码图片的宽/高为奇数时,解码出来的YUV420SP格式的输出图片的宽/高理论上应该为奇数,但是YUV420SP格式本身要求图片的宽/高都为偶数,这时JPEGD会对奇数宽/高做向下2对齐的操作。) |
| stream | 输入 | 指定Stream。 |
返回值说明
返回0表示任务下发成功,返回非0表示任务下发失败。
参考资源
接口调用流程及示例,参见JPEGD图像解码。
父主题: JPEGD功能
在线提单