6.5. 图形运算加速模块
BMCV提供了一套基于算丰深度学习处理器优化的机器视觉库,目前可以完成色彩空间转换、尺度变换、仿射变换、投射变换、线性变换、画框、JPEG编码、BASE64编码、NMS、排序、特征匹配等操作。
C++接口实现请参考《算能边缘产品BMCV开发参考指南》。
Python接口的实现请参考《sophon-sail_zh》。
BMCV API均是围绕bm_image来进行的。一个bm_image结构对应于一张图片。
6.5.1. C++语言编程接口
bm_image结构体
1struct bm_image {
2 int width;
3 int height;
4 bm_image_format_ext image_format;
5 bm_data_format_ext data_type;
6 bm_image_private* image_private;
7};
bm_image 结构成员包括图片的宽高,图片格式,图片数据格式,以及该结构的私有数据。
图片格式 image_format枚举类型
1typedef enum bm_image_format_ext_{
2 FORMAT_YUV420P,
3 FORMAT_NV12,
4 FORMAT_NV21,
5 FORMAT_NV16,
6 FORMAT_NV61,
7 FORMAT_RGB_PLANAR,
8 FORMAT_BGR_PLANAR,
9 FORMAT_RGB_PACKED,
10 FORMAT_BGR_PACKED,
11 FORMAT_GRAY,
12 FORMAT_COMPRESSED
13}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 |
数据存储格式枚举
1typedef enum bm_image_data_format_ext_{
2 DATA_TYPE_EXT_FLOAT32,
3 DATA_TYPE_EXT_1N_BYTE,
4 DATA_TYPE_EXT_4N_BYTE,
5 DATA_TYPE_EXT_1N_BYTE_SIGNED,
6 DATA_TYPE_EXT_4N_BYTE_SIGNED,
7}bm_image_data_format_ext;
数据格式 |
说明 |
|---|---|
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图片数据交错排列 |
更多BMCV接口使用方法请参考《算能边缘产品BMCV开发参考指南》
6.5.2. Python语言编程接口
本章节只简要介绍了用例 YOLOv5 所用到的接口函数。
更多接口定义请查阅《 sophon-sail_zh 》。
init
1def __init__(handle):
2""" Constructor.
3Parameters
4---------
5handle : sail.Handle Handle instance
6"""
convert_to
1def convert_to(input, alpha_beta):
2""" Applies a linear transformation to an image.
3Parameters
4---------
5input : sail.BMImage Input image
6alpha_beta: tuple (a0, b0), (a1, b1), (a2, b2) factors
7Returns
8---------
9output : sail.BMImage Output image
10"""
convert_format
1def convert_format(input, output):
2"""Convert input to output format.
3
4Parameters
5----------
6input : sail.BMImage
7 BMimage instance
8output : sail.BMImage
9 output image
10"""
vpp_crop_and_resize_padding
1def vpp_crop_and_resize_padding(input, crop_x0, crop_y0, crop_w, crop_h, resize_w, resize_h, padding):
2""" Crop then resize an image using vpp.
3
4Parameters
5----------
6input : sail.BMImage
7 Input image
8crop_x0 : int
9 Start point x of the crop window
10crop_y0 : int
11 Start point y of the crop window
12crop_w : int
13 Width of the crop window
14crop_h : int
15 Height of the crop window
16resize_w : int
17 Target width
18resize_h : int
19 Target height
20padding : PaddingAtrr
21 padding info
22
23Returns
24----------
25output : sail.BMImage
26 Output image
27"""