串流插件

mxpi_parallel2serial

功能描述

多个端口输入数据通过一个端口按顺序输出。

约束限制

同步/异步(status)

支持同步和异步。

插件基类(factory)

mxpi_parallel2serial

输入和输出

  • 动态输入:buffer(数据类型“MxpiBuffer”)、metadata。
  • 静态输出:buffer(数据类型“MxpiBuffer”)、metadata。

属性

请参见表1

表 1 mxpi_parallel2serial插件的属性

属性名 描述 是否为必填项 是否可修改
dataSource 输入数据对应索引(通常情况下为上游元件名称),可以配置多个,以逗号隔开。
removeParentData 删除原Buffer数据,默认为0。0:不删除原Buffer数据。1:删除原Buffer数据。
status 串行化插件的工作模式。0:异步(默认)。异步模式下,各路buffer到达后直接发送。1:同步。同步模式下,需全部输入的buffer都到齐后再一起发送(按端口顺序)。

示例

  • 配置dataSource属性,串行化插件会挂载元数据,并将数据按照接收的顺序发送给下游插件。

    假定串行化插件mxpi_parallel2serial0接收数据的顺序为demoA0,demoA1。

    1. 串行化插件将以demoA0为key在demoA0传递的buffer上获取元数据。
    2. 以mxpi_parallel2serial0为key挂载上一步骤中获取的元数据。
    3. 将buffer发送给下游插件demoB。
    4. demoA1数据重复以上步骤进行处理。
  • 不配置dataSource属性,串行化插件仅会将数据按照接收的顺序发送给下游插件。

    假定串行化插件mxpi_parallel2serial0接收数据的顺序为demoA0,demoA1,串行化插件将demoA0,demoA1获取到的buffer,依次发送给下游插件demoB。

mxpi_distributor

功能描述

向不同端口发送指定类别或通道的数据。用户可通过在配置文件中填写类别索引或通道索引,来选择发送需要输出的结果。

同步/异步(status)

异步

约束限制

目前只支持根据channel id或class id进行分发。

插件基类(factory)

mxpi_distributor

输入和输出

  • 静态输入:buffer(数据类型“MxpiBuffer”)、metadata(数据类型“MxpiObjectList”或“MxpiClassList”或“MxpiObject”或“MxpiClass”)。
  • 动态输出:buffer(数据类型“MxpiBuffer”)、metadata(数据类型“MxpiObjectList”或“MxpiClassList”或“MxpiObject”或“MxpiClass”)。

属性

请参见表1

表 1 mxpi_distributor插件的属性

属性名 描述 是否为必填项 是否可修改
dataSource 输入数据对应索引,默认值为上游插件对应输出端口的元数据key。
classIds 指定需要输出的类别索引,以逗号隔开。此插件根据用户配置的类别,将不同类别的目标进行重组,以类别顺序通过不同输出端口分发给下游插件。下游插件依次通过目标分发插件名_id作为key来获取元数据(id为目标分发插件的输出端口号,从0开始,依次递增1)。
distributeAll 当某个端口没有目标数据时,是否往下发数据。支持配置yes,no两种方式,默认值为no。 否根据class id分发进行配合使用。
channelIds 指定需要输出的通道索引,以逗号隔开。此插件根据用户配置的通道,buffer以通道索引的顺序通过不同输出端口分发给下游插件。

Note

  • mxpi_distributor插件一般与queue插件配合使用,即mxpi_distributor插件的每个输出端口连接queue插件。
  • 当根据channel id来进行分发时,必须配置channelIds属性。当根据class id来进行分发时,必须配置classIds和dataSource属性。
  • 分发插件支持每个输出端口包含多种类别(或通道)的数据,每个输出端口中的索引采用竖线(|)进行区分。具体可参考示例

示例

  • 只配置classIds属性和dataSource属性,分发插件将按照目标索引(class id)的顺序,依次向下游插件发送带有该类别元数据的buffer。

    假定分发插件mxpi_distributor0接收到demoA插件的buffer,然后将以demoA作为key获取元数据,将元数据按照类别进行重组。

    • 以mxpi_distributor0_0为key挂载类别为45的元数据,并将buffer发送给demoA0插件。
    • 以mxpi_distributor0_1为key挂载类别为6的元数据,并将buffer发送给demoA1插件。
    • 以mxpi_distributor0_2为key挂载类别为7的元数据,并将buffer发送给demoA2插件。
  • 只配置channelIds属性,分发插件将按照通道标识(channel id)的顺序,依次向下游插件发送buffer。

    假定分发插件mxpi_distributor0接收到demoA插件的buffer。

    • 将通道索引为12的buffer发送给demoA0插件。
    • 将通道索引为3的buffer发送给demoA1插件。
    • 将通道索引为4的buffer发送给demoA2插件。

