在插件开发的过程中,现有的元数据(metadata)结构可能无法满足实际业务需求,此时,用户可通过MxpiCustomDataList和MxpiCustomData来自定义新的数据结构,其中MxpiCustomData包含map数据类型,可以通过添加(string类型)键值对的方式,添加自定义字段。
如图1所示,自定义插件元数据可参考以下步骤创建和添加,创建的自定义数据列表数据将会通过插件输出。
1
|
std::shared_ptr<MxTools::MxpiCustomDataList> myDataList = std::make_shared<MxTools::MxpiCustomDataList>(); |
1
|
MxTools::MxpiCustomData* arrayData = myDataList->add_datavec(); |
1
|
(*arrayData->mutable_map())["myKey"] = "myValue" ; |
由于map的key与value只支持string类型。若数据不为string,则需要自行将数据序列化为string类型后,再添加数据。
如图2所示,下游插件可参考以下步骤对上游插件传递的自定义插件元数据进行读取,用户可对获取的数据进行业务处理。
1 2 |
auto metadata = mxpiMetadataManager.GetMetadataWithType("mxpi_CustomPlugin0", "MxpiCustomDataList"); auto tmpDataList = std::static_pointer_cast<MxpiCustomDataList>(metadata); |
1 2 |
auto messageData = tmpDataList->datavec(0); auto data = (*(messageData.mutable_map()))["myKey"]; // myValue |
此时获取到的value值为string类型,用户需注意根据其对应的原始数据类型,对数据进行反序列化操作,还原为原始数据类型,再进行后续业务处理。