4.5 图形运算加速模块
BMCV提供了一套基于算丰AI芯片优化的机器视觉库,目前可以完成色彩空间转换、尺度变换、仿射变换、投射变换、线性变换、画框、JPEG编码、BASE64编码、NMS、排序、特征匹配等操作。关于BMCV模块详细内容请阅读《BMCV用户开发手册》。
Python接口的实现请参考《SAIL用户开发手册》。
BMCV API均是围绕bm_image来进行的。一个bm_image结构对应于一张图片。
4.5.1 C语言编程接口
bm_image结构体
bm_image 结构成员包括图片的宽高,图片格式,图片数据格式,以及该结构的私有数据。
关于bm_image初始化,我们不建议用户直接填充bm_image结构使用,而是通过以下API来创建/销毁一个bm_image结构
图片格式 image_format枚举类型
格式 | 说明 |
FORMAT_YUV420P | 表示预创建一个YUV420格式的图片,有三个plane |
FORMAT_NV12 | 表示预创建一个NV12格式的图片,有两个plane |
FORMAT_NV21 | 表示预创建一个NV21格式的图片,有两个plane |
FORMAT_RGB_PLANAR | 表示预创建一个RGB格式的图片,RGB分开排列,有一个plane |
FORMAT_BGR_PLANAR | 表示预创建一个BGR格式的图片,BGR分开排列,有一个plane |
FORMAT_RGB_PACKED | 表示预创建一个RGB格式的图片,RGB交错排列,有一个plane |
FORMAT_BGR_PACKED | 表示预创建一个BGR格式的图片,BGR交错排列,有一个plane |
FORMAT_GRAY | 表示预创建一个灰度图格式的图片,有一个plane |
FORMAT_COMPRESSED | 表示预创建一个VPU内部压缩格式的图片,有四个plane |
数据存储格式枚举
数据格式 | 说明 |
DATA_TYPE_EXT_FLOAT32 | 表示所创建的图片数据格式为单精度浮点数 |
DATA_TYPE_EXT_1N_BYTE | 表示所创建图片数据格式为普通带符号1N INT8 |
DATA_TYPE_EXT_4N_BYTE | 表示所创建图片数据格式为4N INT8,即四张带符号INT8图片数据交错排列 |
DATA_TYPE_EXT_1N_BYTE_SIGNED | 表示所创建图片数据格式为普通无符号1N UINT8 |
DATA_TYPE_EXT_4N_BYTE | 表示所创建图片数据格式为4N UINT8,即四张无符号INT8图片数据交错排列 |
关于bm_image初始化,我们不建议用户直接填充bm_image结构使用,而是通过以下API来创建/销毁一个bm_image结构
bm_image_create_batch
创建物理内存连续的多个bm image。
bm_image_destroy_batch
释放物理内存连续的多个bm image。要和bm_image_create_batch接口成对使用。
bm_image_alloc_contiguous_mem
为多个 image 分配连续的内存
参数 | 说明 |
int image_num | 待分配内存的 image 个数 |
bm_image *images | 待分配内存的 image 的指针 |
int bmcv_image_usage | 已经为客户默认设置了参数,(如果客户对于所分配内存位置有要求,可以通过该参数进行制定) |
bm_image_free_contiguous_mem
释放通过bm_image_alloc_contiguous_mem申请的内存
参数 | 说明 |
int image_num | 待分配内存的 image 个数 |
bm_image *images | 待分配内存的 image 的指针 |
bmcv_image_vpp_convert
bm1684上有专门的视频后处理硬件,满足一定条件下可以一次实现csc + crop + resize功能,速度比TPU更快。
该API将输入图像格式转化为输出图像格式,并支持crop + resize功能, 支持从1张输入中crop多张输出并resize到输出图片大小。
参数 | 说明 |
bm_handle_t handle | 设备环境句柄,通过调用bm_dev_request获取 |
int output_num | 输出 bm_image 数量,和src image的crop 数量相等,一个src crop 输出一个dst bm_image |
bm_image input | 输入bm_image对象 |
bm_image* output | 输出bm_image对象指针 |
bmcv_rect_t * crop_rect | 每个输出bm_image对象所对应的在输入图像上crop的参数,包括起始点x坐标、起始点y坐标、crop图像的宽度以及crop图像的高度,具体请查看BMCV用户开发手册 |
bmcv_resize_algorithm algorithm = BMCV_INTER_LINEAR) | resize算法选择,包括 BMCV_INTER_NEAREST 和 BMCV_INTER_LINEAR 两种,默认情况下是双线性差值 |
bmcv_convert_to
实现图像像素线性变化,具体数据关系可用公式表示
参数 | 说明 |
bm_handle_thandle | 输入的bm_handle句柄 |
int input_num | 输入图片数。最多支持4 |
bmcv_convert_to_attr convert_to_attr | 每张图片对应的配置参数 |
bm_image* input | 输入bm_image。每个bm_image外部需要调用bmcv_image_create创建。image内存可以使用bmcv_image_dev_mem_alloc或者bmcv_image_copy_to_device来开辟新的内存,或者使用bmcv_image_attach来attach已有的内存。 |
bm_image*output | 输出bm_image。每个bm_image外部需要调用bmcv_image_create创建。image内存可以通过bmcv_image_dev_mem_alloc来开辟新的内存,或者使用bmcv_image_attach来attach已有的内存。如果不主动分配将在api内部进行自行分配 |
结构体bmcv_convert_to_attr_s
参数 | 说明 |
alpha_0 | 描述了第0个channel进行线性变换的系数 |
beta_0 | 描述了第0个channel进行线性变换的偏移 |
alpha_1 | 描述了第1个channel进行线性变换的系数 |
beta_1 | 描述了第1个channel进行线性变换的偏移 |
alpha_2 | 描述了第2个channel进行线性变换的系数 |
beta_2 | 描述了第2个channel进行线性变换的偏移 |
结构体描述了三通道中的alpha和beta。实际要根据推理的输入数据是几通道来进行参数配置。
4.5.2 Python语言编程接口
本章节只介绍了用例py_ffmpeg_bmcv_sail中用的的接口函数
更多接口定义请查阅《SAIL用户开发手册》。
init
tensor_to_bm_image
convert_to
vpp_resize
最后更新于