mxpi_synchronize

功能描述

等待所有输入端口都有数据后才往输出端口推送数据。

同步/异步(status)

同步

约束限制

插件基类(factory)

mxpi_synchronize

输入和输出

  • 动态输入:buffer(数据类型“MxpiBuffer”)。
  • 静态输出:buffer(数据类型“MxpiBuffer”)。

属性

表 1 mxpi_synchronize插件的属性

属性名 描述 是否为必填项 是否可修改
config 默认配置参数

示例

输入的buffer为相同时(元数据无影响),等待所有输入端口接收到数据,然后向下游插件发送数据。

假定同步等待插件mxpi_synchronize0接收数据的顺序为demoA0,demoA0,demoA1,demoA0,demoA0...,那么同步等待插件将在接收到第三个数据demoA1时,此时所有端口才都有数据,才会向下游插件demoB发送buffer。

queue

功能描述

GStreamer原生插件。在此插件输出时为后续处理过程另创建一个线程,用于将输入数据与输出数据解耦,并创建缓存队列,存储尚未输出到下游插件的数据。

约束限制

默认的缓存队列数据存储上限需低于200个Buffer且低于10MB大小,存储时限为1秒。

插件基类(factory)

queue

输入和输出

  • 输入:buffer、metadata。
  • 输出:buffer、metadata。

属性

请参见表1

表 1 queue插件的属性

属性名 描述 是否为必选项 是否可修改
current-level-buffers 当前队列中的Buffer数量,默认为0。
current-level-bytes 当前队列中的总数据,默认为0。
current-level-time 当前队列中的总数据(以ns为单位),默认为0。
flush-on-eos 收到EOS事件时,丢弃所有数据,或立即将EOS事件继续传送,默认为false。
leaky queue的泄露位置,默认为不泄露(0),可选值{0,1,2},1为新数据泄漏,2为老数据泄漏。
max-size-buffers 队列中的最大Buffer数,默认为200。
max-size-bytes 队列中的最大数据量,默认为10485760。
max-size-time 队列中的最大数据量(以ns为单位),默认为1000000000。
min-threshold-buffers 队列中允许读取的最小Buffer数,默认为0。
min-threshold-bytes 队列中允许读取的最小数据量,默认为0。
min-threshold-time 队列中允许读取的最小数据量(以ns为单位),默认为0。
silent 不释放queue信号,默认为false。

tee

功能描述

GStreamer原生插件,对单个输入数据分发多次。

约束限制

插件基类(factory)

tee

输入和输出

  • 输入:buffer、metadata。
  • 输出:buffer、metadata。

属性

请参见表1

Note

  • tee插件一般与queue插件配合使用,即tee插件的每个输出端口连接queue插件。
  • tee插件通过浅拷贝对同一个buffer进行多路分发,需要保证该buffer经过多分支处理后,能在同一个appsink端口输出,以防出现coredump问题。

表 1 tee插件的属性

属性名 描述 是否为必选项 是否可修改
allow-not-linked 允许输出端口不被连接,默认为false。
has-chain 是否使用push模式,默认为true。
last-message 描述当前状态的信息,默认为Null。
num-src-pads srcpad的数量。
pull-mode pull模式下的行为,默认为0。
silent 不生成last-message事件,默认为true。

mxpi_datatransfer

功能描述

在Device(内存)和Host(CPU内存)之间转移内存数据。

同步/异步(status)

异步

约束限制

仅支持MxpiVisionList和MxpiTensorPackageList两种数据格式。

插件基类(factory)

mxpi_datatransfer

输入和输出

  • 静态输入:metadata(数据类型“MxpiVisionList”和“MxpiTensorPackageList”)。
  • 静态输出:metadata(数据类型“MxpiVisionList”和“MxpiTensorPackageList”)。

属性

请参见表1

表 1 mxpi_datatransfer插件的属性

