图形运算加速模块

BMCV提供了一套基于算丰AI芯片优化的机器视觉库,目前可以完成色彩空间变换,尺度变换,仿射变换,线性变换等操作。关于bmcv模块详细内容请阅读BMCV_User_Guide.pdf

​ python接口的实现请参考Sophon_Inference_zh.pdf

​ bmcv api均是围绕bm_image来进行的。一个bm_image结构对应于一张图片。用户通过一系列bm_image_create的API来构建bm_image结构体,然后供各个bmcv的功能函数使用。

1. C语言编程接口

bm_image结构体:

struct bm_image {
    int width;
    int height;
    bm_image_format_ext image_format;
    bm_data_format_ext data_type;
    bm_image_private* image_private;
};

bm_image 结构成员包括图片的宽高,,图片格式,图片数据格式,以及该结构的私有数据。

关于bm_image初始化,我们不建议用户直接填充bm_image结构使用,而是通过以下API来创建/销毁一个bm_image结构

图片格式 image_format枚举类型

typedef enum bm_image_format_ext_{
    FORMAT_YUV420P,
    FORMAT_NV12,
    FORMAT_NV21,
    FORMAT_NV16,
    FORMAT_NV61,
    FORMAT_RGB_PLANAR,
    FORMAT_BGR_PLANAR,
    FORMAT_RGB_PACKED,
    FORMAT_BGR_PACKED,
    FORMAT_GRAY,
    FORMAT_COMPRESSED
}bm_image_format_ext;

格式

说明

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 image_num

    输bm_image数量

    bm_image input

    输入bm_image对象

    bm_image* output

    输出bm_image对象指针

    bmcv_rect_t * crop_rect

    每个输出bm_image对象所对应的在输入图像上crop的参数

    bmcv_resize_algorithm algorithm = BMCV_INTER_LINEAR)

    resize算法选择,默认情况下是双线性差值

  • bmcv_convert_to

    实现图像像素线性变化,具体数据关系可用公式表示

    y=αx+βy= α*x+ β

    参数

    说明

    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。实际要根据推理的输入数据是几通道来进行参数配置。

2. python语言编程接口

本章节只介绍了用例py_ffmpeg_bmcv_sail中用的的接口函数

更多接口定义请查阅Sophon_Inference_zh.pdf

  • init

  • tensor_to_bm_image

  • convert_to

  • vpp_resize

Last updated

Was this helpful?