【零基础入门SDK】小白带你配置MindX SDK中的pipeline
0前言
本帖主要是教会小白如何配置自己的pipeline。如果你还不知道pipeline是什么,请点击链接:【零基础入门SDK】小白带你读懂MindX SDK中的pipeline-云社区-华为云 (huaweicloud.com)
现在可以开始配置自己的pipeline了。我们现在从最简单的流程开始,学习如何配置pipeline。
案例1:解码-编码流程
在案例1中,我们的pipeline执行如下流程:
步骤1:配置pipeline
{
"classification+detection": {
"stream_config": {
"deviceId": "0"
},
"mxpi_imagedecoder0": {
"factory": "mxpi_imagedecoder",
"next": "mxpi_imageencoder0"
},
"mxpi_imageencoder0": {
"factory": "mxpi_imageencoder",
"next": "filesink0"
},
"filesink0": {
"props": {
"location": "./rgb_result.jpg"
},
"factory": "filesink"
},
"appsrc0": {
"props": {
"blocksize": "409600"
},
"factory": "appsrc",
"next": "mxpi_imagedecoder0"
}
}
}
上述的pipeline流程如下
appsrc(图片获取)--> mxpi_imagedecoder(图片解码)-->mxpi_imageencoder(图片编码)-->filesink(图片保存)
注:filesink插件是gstreamer的开源插件,功能是将图片保存;location设置保存路径。除了filesink,其余插件的说明都可以在用户手册中查询到。
此外,在这个流程中,我们输入图片的长宽像素必须是偶数。
步骤2:修改main函数。核对pipeline的读取路径。注释掉main函数的get stream output 部分,因为流程中没有使用appsink。因此没有输出。
步骤3:将修改后的pipeline和main函数上传至服务器相应的位置,运行./run.sh。 将图片解码后,又编码,可以查看新图片没有任何变化。
案例2:查看缩放后的图片
在案例2中,我们的pipeline执行如下流程:
配置相应的pipeline
{
"classification+detection": {
"stream_config": {
"deviceId": "0"
},
"mxpi_imagedecoder0": {
"factory": "mxpi_imagedecoder",
"next": "mxpi_imageresize0"
},
"mxpi_imageresize0": {
"props": {
"dataSource": "mxpi_imagedecoder0",
"resizeHeight": "416",
"resizeWidth": "416"
},
"factory": "mxpi_imageresize",
"next": "mxpi_imageencoder0"
},
"mxpi_imageencoder0": {
"factory": "mxpi_imageencoder",
"next": "filesink0"
},
"filesink0": {
"props": {
"location": "../pipeline/rgb_result.jpg"
},
"factory": "filesink"
},
"appsrc0": {
"props": {
"blocksize": "409600"
},
"factory": "appsrc",
"next": "mxpi_imagedecoder0"
}
}
}
执行的相关流程参考案例1。
在imageresize中设置了resizeHight以及resizeWidth两个参数。最终图片缩放结果如下:
案例3:查看图片裁剪后的图片
在案例3中,我们的pipeline执行如下流程:
配置pipeline
{
"classification+detection": {
"stream_config": {
"deviceId": "0"
},
"mxpi_imagedecoder0": {
"factory": "mxpi_imagedecoder",
"next": "mxpi_imageresize0"
},
"mxpi_imageresize0": {
"factory": "mxpi_imageresize",
"next": "mxpi_modelinfer0"
},
"mxpi_modelinfer0": {
"props": {
"modelPath": "../models/yolov3/yolov3_tf_bs1_fp16.om",
"postProcessConfigPath": "../models/yolov3/yolov3_tf_bs1_fp16.cfg",
"labelPath": "../models/yolov3/coco.names",
"postProcessLibPath": "libMpYOLOv3PostProcessor.so"
},
"factory": "mxpi_modelinfer",
"next": "mxpi_imagecrop0"
},
"mxpi_imagecrop0": {
"factory": "mxpi_imagecrop",
"next": "mxpi_imageencoder0"
},
"mxpi_imageencoder0":{
"factory": "mxpi_imageencoder",
"next": "mxpi_dumpdata0"
},
"mxpi_dumpdata0": {
"factory": "mxpi_dumpdata",
"next": "appsink0",
"props": {
"location": "imageresize0-output.json",
"dumpMemoryData":"True"
}
},
"appsrc0": {
"props": {
"blocksize": "409600"
},
"factory": "appsrc",
"next": "mxpi_imagedecoder0"
},
"appsink0": {
"factory": "appsink"
}
}
}
说明:上述pipeline的流程如下
appsrc(获取图片)-->imagedecoder(图片解码)-->imageresize(图像缩放)-->modelinfer(模型推理)-->imagecrop(裁剪图片)➡encoder(编码)➡dumpdata(导出json文件)➡appsink
对于dumpdata简而言之,dumpdata将裁剪后的图片以json格式导出。
执行上述pipeline流程,获得imageresize0-output.json文件。
如何将json格式图片转化成jpg,请在评论区查看链接!
最后执行结果如下:
文章中如果有疏漏,请在评论区留言,如果你在执行上述操作中有遇到报错无法解决,也可以将你的报错分享一下
-------------------------------------------------------------------------------------------------------------前路风很大,我们一起前行!
- 点赞
- 收藏
- 关注作者
评论(0)