属性名 描述 是否为必填项 是否可修改
dataSource 输入数据对应索引(通常情况下为上游元件名称),可以配置多个,以逗号隔开。默认值为上游插件对应输出端口的元数据key。
transferMode 设置数据转移模式:auto:默认值,自动模式,自动将内存搬移到另外一种内存中。d2h:device2host,将Device内存搬移到Host。h2d:host2device,将Host内存搬移到Device。
removeSourceData 是否清除输入数据的内存:yes:默认值,删除数据。no:保留数据。

Note

默认情况下,该插件只能用于单分支Stream的业务,否则可能导致其他分支数据处理异常。如需在多分支Stream场景,请将“removeSourceData”设置为“no”。

示例

通常情况下,外部数据发送到Stream中或者Stream的数据往外发送时需要用该插件。

如上图所示,以缩放图像数据为例。用户可以将解码后的数据(Host内存)发送给Stream,通过该插件就可以将数据转移到Device侧,缩放插件正常运行,输出结果经过该插件转移后缩放后图像数据被转移至Host,用户获取到该数据就可以在Host侧正常访问。如图所示的案例中,发送数据和接收结果需要用“SendProtobuf()”和“GetProtobuf()”接口实现,具体请参见图 SendProtobuf/GetProtobuf数据流图

mxpi_nmsoverlapedroiV2

功能描述

用于过滤分块后重叠区域重复目标。相比较前一个版本的差别为:
  • V2版本对插件的输入端口做了调整由单输入改成双输入。
  • 对部分属性名进行规范整改,将原来的dataSource改成dataSourceDetection,blockName改成dataSourceBlock,并且dataSourceDetection和dataSourceBlock可自动配置。

约束限制

端口0输入分块信息数据,端口1输入检测出来的目标框数据。

插件基类(factory)

mxpi_nmsoverlapedroiV2

输入和输出

  • 输入:metadata(数据类型“MxpiObjectList”)。
  • 输出:metadata(数据类型“MxpiObjectList”)。

端口格式(caps)

  • 静态输入:{"metadata/object"}。
  • 静态输出:{"metadata/object"}。

属性

请参见表1

表 1 mxpi_nmsoverlapedroiV2插件的属性

属性名 描述 是否为必选项 是否可修改
dataSourceDetection 获取目标检测后物体bounding box(框信息)的索引(默认为上游插件对应输出端口的key值)。
dataSourceBlock 获取背景划分块的bounding box(分块框信息)的索引(默认为上游插件对应输出端口的key值)。
nmsThreshold 设置NMS计算阈值,默认值0.45,取值范围[0, 1]。

mxpi_roigenerator

[!NOTICE] 当分块个数过多时,可能导致输入数据过大,无法申请内存。

功能描述

支持用户输入分块的个数、大小、overlap等参数,自动生成图像分块的目标框。

同步/异步(status)

异步

约束限制

分块个数最大支持256个。

插件基类(factory)

mxpi_roigenerator

输入和输出

  • 输入:解码后的图片,buffer(数据类型“MxpiBuffer”)。
  • 输出:
    • 端口一:图像分块区域,metadata(数据类型MxpiObjectList)。
    • 端口二(可选):图像合并的目标框,metadata(数据类型MxpiObjectList),该端口接图像合并插件(mxpi_semanticsegstitcher)。

端口格式(caps)

  • 静态输入:{"metadata/yuv"}。
  • 静态输出:{"metadata/object"}。
  • 动态输出:{"metadata/object/roi-info"}。

属性

请参见表mxpi_roigenerator插件的属性

表 1 mxpi_roigenerator插件的属性

属性名 描述 是否为必选项 是否可修改
splitType 设置分块的方式,支持Size_Block,Num_Block,Custom三个可选参数,默认值为Size_Block。Size_Block:通过分块大小对图像进行分割。Num_Block:通过设置分块个数对图像进行分割。Custom:用户自定义图像分块区间以及合并区间。
blockHeight 当splitType为Size_Block时使用,设置分块图像的高,取值范围32~8192,默认值为512。
blockWidth 当splitType为Size_Block时使用,设置分块图像的宽,取值范围32~8192,默认值为512。
chessboardHeight 当splitType为Num_Block时使用,设置分块y轴方向块的个数,取值范围1~256,默认值为1。
chessboardWidth 当splitType为Num_Block时使用,设置分块x轴方向的个数,取值范围1~256,默认值为1。
overlapHeight 设置分块之间重叠区域,设置y轴方向上的重叠区域,取值范围0~8192,默认值为0。
overlapWidth 设置分块之间重叠区域,设置x轴方向上的重叠区域,取值范围0~8192,默认值为0。
cropRoi 当splitType为Custom时使用,用户自定义分块的坐标框(x0,y0,x1,y1)。每个坐标框以“ ”间隔。使用示例:“0,0,512,512 512,0,1024,512”。
mergeRoi 当splitType为Custom时使用,用户自定义每个分块合并的区间,使用绝对坐标,需要与cropRoi对应,使用示例:“20,20,400,400 530,20,800,400”。

