预置功能单元
ModelBox预置了多个常用功能单元,可用于完成AI应用的基本流程,开发者可以直接使用。
功能单元列表
按业务类型分类,ModelBox主要预置功能单元如下表所示。
业务分类 | 功能单元名称 | 功能单元类型 | 功能简介 |
---|---|---|---|
输入类 | video_input | NORMAL | 获取视频输入地址 |
输入类 | httpserver_async | NORMAL | 收发HTTP异步请求 |
输入类 | httpserver_sync_receive | NORMAL | 接受HTTP同步请求 |
输入类 | data_source_parse | STREAM | 解析数据源,仅对接华为云ModelArts使用 |
输入类 | data_source_generator | NORMAL | 产生数据源,给data_source_parse提供模拟输入,本地调试用 |
输出类 | httpserver_sync_reply | STREAM | 回复HTTP同步请求 |
输出类 | output_broker | STREAM | 将算法处理结果输出到外部 |
视频类 | video_demuxer | STREAM | 视频解封装 |
视频类 | video_decoder | STREAM | 视频解码 |
视频类 | video_encoder | STREAM | 视频编码 |
图像类 | resize | NORMAL | 图像尺寸调整 |
图像类 | padding | NORMAL | 图像填充 |
图像类 | crop | NORMAL | 对图片进行裁剪 |
图像类 | mean | NORMAL | 图像减均值 |
图像类 | normalize | NORMAL | 图像归一化 |
图像类 | image_rotate | NORMAL | 图像旋转 |
图像类 | color_convert | NORMAL | 对图片进行颜色通道转换 |
图像类 | image_decoder | NORMAL | 图像解码 |
图像类 | image_preprocess | NORMAL | 图像尺寸调整 |
图像类 | draw_bbox | NORMAL | 在图像上画框 |
通用类 | buff_meta_mapping | STREAM | 做元数据映射 |
虚拟类 | inference | NORMAL | 模型推理虚拟功能单元模板, 用于创建推理功能单元 |
虚拟类 | yolo_postprocess | NORMAL | yolo后处理模板,用于创建YOLO模型后处理功能单元 |
虚拟类 | input | 不涉及 | 虚拟输入功能单元,用于接受图外部输入 |
虚拟类 | output | 不涉及 | 虚拟输出功能单元,用于数据输出到图外部 |
常用数据类型
ModelBox框架定义了一些通用数据类型,用于规定预置功能单元的输入数据和输出数据格式要求,每一种数据类型规定了该类型的Buffer数据应该携带的Buffer Meta字段信息。
Tensor数据类型
含义:基础数据类型。
Buffer Meta字段信息:
参数名称 | 参数类型 | 参数含义 |
---|---|---|
shape | vector<size_t> | 多维数据的每一维取值 |
type | 可取值:ModelBoxDataType::MODELBOX_UINT8、ModelBoxDataType::MODELBOX_FLOAT | Buffer Data数据类型 |
图片数据类型
含义:描述一张图片的属性,图片数据类型包含Tensor数据类型信息。
Buffer Meta字段信息:
参数名称 | 参数类型 | 参数含义 |
---|---|---|
width | int32_t | 图片宽 |
height | int32_t | 图片高 |
width_stride | int32_t | 对齐后的图片宽,目前仅用于ascend类型Buffer |
height_stride | int32_t | 对齐后的图片高,目前仅用于ascend类型Buffer |
channel | int32_t | 图像通道数 |
pix_fmt | string | 图像格式,取值范围:"rgb"、"bgr"、"nv12"、"rgbp"、"bgrp"、"gray" |
layout | int32_t | 图片布局,取值范围:hwc、hcw |
shape | vector<size_t> | 多维数据的每一维取值 |
type | ModelBoxDataType::MODELBOX_UINT8 | Buffer Data数据类型 |
视频帧数据类型
含义:描述视频解码后的每帧图片的属性,包含视频信息和图片数据类型信息。
Buffer Meta字段信息:
参数名称 | 参数类型 | 参数含义 |
---|---|---|
index | int64_t | 帧编号 |
rate_num | int32_t | 帧率分子,帧率为rate_num/rate_den |
rate_den | int32_t | 帧率分母, 帧率为rate_num/rate_den |
rotate_angle | int32_t | 画面旋转角度 |
duration | int64_t | 视频时长 |
url | int32_t | 视频源路径 |
timestamp | int64_t | 时间戳 |
eos | int32_t | 结束标识 |
width | int32_t | 图片宽 |
height | int32_t | 图片高 |
width_stride | int32_t | 对齐后的图片宽,目前仅用于ascend类型Buffer |
height_stride | int32_t | 对齐后的图片高,目前仅用于ascend类型Buffer |
channel | int32_t | 图像通道数 |
pix_fmt | string | 图像格式,取值范围:"rgb"、"bgr"、"nv12"、"rgbp"、"bgrp"、"gray" |
layout | int32_t | 图片布局,取值范围:hwc、hcw |
shape | vector<size_t> | 多维数据的每一维取值 |
type | ModelBoxDataType::MODELBOX_UINT8 | Buffer Data数据类型 |
视频包数据类型
含义:描述视频解封装后的数据包,用于视频解码。
Buffer Meta字段信息:
参数名称 | 参数类型 | 参数含义 |
---|---|---|
pts | int64_t | 显示时间 |
dts | int64_t | 解码时间 |
rate_num | int32_t | 帧率分子,帧率为rate_num/rate_den |
rate_den | int32_t | 帧率分母, 帧率为rate_num/rate_den |
duration | int64_t | 视频时长 |
time_base | double | 基准时间,单位为秒 |
width | int32_t | 视频宽 |
height | int32_t | 视频高 |
矩形框数据类型
含义:描述矩形区域。
Buffer Meta字段信息:无
Buffer Data信息存放结构如下:
typedef struct RoiBox {
int32_t x, y, w, h;
} ;
检测矩形框类型
含义:描述YOLO检测的结果,包含矩形区域、置信度、分类结果。
Buffer Meta字段信息:无
Buffer Data信息信息存放结构如下。
typedef struct BoundingBox {
public:
float x;
float y;
float w;
float h;
int32_t category;
float score;
};
HTTP请求数据类型
含义:描述HTTP请求数据类型。
Buffer Meta字段信息:
参数名称 | 参数类型 | 参数含义 |
---|---|---|
size | size_t | 请求体数据大小 |
method | string | 请求方法 |
url | string | 请求url |
headers | map |
请求头信息 |
endpoint | string | 请求endpoint |
HTTP请求响应数据类型
含义:描述HTTP请求响应数据类型。
Buffer Meta字段信息:
参数名称 | 参数类型 | 参数含义 |
---|---|---|
status | int32_t | 返回状态码,暂不支持 |
headers | map |
请求头信息,暂不支持 |
查询功能单元命令
开发者可以通过ModelBox Tool命令查询各个功能单元的详细信息,包括功能介绍、cpu/cuda类型、输入要求、输出信息、配置项、约束等。命令如下:
查询当前系统目录下所有可以加载的功能单元列表:
modelbox-tool driver -info -type flowunit
查询单个功能单元详细信息:
modelbox-tool driver -info -type flowunit -detail -name xxx
查询当前系统目录和用户自定义路径下所有可以加载的功能单元列表:
modelbox-tool driver -info -type flowunit -path xxx
命令帮助信息:
modelbox-tool driver
以resize功能单元为例,查询详细结果字段含义如下:
[root@996a6346d170 modelbox]$ modelbox-tool driver -info -type flowunit -detail -name resize
--------------------------------------
flowunit name : resize # flowunit名称
type : cpu # flowunit类型:cpu:普通CPU; cuda:Nvidia GPU; ascend: Ascend D310推理加速卡
driver name : resize # driver名称:C++场景一个driver对应一个so,一个driver可以包含多个flowunit
version : 1.0.0
descryption :
@Brief: A resize flowunit on cpu # flowunit 功能简介
@Port paramter: the input port buffer type and the output port buffer type are image.
The image type buffer contain the following meta fields: # flowunit 输入输出数据格式
Field Name: width, Type: int32_t
Field Name: height, Type: int32_t
Field name: width_stride, Type: int32_t
Field name: height_stride, Type: int32_t
Field name: channel, Type: int32_t
Field name: pix_fmt, Type: string
Field name: layout, Type: int32_t
Field name: shape, Type: vector<size_t>
Field name: type, Type: ModelBoxDataType::MODELBOX_UINT8
@Constraint: the field value range of this flowunit support:'pix_fmt': [rgb_packed,bgr_packed], 'layout': [hwc]. # flowunit 使用约束
group : Image # flowunit 使用约束
inputs : # flowunit 输入端口列表
input index : 1
name : in_image # 输入端口名称
type : # 输入端口类型,预留
device : cpu # 输入端口数据存放设备要求
outputs : # flowunit 输出端口列表
output index : 1
name : out_image # 输出端口名称
device : cpu # 输出端口数据存放位置
options : # flowunit支持的图配置参数
option : 1
name : image_width # 配置参数名称
default : 640 # 配置参数默认值
desc : the resize width # 配置参数含义描述
required : true # 配置参数是否必填
type : int # 配置参数类型
option : 2
name : image_height
default : 480
desc : the resize height
required : true
type : int
option : 3
name : interpolation
default : inter_linear
desc : the resize interpolation method
required : true
type : list # 配置参数枚举类型
inter_area : inter_area # 配置参数枚举含义
inter_cubic : inter_cubic
inter_lanczos4 : inter_lanczos4
inter_linear : inter_linear
inter_max : inter_max
inter_nearest : inter_nearest
warp_fill_outliers : warp_fill_outliers
warp_inverse_map : warp_inverse_map