本文介紹了如何使用阿里云視覺智能開放平臺的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",其他能力請參考對應文檔:http://bestwisewords.com/document_detail/143103.html。
configuration.setEndpoint( "imageseg.cn-shanghai.aliyuncs.com" );
// 創建AccessKey ID和AccessKey Secret,請參見:http://bestwisewords.com/document_detail/175144.html
// 如果您使用的是RAM用戶的AccessKey,還需要為子賬號授予權限AliyunVIAPIFullAccess,請參見:http://bestwisewords.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輸入瀏覽器查看最終的分割結果,也可以直接下載這個結果為后續操作之用。