流程编排介绍
SDK业务流程相关基础单元如图1所示,基础单元的介绍参见表1。
SDK基础概念
通过pipeline配置文件,Stream manager可识别需要构建的Element以及Element之间的连接关系,并启动业务流程。Stream manager对外提供接口,用于向Stream发送数据和获取结果,帮助用户实现业务对接。
Plugin表示业务流程中的基础模块,通过Element的串接构建成一个Stream。Buffer用于内部挂载解码前后的视频、图像数据,是Element之间传递的数据结构,同时也允许用户挂载元数据(Metadata),用于存放结构化数据(如目标检测结果)或过程数据(如缩放后的图像)。
名称 |
类名称 |
说明 |
描述 |
---|---|---|---|
Stream |
MxStream |
业务流 |
完整的推理业务流,由插件串流组成。 |
Stream manager |
MxStreamManager |
业务流管理模块 |
负责创建和销毁Stream,同时提供向其发送数据和获取结果的接口。 |
Plugin |
MxPlugin |
功能插件 |
业务流程中的功能模块,构成业务流的基础单元。 |
Element |
无 |
功能元件 |
由插件so实例化生成的对象,同一个插件so可以实例化多个对象,如图1中两个图像缩放元件。 |
Plugin Buffer |
MxpiBuffer |
插件缓存 |
插件之间传递的数据,其内容为非结构化数据,例如解码前后的视频、图像数据。 |
Plugin Metadata |
MxpiMetadata |
插件元数据 |
插件生成的结构化数据,例如分类信息、目标信息。元数据依附在插件缓存上实现传递。 |
pipeline配置文件介绍
图2为推理业务流pipeline配置文件样例,包括业务流名称、Stream配置、元件名称、插件名称、元件属性、下游元件名称。
配置文件以Json格式编写,用户必须指定业务流名称、元件名称和插件名称,并根据需要,补充元件属性和下游元件名称信息,具体参见表2。
名称 |
是否必选 |
描述 |
---|---|---|
业务流名称(Stream) |
必选 |
用于指定需要操作的Stream实体。 例如Stream manager发送数据时,需要指定Stream名称。 |
Stream配置(Stream_config) |
必选 |
设置Stream的配置参数。 例如Device ID,即指定Stream运行在哪个芯片上。 |
元件名称(Element) |
必选 |
用于构建Stream中的插件实体,即插件的对象。 与“下游元件名称”配合使用,用于定义元件间的连接关系。建议以插件基类名+序号命名,且保证Stream内名称唯一。 |
插件名称(Factory) |
必选 |
用于构建元件。从已有插件介绍中获取。 |
元件属性(Props) |
可选 |
用于根据业务特点修改相应的配置参数。 例如图像缩放插件中,指定输出图像的宽高。具体请参见已有插件介绍,每个属性都有默认值。 |
下游元件名称(Next) |
必选 (除Stream中最后的元件) |
用于根据具体业务,确定下游元件的功能。 本插件产生的数据将传递给下游元件。若存在多个下游插件时,用逗号分隔,冒号后面添加端口号,用中括号包含在一起。 |
下游元数据接收元件名称(NextMeta) |
可选 |
主要针对多输入端口的插件进行设置,确定下游元数据接收元件的功能。 本插件产生的元数据将传递给下游元件,若存在多个下游插件时,用逗号分隔,用中括号包含在一起,可在冒号后面添加端口号用于指定相同下游元件时的输入顺序,若不添加端口号将以默认顺序输入。 |
名称 |
是否必选 |
描述 |
---|---|---|
dataSource |
可选 (建议使用上游的nextMeta属性进行替换。) |
插件process函数处理的数据来源,Stream上游的SDK插件,不支持Gstreamer原生插件。 string类型,默认为“auto”。该值由一个或多个上游插件的nextMeta属性所指定。若上游插件未设置nextMeta到该插件时,该插件输入以该插件的dataSource属性为准,反之以nextMeta为准。 |
status |
可选 |
指定插件为同步或异步执行。int类型,取值范围[0, 1],0为异步,1为同步,默认为0(异步执行),请用户谨慎设置。 |
deviceId |
可选 |
指定插件运行的Device侧芯片ID。int类型,默认为0,请用户根据实际情况设置。 |
公共属性可直接在“props”属性内配置参数。
- 不论属性值的数据类型是否为字符串,属性值都以字符串方式填写。例如"resizeWidth": "2048",而非"resizeWidth": 2048。
- 目前单个Stream只支持在一个昇腾AI处理器(即一个Device)上运行,请通过“Stream_config”指定“deviceId”。
多输入/输出元件的流程编排
当元件包含多个输入端口时,在“next”指定的元件名后增加“:index”(index为端口编号)指定端口,如图5所示。例如“mxpi_parallel2serial0:0”表示元件的输出端口与mxpi_parallel2serial0元件的0号端口连接。
当元件包含多个输出端口时,在“next”对应的value(值)中通过“[]”指定的多个元件,通过“,”区分,如图6所示。
“[]”中指定的元件序号与当前元件的输出端口一一对应,即“[]”中第一个元件与当前元件的第0号端口关联,第二个元件与当前的第1号端口关联,以此类推。