下载
中文
注册

自定义插件元数据

在插件开发的过程中,现有的元数据(metadata)结构可能无法满足实际业务需求,此时,用户可通过MxpiCustomDataList和MxpiCustomData来自定义新的数据结构,其中MxpiCustomData包含map数据类型,可以通过添加(string类型)键值对的方式,添加自定义字段。

创建自定义插件元数据

图1 创建流程

图1所示,自定义插件元数据可参考以下步骤创建和添加,创建的自定义数据列表数据将会通过插件输出。

  1. 创建自定义数据列表,参考示例如下(以创建myDataList为例)。
    std::shared_ptr<MxTools::MxpiCustomDataList> myDataList = std::make_shared<MxTools::MxpiCustomDataList>();
  2. 在自定义数据列表中添加自定义数据,参考示例如下。(其中,add_datavec函数由protocol buffer编译生成。)
    MxTools::MxpiCustomData* arrayData = myDataList->add_datavec();
  3. 通过mutable_map添加map键值对,参考示例如下。(其中,mutable_map函数由protobuf buffer编译生成。)
    (*arrayData->mutable_map())["myKey"] = "myValue" ;

    由于map的key与value只支持string类型。若数据不为string,则需要自行将数据序列化为string类型后,再添加数据。

读取自定义插件元数据

图2 读取流程

图2所示,下游插件可参考以下步骤对上游插件传递的自定义插件元数据进行读取,用户可对获取的数据进行业务处理。

  1. 从上游插件中获取metadata并转换成MxpiCustomDataList类型,参考示例如下。
    auto metadata = mxpiMetadataManager.GetMetadataWithType("mxpi_CustomPlugin0", "MxpiCustomDataList");
    auto tmpDataList = std::static_pointer_cast<MxpiCustomDataList>(metadata);
  2. 读取list中的元素,根据对应的key,获取value值,参考示例如下(以获取第一个元素值为例)。
    auto messageData = tmpDataList->datavec(0);
    auto data = (*(messageData.mutable_map()))["myKey"]; // myValue

    此时获取到的value值为string类型,用户需注意根据其对应的原始数据类型,对数据进行反序列化操作,还原为原始数据类型,再进行后续业务处理。