本文介绍了如何使用阿里云视觉智能开放平台的C++ SDK,具体包括SDK的安装方法以及SDK代码示例。
阿里云视觉智能开放平台各类目视觉AI能力SDK接入、接口使用或问题咨询等,请通过钉钉群(23109592)加入阿里云视觉智能开放平台咨询群联系我们。
环境要求:
安装支持C++ 11或更高版本的编译器:
Windows:Visual Studio 2015或以上版本
Linux:GCC 4.9或以上版本
安装CMake 3.0或以上版本
建议4 GB或以上内存。
准备工作
在安装和使用阿里云SDK前,确保您已经注册阿里云账号并生成访问密钥(AccessKey)。详情请参见创建AccessKey。
下面的表格对应了相关能力和SDK代码的具体链接。
AI类目
Github链接
人脸人体
文字识别
商品理解
内容审核
图像识别
图像生产
分割抠图
目标检测
视觉搜索
图像分析处理
视频生产
视频理解
视频分割
编译安装C++ SDK
本文以分割抠图(imageseg)为例,演示如何使用C++ SDK调用开放视觉API能力。
获取AccessKey,具体操作,请参见创建AccessKey。
安装aliyun-openapi-cpp-sdk。此处以在Ubuntu 18.04 Linux x64平台编译安装的方式为例进行说明,对于其他平台,推荐访问官方代码页面并参照相关指示完成相应的编译安装工作。
安装SDK所需要的依赖库,包括libcurl, libopenSSL, libuuid和libjsoncpp。
sudo apt-get install libcurl4-openssl-dev libssl-dev uuid-dev libjsoncpp-dev
需要注意,部分版本的jsoncpp头文件目录结构可能会有差异,比如Ubuntu 18.04版本官方apt源安装的jsoncpp库的头文件位于/usr/include/jsoncpp/json目录下,请将该目录链接到/usr/include/json下,保证在SDK源代码中可以通过#include <json/json.h>找到对应的库文件。(如果您的jsoncpp头文件直接安装在include目录下的JSON目录中,可跳过此步骤。)
克隆所需的SDK代码:
git clone https://github.com/aliyun/aliyun-openapi-cpp-sdk.git
分割抠图对应的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
完成了对应的SDK编译和安装后,在/usr目录下可以找到对应安装在include下面的头文件和lib/x86_64-linux-gnu下面的库文件(不同的Linux发行版库目录位置可能不同,不影响后续的步骤,您也可以通过修改cmake中的CMAKE_INSTALL_PREFIX修改安装目录)。
完成上述步骤后,在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的输入。具体操作如下:
将上述示例代码存储为test.cpp文件,并使用如下命令编译,部分代码需要按照以下要求进行修改:
第19行:此处以图像分割能力为例,对应的Endpoint为
imageseg.cn-shanghai.aliyuncs.com
。 更多关于访问域名(Endpoint)信息,请参见访问域名。第22行:填入AccessKey,具体操作,请参见创建AccessKey。
第32行:此处输入的URL就是您需要分割图像的URL地址,您需要将图像放在上海区域的OSS并填入对应的图像URL。
使用如下命令编译代码:
g++ -o test.out test.cpp --std=c++11 -lalibabacloud-sdk-core -l alibabacloud-sdk-imageseg
编译完成后,得到可执行文件test.out,运行该文件可以得到图像分割算法处理完成之后结果的图像URL地址。您可将URL输入浏览器查看最终的分割结果,也可以直接下载这个结果为后续操作之用。