DVPP中的VPC功能模块,实现图片的抠图、缩放、边界填充、色域转换、金字塔(Atlas 200/500 A2推理产品不支持)、色彩重映射、直方图统计等功能。
样例中的关键接口调用流程如下:
├──————CMakeLists.txt // 编译脚本,调用src目录下的CMakeLists文件
├──————src/CMakeLists.txt // 编译脚本
├──————src/common // 示例代码文件所在的目录
├──————src/sample_vpc.cpp // 示例代码文件
操作系统及架构:Ubuntu 18.04 x86_64、Ubuntu 18.04 aarch64、EulerOS aarch64
编译器:g++ 或 aarch64-linux-gnu-g++
芯片:Atlas 推理系列产品(Ascend 310P处理器)、Atlas 200/500 A2推理产品。
已完成昇腾AI软件栈在开发环境、运行环境上的部署。
请单击以下链接,获取该样例的测试图片数据。
以运行用户登录开发环境,编译代码。此时存在以下两种情况:
当开发环境与运行环境的操作系统架构相同时,例如两者都是X86架构,或者都是AArch64架构,此时编译流程参考如下:
设置环境变量。
如下示例,$HOME/Ascend表示编译环境runtime标准形态安装包的安装路径,latest对应安装包版本号,请根据实际情况替换。
export DDK_PATH=$HOME/Ascend/latest
export NPU_HOST_LIB=$DDK_PATH/runtime/lib64/stub/
切换到vpc_sample目录,依次执行如下命令执行编译。
mkdir build
cd build
cmake .. -DCMAKE_CXX_COMPILER=g++ -DCMAKE_SKIP_RPATH=TRUE
make
在“vpc_sample/build/src“目录下会生成可执行程序vpc_demo。
当开发环境与运行环境的操作系统架构不同时,例如开发环境是X86架构、运行环境是AArch64架构,此时涉及交叉编译,需要在开发环境安装包含AArch64工具链的软件包,并将相关环境变量指向AArch64版本路径,具体编译流程参考如下:
提前在x86_64编译环境安装x86_64版本的CANN-toolkit包
设置环境变量。
如下示例,$HOME/Ascend表示编译环境runtime标准形态安装包的安装路径,latest对应安装包版本号,请根据实际情况替换。
export DDK_PATH=$HOME/Ascend/latest
export NPU_HOST_LIB=$DDK_PATH/runtime/lib64/stub/aarch64
切换到vpc_sample目录,依次执行如下命令执行编译。
mkdir build
cd build
cmake .. -DCMAKE_CXX_COMPILER=$HOME/Ascend/latest/toolkit/toolchain/hcc/bin/aarch64-target-linux-gnu-g++ -DCMAKE_SKIP_RPATH=TRUE
make
在“vpc_sample/build/src“目录下会生成可执行程序vpc_demo。
以运行用户将开发环境的“vpc_sample/build/src“目录下的可执行程序vpc_demo以及准备测试数据中测试数据拷贝到运行环境(Host)的同一目录下,例如“$HOME/dvpp/vpc_sample“。
运行应用。
切换到可执行文件vpc_demo所在的目录,例如“$HOME/dvpp/vpc_sample“,给该目录下的vpc_demo文件加执行权限。
chmod +x vpc_demo
设置环境变量,请根据实际情况替换。
export LD_LIBRARY_PATH=$HOME/Ascend/runtime/lib64
运行应用的命令示例参见抠图~多图抠图+缩放+边界填充。
运行可执行文件的通用参数说明如下所示:
img_width:输入图像的宽度。
img_height:输入图像的高度。
in_format:VPC输入图像的格式如下,输入对应数字即可。
HI_PIXEL_FORMAT_YUV_400 = 0, // YUV400 8bit
HI_PIXEL_FORMAT_YUV_SEMIPLANAR_420 = 1, // YUV420SP NV12 8bit
HI_PIXEL_FORMAT_YVU_SEMIPLANAR_420 = 2, // YUV420SP NV21 8bit
HI_PIXEL_FORMAT_YUV_SEMIPLANAR_422 = 3, // YUV422SP NV12 8bit
HI_PIXEL_FORMAT_YVU_SEMIPLANAR_422 = 4, // YUV422SP NV21 8bit
HI_PIXEL_FORMAT_YUV_SEMIPLANAR_444 = 5, // YUV444SP NV12 8bit
HI_PIXEL_FORMAT_YVU_SEMIPLANAR_444 = 6, // YUV444SP NV21 8bit
HI_PIXEL_FORMAT_YUYV_PACKED_422 = 7, // YUV422P YUYV 8bit
HI_PIXEL_FORMAT_UYVY_PACKED_422 = 8, // YUV422P UYVY 8bit
HI_PIXEL_FORMAT_YVYU_PACKED_422 = 9, // YUV422P YVYU 8bit
HI_PIXEL_FORMAT_VYUY_PACKED_422 = 10, // YUV422P VYUY 8bit
HI_PIXEL_FORMAT_YUV_PACKED_444 = 11, // YUV444P 8bit
HI_PIXEL_FORMAT_RGB_888 = 12, // RGB888
HI_PIXEL_FORMAT_BGR_888 = 13, // BGR888
HI_PIXEL_FORMAT_ARGB_8888 = 14, // ARGB8888
HI_PIXEL_FORMAT_ABGR_8888 = 15, // ABGR8888
HI_PIXEL_FORMAT_RGBA_8888 = 16, // RGBA8888
HI_PIXEL_FORMAT_BGRA_8888 = 17, // BGRA8888
HI_PIXEL_FORMAT_YUV_SEMIPLANAR_440 = 1000, // YUV440SP NV12 8bit
HI_PIXEL_FORMAT_YVU_SEMIPLANAR_440 = 1001, // YUV440SP NV21 8bit
out_format:VPC输出图像的格式如下,输入对应数字即可。
HI_PIXEL_FORMAT_YUV_400 = 0, // YUV400 8bit
HI_PIXEL_FORMAT_YUV_SEMIPLANAR_420 = 1, // YUV420SP NV12 8bit
HI_PIXEL_FORMAT_YVU_SEMIPLANAR_420 = 2, // YUV420SP NV21 8bit
HI_PIXEL_FORMAT_YUV_SEMIPLANAR_422 = 3, // YUV422SP NV12 8bit
HI_PIXEL_FORMAT_YVU_SEMIPLANAR_422 = 4, // YUV422SP NV21 8bit
HI_PIXEL_FORMAT_YUV_PACKED_444 = 11, // YUV444P 8bit
HI_PIXEL_FORMAT_RGB_888 = 12, // RGB888
HI_PIXEL_FORMAT_BGR_888 = 13, // BGR888
HI_PIXEL_FORMAT_ARGB_8888 = 14, // ARGB8888
HI_PIXEL_FORMAT_ABGR_8888 = 15, // ABGR8888
HI_PIXEL_FORMAT_RGBA_8888 = 16, // RGBA8888
HI_PIXEL_FORMAT_BGRA_8888 = 17, // BGRA8888
out_width:输出图像宽度。
out_height:输出图像高度。
in_image_file:输入图像文件的路径,包含文件名。
out_image_file:输出图像文件的路径,包含文件名。
thread_num:线程数
queue_len:通道任务队列深度
test_type,该参数表示测试的功能类型,各取值的含义如下:
./vpc_demo --test_type 1 --in_image_file dvpp_vpc_1920x1080_nv12.yuv --out_image_file crop.yuv --img_width 1920 --img_height 1080 --crop_x 0 --crop_y 0 --crop_width 960 --crop_height 540 --out_width 960 --out_height 540 --in_format 1 --out_format 1 --multi_count 1 --queue_len 32
./vpc_demo --test_type 2 --in_image_file dvpp_vpc_1920x1080_nv12.yuv --out_image_file resize.yuv --img_width 1920 --img_height 1080 --out_width 960 --out_height 540 --fx 0 --fy 0 --interpolation 0 --in_format 1 --out_format 1 --queue_len 32
./vpc_demo --test_type 3 --in_image_file dvpp_vpc_1920x1080_nv12.yuv --out_image_file cropResize.yuv --img_width 1920 --img_height 1080--crop_x 0 --crop_y 0 --crop_width 960 --crop_height 540 --resize_width 1920 --resize_height 1080 --interpolation 0 --out_width 1920 --out_height 1080 --in_format 1 --out_format 1 --multi_count 1 --queue_len 32
crop_x:裁剪图片的左偏移。
crop_y:裁剪图片的上偏移。
crop_width:裁剪图片的宽度。
crop_height:裁剪图片的高度。
resize_width:缩放输出宽度。
resize_height:缩放输出高度。
interpolation:缩放算法。
multi_count:剪裁缩放图片数量。支持多张图片。
./vpc_demo --test_type 4 --in_image_file dvpp_vpc_1920x1080_nv12.yuv --out_image_file cropResizePaste.yuv --img_width 1920 --img_height 1080 --out_width 1920 --out_height 1080 --crop_x 0 --crop_y 0 --crop_width 960 --crop_height 540 --resize_width 1280 --resize_height 720 --dest_left_offset 320 --dest_top_offset 320 --interpolation 0 --in_format 1 --out_format 1 --multi_count 1 --queue_len 32
crop_x:裁剪图片的左偏移。
crop_y:裁剪图片的上偏移。
crop_width:裁剪图片的宽度。
crop_height:裁剪图片的高度。
resize_width:缩放输出宽度。
resize_height:缩放输出高度。
interpolation:缩放算法。
dest_left_offset:在目标图片贴图的左上角的x坐标。
dest_top_offset:在目标图片贴图的左上角的y坐标。
multi_count:剪裁缩放图片数量。支持多张图片。
./vpc_demo --test_type 5 --in_image_file dvpp_vpc_1920x1080_nv12.yuv --out_image_file cropResizePadding.yuv --img_width 1920 --img_height 1080 --out_width 1920 --out_height 1080 --crop_x 0 --crop_y 0 --crop_width 1280 --crop_height 720 --resize_width 960 --resize_height 540 --dest_left_offset 320 --dest_top_offset 320 --interpolation 0 --in_format 1 --out_format 1 --padding_val_r 255 --padding_val_g 255 --padding_val_b 255 --padding_mode 0 --multi_count 1 --queue_len 32
crop_x:裁剪图片的左偏移。
crop_y:裁剪图片的上偏移。
crop_width:裁剪图片的宽度。
crop_height:裁剪图片的高度。
resize_width:缩放输出宽度。
resize_height:缩放输出高度。
interpolation:缩放算法。
dest_left_offset:在目标图片贴图的左上角的x坐标。
dest_top_offset:在目标图片贴图的左上角的y坐标。
padding_val_r:填充的像素的r分量。
padding_val_g:填充的像素的g分量。
padding_val_b:填充的像素的b分量。
padding_mode:填充模式。
multi_count:剪裁缩放图片数量。支持多张图片。
./vpc_demo --test_type 6 --in_image_file dvpp_vpc_1920x1080_nv12.yuv --out_image_file cvtColor.bgra --img_width 1920 --img_height 1080 --out_width 1920 --out_height 1080 --in_format 1 --out_format 14 --queue_len 32
./vpc_demo --test_type 7 --in_image_file dvpp_vpc_1920x1080_nv12.yuv --out_image_file padding.yuv --img_width 1920 --img_height 1080 --out_width 1924 --out_height 1084 --in_format 1 --out_format 1 --padding_mode 0 --top_padding_size 2 --bottom_padding_size 2 --left_padding_size 2 --right_padding_size 2 --padding_val_r 255 --padding_val_g 255 --padding_val_b 255 --queue_len 32
padding_mode:填充模式。
top_padding_size:图片上方填充宽度。
bottom_padding_size:图片下方填充宽度。
left_padding_size:图片左边填充宽度。
right_padding_size:图片右边填充宽度。
padding_val_r:填充的像素的r分量。当padding_mode为0时,需要设置该参数。
padding_val_g:填充的像素的g分量。当padding_mode为0时,需要设置该参数。
padding_val_b:填充的像素的b分量。当padding_mode为0时,需要设置该参数。
./vpc_demo --test_type 8 --in_image_file dvpp_vpc_1920x1080_nv12.yuv --out_image_file pyramid.yuv400 --img_width 1920 --img_height 1080 --in_format 0 --filter_level 4 --divisor 256 --pyramid_padding_mode 0 --queue_len 32
./vpc_demo --test_type 9 --in_image_file dvpp_vpc_1920x1080_nv12.yuv --out_image_file histogram --img_width 1920 --img_height 1080 --in_format 1 --queue_len 32
./vpc_demo --test_type 10 --in_image_file dvpp_vpc_1920x1080_nv12.yuv --out_image_file remap.yuv --img_width 1920 --img_height 1080 --in_format 1 --out_format 1 --queue_len 32
./vpc_demo --test_type 11 --in_image_file dvpp_vpc_1920x1080_nv12.yuv --out_image_file batchCropResizePaste.yuv --img_width 1920 --img_height 1080 --out_width 1920 --out_height 1080 --crop_x 0 --crop_y 0 --crop_width 960 --crop_height 540 --resize_width 1280 --resize_height 720 --dest_left_offset 320 --dest_top_offset 320 --interpolation 0 --in_format 1 --out_format 1 --in_image_num 1 --multi_count 2 --queue_len 32
crop_x:裁剪图片的左偏移。
crop_y:裁剪图片的上偏移。
crop_width:裁剪图片的宽度。
crop_height:裁剪图片的高度。
resize_width:缩放输出宽度。
resize_height:缩放输出高度。
interpolation:缩放算法。
dest_left_offset:在目标图片贴图的左上角的x坐标。
dest_top_offset:在目标图片贴图的左上角的y坐标。
in_image_num:输入图片数量。支持多张图片。
multi_count:剪裁缩放图片数量。支持多张图片。
./vpc_demo --test_type 12 --in_image_file dvpp_vpc_1920x1080_nv12.yuv --out_image_file batchCropResizePadding.yuv --img_width 1920 --img_height 1080 --out_width 1920 --out_height 1080 --crop_x 0 --crop_y 0 --crop_width 1280 --crop_height 720 --resize_width 960 --resize_height 540 --dest_left_offset 320 --dest_top_offset 320 --interpolation 0 --in_format 1 --out_format 1 --padding_val_r 255 --padding_val_g 255 --padding_val_b 255 --padding_mode 0 --in_image_num 1 --multi_count 2 --queue_len 32
crop_x:裁剪图片的左偏移。
crop_y:裁剪图片的上偏移。
crop_width:裁剪图片的宽度。
crop_height:裁剪图片的高度。
resize_width:缩放输出宽度。
resize_height:缩放输出高度。
interpolation:缩放算法。
dest_left_offset:在目标图片贴图的左上角的x坐标。
dest_top_offset:在目标图片贴图的左上角的y坐标。
padding_val_r:填充的像素的r分量,或者y分量。若输入输出都是YUV格式,填充YUV分量的值。反之,填充RGB分量的值。
padding_val_g:填充的像素的g分量,或者u分量。
padding_val_b:填充的像素的b分量,或者v分量。
padding_mode:填充模式。
in_image_num:输入图片数量。支持多张图片。
multi_count:剪裁缩放图片数量。支持多张图片。
./vpc_demo --test_type 20 --in_image_file dvpp_vpc_382x300_nv12.yuv --out_image_file 384x300_nv12.yuv --img_width 382 --img_height 300 --in_width_align 1 --in_height_align 1 --out_width_align 16 --out_height_align 2 --in_format 1
示例描述:按用户指定的输出图片的宽对齐、高对齐,输出满足要求的图片。
该示例是通过“vpc_sample/src/common/sample_comm.cpp”中的pre_process函数实现的。在该函数内,宽或高的对齐值的取值范围是(0 , 128],且对齐值必须是2的幂次方。宽stride最小值为32。您可以参考该函数的实现,根据实际场景调整。
pre_process函数的完整入参包括:输入图像的文件路径(inputFileName)、宽(width)、高(height)、宽对齐值(inWidthAlign)、高对齐值(inHeightAlign)、格式(format),以及输出图像的文件路径(outputFileName)、宽对齐值(outWidthAlign)、高对齐值(outHeightAlign)。pre_process函数参数配置说明如下:
pre_process函数的实现逻辑如下;
输入图像:宽382像素、高300像素、格式为yuv420SP NV12的图片,图片名称为dvpp_vpc_382x300_nv12.yuv。
输出图像:宽384像素、高300像素、格式为yuv420SP NV12的图片,图片名称为384x300_nv12.yuv。
参数说明如下:
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。