【零基础入门SDK】小白带你配置MindX SDK中的pipeline

【摘要】 【摘要】 新手村小白带你一起攻略MXSDK,每月不定期更新。动动手指,一键三连,欢迎关注up主~~~

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:将修改后的pipelinemain函数上传至服务器相应的位置,运行./run.sh。 将图片解码后,又编码,可以查看新图片没有任何变化。

案例2:查看缩放后的图片

在案例2中,我们的pipeline执行如下流程:

流程2.jpg

配置相应的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,请在评论区查看链接!

最后执行结果如下:

文章中如果有疏漏,请在评论区留言,如果你在执行上述操作中有遇到报错无法解决,也可以将你的报错分享一下

————————————————————————————————————-前路风很大,我们一起前行!

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享