1 Star 0 Fork 184

刘揽玺 / mindxsdk-referenceapps

forked from Ascend / mindxsdk-referenceapps 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
4-1插件开发调试指导.md 5.00 KB
一键复制 编辑 原始数据 按行查看 历史
Zdingwen 提交于 2021-07-30 15:30 . 添加4-4tensor解析和插件后处理

插件开发调试指导

本章节将指导在SDK自带的图像分类识别样例中添加一个自定义插件并在IDE中单步调试的流程。
在执行本样例前,应已成功远程部署并运行SDK自带的图像分类识别样例。
点击跳转代码样例

插件逻辑

image.png

在本样例中,新构建的插件:

  1. 从传入的MxpiBuffer中提取Metadata

此时数据控制权转移到本插件

  1. 从Metadata里复制一份MxpiObjectList中包含的MxpiClassList
  2. 在其中添加一自定义classname
  3. 回写至Metadata
  4. 将修改后的MxpiBuffer送入steam中

此时数据不再被本插件控制,且离开本插件进入下一插件

项目准备

步骤1 准备相关工程文件 在clion中创建新工程,该工程应该为样例的顶级目录(本样例中使用mxVision,mxManufacture替换对应名称即可,样例代码通用)

指定对应的远程开发目录
image.png 删除工程自带的main.cpp文件,并将已经之前成功部署并运行SDK自带的图像分类识别样例的文件夹下载至本地。

注意 model目录下需包含yolov3和resnet50模型文件

该步骤完成后的目录结构如下:
image.png

步骤2 测试图像分类识别样例
添加环境变量
image.png image.png 修改顶层目录的cmakelist.txt,参考如下:

cmake_minimum_required(VERSION 3.6)
project(plugin_sample)

#该语句中%MX_SDK_HOME%根据实际SDK安装位置修改,可通过在终端运行env命令查看
set(ENV{MX_SDK_HOME} %MX_SDK_HOME%)

add_subdirectory(./mxVision/C++)
add_subdirectory(./mindx_sdk_plugin)

随后加载该文件并build样例项目,并运行默认的图像分类识别样例
image.png
正确时应该终端可输出识别到的图片内容
image.png

若出现类似[MpModelVisionInfer.cpp:731] [mxpi_modelinfer1][1016][Object, file or other resource doesn't exist] The postprocessing DLL [../../../lib/libresnet50postprocessor.so] does not exist.的报错,请检查对应Sample.pipeline文件中postProcessLibPath项是否包含相对路径
image.png
尝试去掉或更改为绝对路径后再运行
image.png

步骤3 编译自定义插件 切换至插件并编译
image.png

成功后生成so文件/mindx_sdk_plugin/lib/plugins/libmxpi_sampleplugin.so,也可通过IDE操作下载到本地方便查看
image.png
目录结构为
image.png

步骤4 运行带自定义插件的样例 修改上一步骤样例中main.cpp里94行中使用的pipeline文件路径,使其加载包含自定义插件的SamplePlugin.pipeline
image.png
添加插件目录到GST_PLUGIN_PATH环境变量中
image.png

正确时终端输出信息应该包含该字段
image.png

若出现类似[MpModelVisionInfer.cpp:731] [mxpi_modelinfer1][1016][Object, file or other resource doesn't exist] The postprocessing DLL [../../../lib/libresnet50postprocessor.so] does not exist.的报错,请检查对应Sample.pipeline文件中postProcessLibPath项是否包含相对路径
image.png
尝试去掉或更改为绝对路径后再运行
image.png

步骤5 单步调试插件 确认已设置为debug项目,toolchain指向代码所在的远程环境
image.png
在插件的process函数中选择执行的语句打断点,并debug运行
image.png
成功进入插件内部并命中断点时类似下图
image.png

注意:需要调试时请注释cmakelist该行内容,这是用于安全编译设置的选项。但正式提交时请保持本行生效。

target_link_libraries(${TARGET_LIBRARY} -Wl,-z,relro,-z,now,-z,noexecstack -s)

注意事项

mindx_sdk_plugin/src/mxpi_sampleplugin/MxpiSamplePlugin.cpp第141行起配置了pipeline中支持的props参数和默认值,如自行开发请按需求修改。

auto parentNameProSptr = std::make_shared<ElementProperty<string>>(ElementProperty<string>{
       STRING, "dataSource", "name", "the name of previous plugin", "mxpi_modelinfer0", "NULL", "NULL"});
auto descriptionMessageProSptr = std::make_shared<ElementProperty<string>>(ElementProperty<string>{
       STRING, "descriptionMessage", "message", "Description mesasge of plugin", "This is MxpiSamplePlugin", "NULL", "NULL"});
   
C++
1
https://gitee.com/iamlanhsi/mindxsdk-referenceapps.git
git@gitee.com:iamlanhsi/mindxsdk-referenceapps.git
iamlanhsi
mindxsdk-referenceapps
mindxsdk-referenceapps
master

搜索帮助