C#
本文為您介紹如何使用阿里云視覺智能開放平臺相關(guān)服務(wù)的C# SDK,包括SDK的獲取和安裝方法,以及SDK代碼示例。
阿里云視覺智能開放平臺各類目視覺AI能力SDK接入、接口使用或問題咨詢等,請通過釘釘群(23109592)加入阿里云視覺智能開放平臺咨詢?nèi)郝?lián)系我們。
該版本SDK最低環(huán)境要求.NET Framework 4.5或.NET Core 2.0,如不滿足請升級C#版本。
準(zhǔn)備工作
在安裝和使用阿里云SDK前,確保您已經(jīng)注冊阿里云賬號并生成訪問密鑰(AccessKey)。具體操作,請參見創(chuàng)建AccessKey。
安裝對應(yīng)算法類目的SDK包。 具體操作步驟如下:
(推薦)通過NuGet方式安裝。
如果您的Visual Studio沒有安裝NuGet,請先安裝NuGet。
在Visual Studio中新建或者打開已有的項目,選擇工具 > NuGet包管理器 > 管理解決方案的NuGet程序包。
搜索Facebody20191230,在結(jié)果中找到AlibabaCloud.SDK.Facebody20191230,選擇最新版本,單擊安裝。
通過.Net CLI方式安裝。執(zhí)行
dotnet add package AlibabaCloud.SDK.Facebody20191230
安裝阿里云核心庫.NET SDK。AI類目
SDK鏈接
Github鏈接
生成專區(qū)
人臉人體
文字識別
商品理解
內(nèi)容審核
圖像識別
圖像生產(chǎn)
分割摳圖
目標(biāo)檢測
視覺搜索
圖像分析處理
視頻生產(chǎn)
視頻理解
視頻分割
異步任務(wù)管理
人臉核身服務(wù)端20200910專用版本
配置環(huán)境變量
配置環(huán)境變量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
阿里云賬號AccessKey擁有所有API的訪問權(quán)限,建議您使用RAM用戶進(jìn)行API訪問或日常運維,具體操作,請參見創(chuàng)建RAM用戶。
請不要將AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導(dǎo)致AccessKey泄露,威脅您賬號下所有資源的安全。
Linux和macOS系統(tǒng)配置方法
在IntelliJ IDEA中打開終端Terminal。
執(zhí)行以下命令,配置環(huán)境變量。
<access_key_id>
需替換為您RAM用戶的AccessKey ID,<access_key_secret>
替換為您RAM用戶的AccessKey Secret。如果后續(xù)需要進(jìn)行更多權(quán)限相關(guān)的配置,具體操作請參見使用RAM Policy控制訪問權(quán)限。export ALIBABA_CLOUD_ACCESS_KEY_ID=<access_key_id> export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<access_key_secret>
Windows系統(tǒng)配置方法
新建環(huán)境變量文件,添加環(huán)境變量
ALIBABA_CLOUD_ACCESS_KEY_ID
和ALIBABA_CLOUD_ACCESS_KEY_SECRET
,并寫入已準(zhǔn)備好的AccessKey ID和AccessKey Secret。然后重啟Windows系統(tǒng)。本操作以Windows 10為例進(jìn)行說明。打開文件資源管理器,在此電腦上右鍵單擊屬性。
在右側(cè)導(dǎo)航欄,單擊高級系統(tǒng)配置。
在系統(tǒng)屬性對話框的高級頁簽下,單擊環(huán)境變量。
在環(huán)境變量對話框中,單擊新建(W)。
在彈出的新建系統(tǒng)變量對話框中,添加環(huán)境變量
ALIBABA_CLOUD_ACCESS_KEY_ID
和ALIBABA_CLOUD_ACCESS_KEY_SECRET
,并寫入已準(zhǔn)備好的AccessKey ID和AccessKey Secret。重啟Windows系統(tǒng),使配置生效。
代碼示例
本文以RecognizeBankCard為例。
文件在上海地域OSS
每個類目的訪問域名與對應(yīng)Region開通能力,請參見訪問域名。
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
// 1、這里只是以ocr為例,其他能力請引入相應(yīng)類目的包。包名可參考本文檔上方的SDK包名稱,能力名可參考對應(yīng)API文檔中的Action參數(shù)。例如您想使用通用分割,其文檔為http://bestwisewords.com/document_detail/151960.html,可以知道該能力屬于分割摳圖類目,能力名稱為SegmentCommonImage,那么您需要將代碼中Ocr20191230改為Imageseg20191230,將RecognizeBankCard改為SegmentCommonImage。
using AlibabaCloud.SDK.Ocr20191230.Models;
using Tea;
using Tea.Utils;
namespace AlibabaCloud.SDK.Sample
{
public class Sample
{
/**
* 使用AK&SK初始化賬號Client
* @param accessKeyId
* @param accessKeySecret
* @return Client
* @throws Exception
*/
public static AlibabaCloud.SDK.Ocr20191230.Client CreateClient(string accessKeyId, string accessKeySecret)
{
//初始化配置對象AlibabaCloud.OpenApiClient.Models.Config。Config對象存放AccessKeyId、AccessKeySecret、Endpoint等配置。
AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
{
AccessKeyId = accessKeyId,
AccessKeySecret = accessKeySecret,
};
// 2、訪問的域名。注意:這個地方需要求改為相應(yīng)類目的域名,參考:http://bestwisewords.com/document_detail/143103.html
config.Endpoint = "ocr.cn-shanghai.aliyuncs.com";
// 3、這里只是以ocr為例,其他能力請使用相應(yīng)類目的包下面的Client類
return new AlibabaCloud.SDK.Ocr20191230.Client(config);
}
public static void Main(string[] args)
{
// 4、創(chuàng)建AccessKey ID和AccessKey Secret,請參考http://bestwisewords.com/document_detail/175144.html。
// 如果您用的是RAM用戶的AccessKey,還需要為RAM用戶授予權(quán)限AliyunVIAPIFullAccess,請參考http://bestwisewords.com/document_detail/145025.html。
// 從環(huán)境變量讀取配置的AccessKey ID和AccessKey Secret。運行示例前必須先配置環(huán)境變量。
// 這里只是以ocr為例,其他能力請使用相應(yīng)類目的包下面的Client類
AlibabaCloud.SDK.Ocr20191230.Client client = CreateClient(Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"), Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
// 5、這里只是以ocr下的RecognizeBankCard為例,其他能力請使用相應(yīng)類目的包和類,具體入?yún)⒃O(shè)置需要參考具體能力的文檔
AlibabaCloud.SDK.Ocr20191230.Models.RecognizeBankCardRequest recognizeBankCardRequest = new AlibabaCloud.SDK.Ocr20191230.Models.RecognizeBankCardRequest();
recognizeBankCardRequest.ImageURL = "http://viapi-test.oss-cn-shanghai.aliyuncs.com/viapi-3.0domepic/ocr/RecognizeBankCard/yhk1.jpg";
AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
try
{
// 6、這里只是以ocr下的RecognizeBankCard為例,其他能力請使用相應(yīng)類目的包和類,注意,RecognizeBankCardWithOptions方法名也需要改成對應(yīng)能力的方法名。方法名是根據(jù)能力名稱按照一定規(guī)范形成的,如能力名稱為SegmentCommonImage,對應(yīng)方法名應(yīng)該為SegmentCommonImageWithOptions。
AlibabaCloud.SDK.Ocr20191230.Models.RecognizeBankCardResponse recognizeBankCardResponse = client.RecognizeBankCardWithOptions(recognizeBankCardRequest, runtime);
// 獲取整體結(jié)果
Console.WriteLine(AlibabaCloud.TeaUtil.Common.ToJSONString(recognizeBankCardResponse.Body));
// 獲取單個字段,這里只是一個例子,具體能力下的字段需要看具體能力的文檔
Console.WriteLine(recognizeBankCardResponse.Body.Data.CardNumber);
}
catch (TeaException error)
{
// 如有需要,請打印 error
Console.WriteLine(error.Message);
}
catch (Exception _error)
{
TeaException error = new TeaException(new Dictionary<string, object>
{
{ "message", _error.Message }
});
// 如有需要,請打印 error
Console.WriteLine(error.Message);
}
}
}
}
需要修改的地方均在上述代碼注釋中標(biāo)明,總結(jié)如下:
引入包的時候,需要引入相應(yīng)類目的包和相關(guān)類。包名可參考上文SDK包名稱,能力名稱可參考對應(yīng)API文檔中的Action參數(shù)。
例如,您想使用通用分割能力,通過通用分割A(yù)PI文檔可知該能力屬于分割摳圖類目(imageseg20191230),能力名稱為SegmentCommonImage,您需要將代碼中的ocr20191230改為imageseg20191230,將RecognizeBankCard改為SegmentCommonImage。
訪問的域名一定要修改為相應(yīng)類目的域名,如果域名類目不匹配會報錯
InvalidAction.NotFound
。關(guān)于域名詳情,請參見訪問域名。Client類需要使用相應(yīng)類目的包下的Client類。
Request和Response需要使用相應(yīng)類目的包和類。
調(diào)用Client的方法時,方法名需要改成對應(yīng)能力的方法名。方法名是根據(jù)能力名稱按照一定規(guī)范形成的。例如,能力名稱為SegmentCommonImage,對應(yīng)方法名應(yīng)該為SegmentCommonImageWithOptions。
文件在本地或可訪問的URL
文件在本地、文件不在同一地與文件在同地域區(qū)別在于需要使用xxxAdvanceRequest,文件是以Stream形式通過ImageURLObject參數(shù)傳入。
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Threading.Tasks;
// 1、這里只是以ocr為例,其他能力請引入相應(yīng)類目的包。包名可參考本文檔上方的SDK包名稱,能力名可參考對應(yīng)API文檔中的Action參數(shù)。例如您想使用通用分割,其文檔為http://bestwisewords.com/document_detail/151960.html,可以知道該能力屬于分割摳圖類目,能力名稱為SegmentCommonImage,那么您需要將代碼中Ocr20191230改為Imageseg20191230,將RecognizeBankCard改為SegmentCommonImage。
using AlibabaCloud.SDK.Ocr20191230.Models;
using Tea;
using Tea.Utils;
using static System.Net.WebRequestMethods;
namespace AlibabaCloud.SDK.Sample
{
public class Sample
{
/**
* 使用AK&SK初始化賬號Client
* @param accessKeyId
* @param accessKeySecret
* @return Client
* @throws Exception
*/
public static AlibabaCloud.SDK.Ocr20191230.Client CreateClient(string accessKeyId, string accessKeySecret)
{
//初始化配置對象AlibabaCloud.OpenApiClient.Models.Config。Config對象存放AccessKeyId、AccessKeySecret、Endpoint等配置。
AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
{
AccessKeyId = accessKeyId,
AccessKeySecret = accessKeySecret,
};
// 2、訪問的域名。注意:這個地方需要求改為相應(yīng)類目的域名,參考:http://bestwisewords.com/document_detail/143103.html
config.Endpoint = "ocr.cn-shanghai.aliyuncs.com";
// 3、這里只是以ocr為例,其他能力請使用相應(yīng)類目的包下面的Client類
return new AlibabaCloud.SDK.Ocr20191230.Client(config);
}
public static void Main(string[] args)
{
// 4、創(chuàng)建AccessKey ID和AccessKey Secret,請參考http://bestwisewords.com/document_detail/175144.html。
// 如果您用的是RAM用戶的AccessKey,還需要為RAM用戶授予權(quán)限AliyunVIAPIFullAccess,請參考http://bestwisewords.com/document_detail/145025.html。
// 從環(huán)境變量讀取配置的AccessKey ID和AccessKey Secret。運行示例前必須先配置環(huán)境變量。
// 這里只是以ocr為例,其他能力請使用相應(yīng)類目的包下面的Client類
AlibabaCloud.SDK.Ocr20191230.Client client = CreateClient(Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"), Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")); // 5、這里只是以ocr下的RecognizeBankCard為例,其他能力請使用相應(yīng)類目的包和類,具體入?yún)⒃O(shè)置需要參考具體能力的文檔
AlibabaCloud.SDK.Ocr20191230.Models.RecognizeBankCardAdvanceRequest recognizeBankCardAdvanceRequest = new AlibabaCloud.SDK.Ocr20191230.Models.RecognizeBankCardAdvanceRequest();
/* 場景一,使用本地文件
System.IO.StreamReader file = new System.IO.StreamReader(@"/Users/zhuxun.lx/Downloads/yhk1.jpg");
recognizeBankCardAdvanceRequest.ImageURLObject = file.BaseStream;
*/
// 場景二,使用任意可訪問的url
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://viapi-test-bj.oss-cn-beijing.aliyuncs.com/viapi-3.0domepic/ocr/RecognizeBankCard/yhk1.jpg");
WebResponse response = request.GetResponse();
Stream stream = response.GetResponseStream();
recognizeBankCardAdvanceRequest.ImageURLObject = stream;
AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
try
{
// 6、這里只是以ocr下的RecognizeBankCard為例,其他能力請使用相應(yīng)類目的包和類,注意,RecognizeBankCardAdvance方法名也需要改成對應(yīng)能力的方法名。方法名是根據(jù)能力名稱按照一定規(guī)范形成的,如能力名稱為SegmentCommonImage,對應(yīng)方法名應(yīng)該為SegmentCommonImageAdvance。
AlibabaCloud.SDK.Ocr20191230.Models.RecognizeBankCardResponse recognizeBankCardResponse = client.RecognizeBankCardAdvance(recognizeBankCardAdvanceRequest, runtime);
// 獲取整體結(jié)果
Console.WriteLine(AlibabaCloud.TeaUtil.Common.ToJSONString(recognizeBankCardResponse.Body));
// 獲取單個字段,這里只是一個例子,具體能力下的字段需要看具體能力的文檔
Console.WriteLine(recognizeBankCardResponse.Body.Data.CardNumber);
}
catch (TeaException error)
{
// 如有需要,請打印 error
Console.WriteLine(error.Message);
}
catch (Exception _error)
{
TeaException error = new TeaException(new Dictionary<string, object>
{
{ "message", _error.Message }
});
// 如有需要,請打印 error
Console.WriteLine(error.Message);
}
}
}
}
需要修改的地方均在上述代碼注釋中標(biāo)明,總結(jié)如下:
引入包的時候,需要引入相應(yīng)類目的包和相關(guān)類。包名可參考上文SDK包名稱,能力名稱可參考對應(yīng)API文檔中的Action參數(shù)。
例如,您想使用通用分割能力,通過通用分割A(yù)PI文檔可知該能力屬于分割摳圖類目(imageseg20191230),能力名稱為SegmentCommonImage,您需要將代碼中的ocr20191230改為imageseg20191230,將RecognizeBankCard改為SegmentCommonImage。
訪問的域名一定要修改為相應(yīng)類目的域名,如果域名類目不匹配會報錯
InvalidAction.NotFound
。關(guān)于域名詳情,請參見訪問域名。Client類需要使用相應(yīng)類目的包下面的Client類。
Request和Response需要使用相應(yīng)類目的包和類。
調(diào)用Client的方法時,方法名需要改成對應(yīng)能力的方法名。方法名是根據(jù)能力名稱按照一定規(guī)范形成。例如,能力名稱為SegmentCommonImage,對應(yīng)方法名應(yīng)該為SegmentCommonImageAdvance。
常見問題
調(diào)用報錯如何處理?
如果您的調(diào)用出現(xiàn)報錯,請先嘗試升級SDK包到最新版本,最新版本請參考各類目SDK鏈接。如果您的程序中同時引入了多個類目的包,也可以先嘗試將這些包都升級到最新版本,避免版本之間的包沖突問題。
OpenAPI界面顯示的最新包在nuget倉庫中找不到如何處理?
如果您發(fā)現(xiàn)OpenAPI界面顯示的最新版本的包,在nuget倉庫中找不到,這是因為新版本的包剛剛發(fā)布,倉庫同步可能會有延遲,如果遇到版本不存在的情況,請稍后再試或使用nuget倉庫中的最新版本。
技術(shù)支持
如果以上方法未能解決您的問題,請通過搜索釘釘群號(23109592)加入阿里云視覺智能開放平臺咨詢?nèi)郝?lián)系我們。屆時會有專業(yè)的技術(shù)人員與您對接解決問題。