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

举报
蒲公英 发表于 2021/05/19 20:18:07 2021/05/19
【摘要】 【摘要】 新手村小白带你一起攻略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,请在评论区查看链接!

最后执行结果如下:

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

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。