图 1 参数示意图

mxpi_semanticsegstitcher

功能描述

对语义分割推理结果的图像进行合并。

同步/异步(status)

同步

约束限制

需要与mxpi_roigenerator插件配套使用。

插件基类(factory)

mxpi_semanticsegstitcher

输入和输出

  • 输入:三个输入端口。
    • 端口一:接收语义分割模型的推理结果,metadata(数据类型MxpiImageMaskList)。
    • 端口二:接收mxpi_roigenerator分块时生成的分块目标框数据,metadata(数据类型MxpiObjectList)。
    • 端口三:接收mxpi_roigenerator生成的图像合并的目标区域,metadata(数据类型MxpiObjectList)。
  • 输出:metadata(数据类型“MxpiImageMaskList”)。

端口格式(caps)

  • 静态输入:
    • 端口一:{"metadata/semanticseg"}。
    • 端口二:{"metadata/object"}。
    • 端口三:{"metadata/object/roi-info"}。
  • 静态输出:{"metadata/semanticseg"}。

属性

请参见表mxpi_semanticsegstitcher插件的属性

表 1 mxpi_semanticsegstitcher插件的属性

属性名 描述 是否为必选项 是否可修改
dataSourceSemanticSeg 语义分割模型推理结果对应的索引,默认情况下可通过插件连接情况自动获得。
dataSourceCropRoi 分块目标框数据对应的索引,默认情况下可通过插件连接情况自动获得。
dataSourceMergeRoi 图像合并的目标区域,默认情况下可通过插件连接情况自动获得。

图 1 典型应用流程图

mxpi_objectselector

功能描述

用于多级推理时,根据面积最大最小、面积上下限、置信度阈值对后处理结果进行选择过滤。

约束限制

接收后处理插件mxpi_objectportprocessors输出的目标框数据。

插件基类(factory)

mxpi_objectselector

输入和输出

  • 输入:metadata(数据类型“MxpiObjectList”)。
  • 输出:metadata(数据类型“MxpiObjectList”)。

端口格式(caps)

  • 静态输入:{"metadata/object"}。
  • 静态输出:{"metadata/object"}。

属性

请参见表1

Note

  • 参数均需要赋值,当都配置为0时,默认不进行过滤。
  • 目标框面积需要同时满足:MinArea < 目标框面积 < MaxArea。
  • 过滤顺序是先对目标框进行面积上下限、置信度过滤,然后从过滤后剩下的目标框中选择最大或最小的N个目标框,不能同时选择最大最小。

表 1 mxpi_objectselector插件的属性

属性名 描述 是否为必选项 是否可修改
dataSource 输入数据对应索引(通常情况下为上游元件名称),可以配置多个,以逗号隔开。默认值为上游插件对应输出端口的元数据key。
FirstDetectionFilter 设置目标框选择条件,格式为map,字段释义如下:Type:Area目前只支持面积选择。TopN:选择最大的N个目标框,为0时关闭选择。BottomN:选择最小的N个目标框,为0时关闭选择。MinArea:目标框面积下限,为0时关闭选择。MaxArea:目标框面积上限,为0时关闭选择。ConfThresh:目标框置信度大于该阈值,保留目标框,默认值为0。

mxpi_skipframe

功能描述

对数据进行跳帧。

同步/异步(status)

异步

约束限制

插件基类(factory)

mxpi_skipframe

输入和输出

  • 输入:buffer(数据类型“MxpiBuffer”)。
  • 输出:buffer(数据类型“MxpiBuffer”)。

端口格式(caps)

  • 静态输入:{“ANY”}。
  • 静态输出:{“ANY”}。

属性

请参见表1

表 1 mxpi_skipframe插件的属性

属性名 描述 是否为必选项 是否可修改
frameNum 跳过的帧数,取值范围为[0, 100]。默认值为0。