Skip to main content

初始化

编译运行

运行样例前,需设置mxVison环境变量。

source {mxVison安装目录}/mxVision/set_env.sh

编译

  1. 文件准备,用户准备好自己的源码文件“main.cpp”,以及“CMakeLists.txt”文件,“CMakeLists.txt”编写可参考如下内容:

    # CMake lowest version requirement
    cmake_minimum_required(VERSION 3.5.2)
    # project information
    project(MindX_SDK_Sample)
    set(MX_SDK_HOME $ENV{MX_SDK_HOME})
    if (NOT DEFINED ENV{MX_SDK_HOME})
    string(REGEX REPLACE "(.*)/(.*)/(.*)/(.*)" "\\1" MX_SDK_HOME ${CMAKE_CURRENT_SOURCE_DIR})
    message(STATUS "set default MX_SDK_HOME: ${MX_SDK_HOME}")
    else ()
    message(STATUS "env MX_SDK_HOME: ${MX_SDK_HOME}")
    endif()
    # Compile options
    add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0)
    add_definitions(-Dgoogle=mindxsdk_private)
    add_compile_options(-std=c++11 -fPIC -fstack-protector-all -Wall)
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
    set(CMAKE_CXX_FLAGS_DEBUG "-g")
    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,relro,-z,now,-z,noexecstack -s -pie")
    set(CMAKE_SKIP_RPATH TRUE)

    # add mxbase header path
    include_directories(
    ${MX_SDK_HOME}/include/
    ${MX_SDK_HOME}/opensource/include/
    )

    # add mxbase lib path
    link_directories(
    ${MX_SDK_HOME}/lib/
    ${MX_SDK_HOME}/lib/modelpostprocessors/
    ${MX_SDK_HOME}/opensource/lib/
    ${MX_SDK_HOME}/opensource/lib64/
    )
    add_executable(main main.cpp)
    target_link_libraries(main glog mxbase opencv_world cpprest pthread mindxsdk_protobuf)
    install(TARGETS main DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
  2. CMake编译。

    1. 在“CMakeLists.txt”文件所在目录新建“build”目录。

      mkdir build
    2. 进入“build”目录。

      cd build
    3. 执行cmake命令。

      cmake ..
    4. 执行make命令生成可执行文件“main”。

      make -j

运行

执行编译生成的可执行文件即可运行程序。

./main

:::note 说明

父主题: 使用API接口方式开发(C++)

开发流程

流程介绍

图1 API开发流程

关键步骤说明

  1. 使用mxVision接口进行应用开发,需首先进行初始化才能进行后续处理,具体请参见初始化
  2. 媒体数据处理/模型推理。
    1. 媒体数据处理功能,可实现图像编解码、抠图、缩放、补边等操作,具体请参见媒体数据处理
    2. 模型推理,可实现如目标识别,图像分类等应用,环节可参考以下几个步骤,具体请参见模型推理
      1. 模型推理前,需准备合适的om模型。
      2. 模型加载,将准备好的模型通过文件或内存方式加载到系统中,具体请参见模型推理
      3. (可选)媒体数据处理,模型推理前,可对输入的媒体数据进行处理,如图片解码、抠图、缩放、补边等操作。
      4. 模型执行,使用模型实现图片分类、目标识别等功能。
      5. (可选)模型后处理,对模型推理输出的数据进行后处理操作,此处根据用户的实际需求来处理推理结果,如整理为可理解阅读的具体结果。模型后处理支持通过两种方式进行:
        • (推荐)自行选择模型后处理方式。
        • 通过调用mxVision接口进行,具体操作请参见模型后处理

父主题: 使用API接口方式开发(Python)

初始化

功能介绍

mxVision应用开发初始化接口,在代码调用相关接口之前,需调用全局初始化函数mx_init()申请设备资源和日志资源。

示例代码

以下为初始化方法的代码示例,不可以直接拷贝运行,仅供参考。

全局初始化,加载设备资源和日志资源。

from mindx.sdk import base
base.mx_init()
## 执行全局初始化后即可正常调用mxVision接口

父主题: 使用API接口方式开发(Python)

图片解码

功能介绍

通过对输入图片数据进行解码处理,将本地图片转换为Image类,用于后续前处理和推理业务,类型目前支持JPEG和PNG格式。

接口调用流程

用户需准备好本地待解码的图片文件,初始化ImageProcessor类,通过调用ImageProcessor类的decode接口解码返回输出的Image对象。

图片解码调用流程参考如下:

图1 图片解码接口调用流程

关键步骤说明如下:

  1. 调用mx_init()接口进行全局初始化。

  2. ImageProcessor初始化。

    用户构造ImageProcessor对象,构造时需用户指定设备ID。

  3. 调用decode接口对图片进行解码。

    用户需根据解码的不同需要,传入对应格式参数到decode接口。

示例代码

以下为功能特性关键步骤的代码示例,不可以直接拷贝运行,仅供参考。

from mindx.sdk import base
from mindx.sdk.base import ImageProcessor, Image
## 图像解码
## 初始化ImageProcessor对象
imageProcessor = ImageProcessor(device_id)
image_path = "test_image.jpg"
## 读取图片路径进行解码,解码格式为nv12(YUV_SP_420)
decoded_image = imageProcessor.decode(image_path, base.nv12)

父主题: 媒体数据处理

图片编码

功能介绍

将接口输出的Image对象编码为JPG格式的图片保存到指定的图片路径。

接口调用流程

用户需提前准备好待编码的Image对象,可以通过图片解码以及图像处理接口(抠图、缩放、补边等操作对应接口)输出,输出到本地图片。

图片编码调用流程参考如下:

图1 图片编码接口调用流程

关键步骤说明如下:

  1. 调用mx_init()接口进行全局初始化。

  2. ImageProcessor初始化。

    用户构造ImageProcessor对象,构造时需用户指定设备ID。

  3. 使用图片解码接口对输入图片进行解码。

    根据业务对图片进行解码,生成可编码的Image对象。后续可以通过图像处理接口对图片进行处理,生成最终需要编码的Image对象。

  4. 调用encode接口对输入图片进行编码。

    用户需根据实际业务情况输出图片数据,指定待输出的Image和输出路径。

示例代码

以下为功能特性关键步骤的代码示例,不可以直接拷贝运行,仅供参考。

from mindx.sdk import base
from mindx.sdk.base import ImageProcessor, Rect, Image
## 图像解码
## 初始化ImageProcessor对象
imageProcessor = ImageProcessor(device_id)
image_path = "image_data/test_image.jpg"
## 读取图片路径进行解码,解码格式为nv12(YUV_SP_420)
decoded_image = imageProcessor.decode(image_path, base.nv12)

## 图像处理操作(抠图)
crop_para = [Rect(300, 100, 550, 350)]
croped_images = imageProcessor.crop(decoded_image, crop_para)

image_save_path = "croped_image.jpg"
imageProcessor.encode(croped_images[0], image_save_path)

父主题: 媒体数据处理

抠图

功能介绍

对输入的图像进行抠图操作,输出到Image对象中。

接口调用流程

使用抠图接口前,用户需准备好被抠图的图片对象。

图1 图像处理(抠图)接口调用流程

关键步骤说明如下:

  1. 调用mx_init()接口进行全局初始化。

  2. ImageProcessor初始化。

    用户构造ImageProcessor对象,构造时需用户指定设备ID。

  3. 使用图片解码接口对输入图片进行解码。

    根据业务对图片进行解码,生成可抠图的Image对象。后续可以通过图像处理接口对图片进行处理,生成最终需要抠图的Image对象。

  4. 构造抠图Rect以及输出Image。

    根据业务要求,选择一对多、一对一或多对多的抠图方式,构造对应的输入和输出Rect和Image。

  5. 将输入图片及其他参数传入crop接口,获取抠图结果。

示例代码

以下为功能特性关键步骤的代码示例,不可以直接拷贝运行,仅供参考。

from mindx.sdk import base
from mindx.sdk.base import ImageProcessor, Rect, Image
## 图像解码
## 初始化ImageProcessor对象
imageProcessor = ImageProcessor(device_id)
image_path = "image_data/test_image.jpg"
## 读取图片路径进行解码,解码格式为nv12(YUV_SP_420)
decoded_image = imageProcessor.decode(image_path, base.nv12)

## 图像处理操作(抠图)
crop_para = [Rect(300, 100, 550, 350)]
croped_images = imageProcessor.crop(decoded_image, crop_para)

父主题: 媒体数据处理

在线提单