C++

本文介绍了如何使用阿里云视觉智能开放平台的C++ SDK,具体包括SDK的安装方法以及SDK代码示例。

说明

阿里云视觉智能开放平台各类目视觉AI能力SDK接入、接口使用或问题咨询等,请通过钉钉群(23109592)加入阿里云视觉智能开放平台咨询群联系我们。

环境要求:

  • 安装支持C++ 11或更高版本的编译器:

    • Windows:Visual Studio 2015或以上版本

    • Linux:GCC 4.9或以上版本

  • 安装CMake 3.0或以上版本

  • 建议4 GB或以上内存。

准备工作

编译安装C++ SDK

本文以分割抠图(imageseg)为例,演示如何使用C++ SDK调用开放视觉API能力。

  1. 获取AccessKey,具体操作,请参见创建AccessKey

  2. 安装aliyun-openapi-cpp-sdk。此处以在Ubuntu 18.04 Linux x64平台编译安装的方式为例进行说明,对于其他平台,推荐访问官方代码页面并参照相关指示完成相应的编译安装工作。

  3. 安装SDK所需要的依赖库,包括libcurl, libopenSSL, libuuid和libjsoncpp。

    sudo apt-get install libcurl4-openssl-dev libssl-dev uuid-dev libjsoncpp-dev

  4. 需要注意,部分版本的jsoncpp头文件目录结构可能会有差异,比如Ubuntu 18.04版本官方apt源安装的jsoncpp库的头文件位于/usr/include/jsoncpp/json目录下,请将该目录链接到/usr/include/json下,保证在SDK源代码中可以通过#include <json/json.h>找到对应的库文件。(如果您的jsoncpp头文件直接安装在include目录下的JSON目录中,可跳过此步骤。)

  5. 克隆所需的SDK代码:

    git clone https://github.com/aliyun/aliyun-openapi-cpp-sdk.git

  6. 分割抠图对应的cmake命令中传入的产品名称是imageseg,如果您使用其他类目能力,可以参考准备工作中的表格,填写对应的能力名称。

    cd aliyun-openapi-cpp-sdk 
    mkdir sdk_build 
    cd sdk_build 
    cmake -DBUILD_PRODUCT=imageseg -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr 
    make 
    sudo make install
  7. 完成了对应的SDK编译和安装后,在/usr目录下可以找到对应安装在include下面的头文件和lib/x86_64-linux-gnu下面的库文件(不同的Linux发行版库目录位置可能不同,不影响后续的步骤,您也可以通过修改cmake中的CMAKE_INSTALL_PREFIX修改安装目录)。

  8. 完成上述步骤后,在lib目录中可以找到两个动态链接库文件libalibabacloud-sdk-core.so和libalibabacloud-sdk-imageseg.so,您可以构建自己的代码并链接这两个库文件,完成最终的图像分割调用。

代码示例

SDK示例如下,代码以ImageSeg为例,其余类似。该方式目前只支持同region下OSS文件。

#include <cstdlib>
#include <iostream>
#include <alibabacloud/core/AlibabaCloud.h>
#include <alibabacloud/imageseg/ImagesegClient.h>

using namespace std;
using namespace AlibabaCloud;
using namespace AlibabaCloud::Imageseg;

int main( int argc, char** argv )
{
    AlibabaCloud::InitializeSdk();

    // 生成客户端配置,此处目前只支持上海region。
    AlibabaCloud::ClientConfiguration configuration( "cn-shanghai" );

    // 为客户端配置设置对应能力的访问域名;
    // 比如图像分割的域名是:"imageseg.cn-shanghai.aliyuncs.com",其他能力请参考对应文档:https://help.aliyun.com/document_detail/143103.html。
    configuration.setEndpoint( "imageseg.cn-shanghai.aliyuncs.com" );

    // 创建AccessKey ID和AccessKey Secret,请参见:https://help.aliyun.com/document_detail/175144.html
    // 如果您使用的是RAM用户的AccessKey,还需要为子账号授予权限AliyunVIAPIFullAccess,请参见:https://help.aliyun.com/document_detail/145025.html
    // 从环境变量读取配置的AccessKey ID和AccessKey Secret。运行代码示例前必须先配置环境变量。
    AlibabaCloud::Credentials credential( getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET") );
    
    /* use STS Token
    credential.setSessionToken( "<your-sts-token>" );
    */
    ImagesegClient client( credential, configuration );

    Model::SegmentCommonImageRequest request;

    // 此处请填写您的输入图像的OSS地址,目前仅支持在上海region的OSS地址。
    request.setImageURL( "http://viapi-test.oss-cn-shanghai.aliyuncs.com/viapi-3.0domepic/imageseg/SegmentCommonImage/SegmentCommonImage1.jpg" );

    // 客户端执行请求。
    auto outcome = client.segmentCommonImage( request );

    // 判断请求结果是否成功。
    if ( !outcome.isSuccess() )
    {
        // 如果请求结果失败,则打印出对应的错误码和错误信息
        std::cout << outcome.error().errorCode() << ": " << outcome.error().errorMessage() << std::endl;
        AlibabaCloud::ShutdownSdk();
        return(-1);
    }

    // 线上API处理完成之后会返回输入图像处理之后的结果URL,将结果URL输入浏览器您就可以看到处理结果。
    std::cout << "Output imageURL: " << outcome.result().getData().imageURL << std::endl;

    AlibabaCloud::ShutdownSdk();
    return 0;
}

编译示例代码并最终调用图像分割能力

目前C++ SDK仅支持上海Region的OSS,您需要处理的输入图像需要先存放在上海区域的OSS中,并获取到对应图像的URL作为SDK的输入。具体操作如下:

  1. 将上述示例代码存储为test.cpp文件,并使用如下命令编译,部分代码需要按照以下要求进行修改:

    • 第19行:此处以图像分割能力为例,对应的Endpoint为imageseg.cn-shanghai.aliyuncs.com。 更多关于访问域名(Endpoint)信息,请参见访问域名

    • 第22行:填入AccessKey,具体操作,请参见创建AccessKey

    • 第32行:此处输入的URL就是您需要分割图像的URL地址,您需要将图像放在上海区域的OSS并填入对应的图像URL。

  2. 使用如下命令编译代码:

    g++ -o test.out test.cpp --std=c++11 -lalibabacloud-sdk-core -l alibabacloud-sdk-imageseg
  3. 编译完成后,得到可执行文件test.out,运行该文件可以得到图像分割算法处理完成之后结果的图像URL地址。您可将URL输入浏览器查看最终的分割结果,也可以直接下载这个结果为后续操作之用。