文档
注册

数据流程介绍

为了方便用户理解数据结构在插件间传递的过程,下面以一张图片作为输入,结合代码详细阐述这一数据传递过程,其中用到的数据结构和函数声明参见API参考(C++)

图1 数据结构传递流程图
  1. 新建一个存储输入图片的MxstDataInput变量,并通过ReadFile函数读取图片数据到dataBuffer变量。
    MxStream::MxstDataInput dataBuffer;
    APP_ERROR ret = ReadFile("./test.jpg", dataBuffer);
  2. 新建一个流管理的MxStreamManager对象并初始化,然后加载pipeline文件。
    MxStreamManager *mxStreamManager = new MxStream::MxStreamManager();
    ret = mxStreamManager->InitManager();
    string streamsConfig = "detection.pipeline"; //detection.pipeline文件中可以有一个或多个业务流
    APP_ERROR ret = mxStreamManager->CreateMultipleStreams(streamsConfig); //统一按照处理多个业务流的方式处理
  3. 通过SendData函数传递输入数据到“图片获取”模块。
    ret = mxStreamManager->SendData(streamName, inPluginId, dataBuffer); //streamName是pipeline文件中业务流的名称;inPluginId为输入端口编号,对应输入元件的编号
  4. 在各个插件的Process函数中处理数据流程。
    1. 接受上一个插件的buffer数据及挂载在buffer上的metadata数据。
      MxpiFrame inputMxpiFrame = GetHostDataInfo(*mxpiBuffer); //若数据在Device侧,则调用GetDeviceDataInfo函数
      MxpiMetadataManager mxpiMetadataManager(*mxpiBuffer); //新建一个Metadata管理器对象
      shared_ptr<void> metadata = mxpiMetadataManager.GetMetadata("keyName"); //根据key名称拿到挂载在buffer上的metadata数据,keyName通常为上一个插件的插件名
    2. 业务逻辑处理。
      DataProcess(inputMxpiFrame, metadata, outputMetadata); //插件内部实现的数据处理功能,如:解码,缩放,推理等
      mxpiMetadataManager.AddMetadata("pluginName", outputMetadata); //挂载outputMetadata数据到buffer上,keyName通常为当前插件的插件名pluginName
    3. 发送buffer数据到下一个插件。
      SendData(inPlugin, *mxpiBuffer); //调用MxPluginBase的SendData方法将数据发送到下一个插件
  5. 通过GetResult函数获取最后一个插件的输出结果。
    MxStream::MxstDataOutput* output = mxStreamManager->GetResult(streamName, outPluginId); //outPluginId为输出端口编号,对应输出元件的编号。
搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词