本文为您介绍如何使用阿里云视觉智能开放平台相关服务的C# SDK,包括SDK的获取和安装方法,以及SDK代码示例。
阿里云视觉智能开放平台各类目视觉AI能力SDK接入、接口使用或问题咨询等,请通过钉钉群(23109592)加入阿里云视觉智能开放平台咨询群联系我们。
该版本SDK最低环境要求.NET Framework 4.5或.NET Core 2.0,如不满足请升级C#版本。
准备工作
在安装和使用阿里云SDK前,确保您已经注册阿里云账号并生成访问密钥(AccessKey)。具体操作,请参见创建AccessKey。
安装对应算法类目的SDK包。 具体操作步骤如下:
(推荐)通过NuGet方式安装。
如果您的Visual Studio没有安装NuGet,请先安装NuGet。
在Visual Studio中新建或者打开已有的项目,选择工具 > NuGet包管理器 > 管理解决方案的NuGet程序包。
搜索Facebody20191230,在结果中找到AlibabaCloud.SDK.Facebody20191230,选择最新版本,单击安装。
通过.Net CLI方式安装。执行
dotnet add package AlibabaCloud.SDK.Facebody20191230
安装阿里云核心库.NET SDK。AI类目
SDK链接
Github链接
AI类目
SDK链接
Github链接
生成专区
人脸人体
文字识别
商品理解
内容审核
图像识别
图像生产
分割抠图
目标检测
视觉搜索
图像分析处理
视频生产
视频理解
视频分割
异步任务管理
人脸核身服务端20200910专用版本
配置环境变量
配置环境变量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维,具体操作,请参见创建RAM用户。
请不要将AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
Linux和macOS系统配置方法
在IntelliJ IDEA中打开终端Terminal。
执行以下命令,配置环境变量。
<access_key_id>
需替换为您RAM用户的AccessKey ID,<access_key_secret>
替换为您RAM用户的AccessKey Secret。如果后续需要进行更多权限相关的配置,具体操作请参见使用RAM Policy控制访问权限。export ALIBABA_CLOUD_ACCESS_KEY_ID=<access_key_id> export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<access_key_secret>
Windows系统配置方法
新建环境变量文件,添加环境变量
ALIBABA_CLOUD_ACCESS_KEY_ID
和ALIBABA_CLOUD_ACCESS_KEY_SECRET
,并写入已准备好的AccessKey ID和AccessKey Secret。然后重启Windows系统。本操作以Windows 10为例进行说明。打开文件资源管理器,在此电脑上右键单击属性。
在右侧导航栏,单击高级系统配置。
在系统属性对话框的高级页签下,单击环境变量。
在环境变量对话框中,单击新建(W)。
在弹出的新建系统变量对话框中,添加环境变量
ALIBABA_CLOUD_ACCESS_KEY_ID
和ALIBABA_CLOUD_ACCESS_KEY_SECRET
,并写入已准备好的AccessKey ID和AccessKey Secret。重启Windows系统,使配置生效。
代码示例
本文以RecognizeBankCard为例。
文件在上海地域OSS
每个类目的访问域名与对应Region开通能力,请参见访问域名。
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
// 1、这里只是以ocr为例,其他能力请引入相应类目的包。包名可参考本文档上方的SDK包名称,能力名可参考对应API文档中的Action参数。例如您想使用通用分割,其文档为https://help.aliyun.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、访问的域名。注意:这个地方需要求改为相应类目的域名,参考:https://help.aliyun.com/document_detail/143103.html
config.Endpoint = "ocr.cn-shanghai.aliyuncs.com";
// 3、这里只是以ocr为例,其他能力请使用相应类目的包下面的Client类
return new AlibabaCloud.SDK.Ocr20191230.Client(config);
}
public static void Main(string[] args)
{
// 4、创建AccessKey ID和AccessKey Secret,请参考https://help.aliyun.com/document_detail/175144.html。
// 如果您用的是RAM用户的AccessKey,还需要为RAM用户授予权限AliyunVIAPIFullAccess,请参考https://help.aliyun.com/document_detail/145025.html。
// 从环境变量读取配置的AccessKey ID和AccessKey Secret。运行示例前必须先配置环境变量。
// 这里只是以ocr为例,其他能力请使用相应类目的包下面的Client类
AlibabaCloud.SDK.Ocr20191230.Client client = CreateClient(Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"), Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
// 5、这里只是以ocr下的RecognizeBankCard为例,其他能力请使用相应类目的包和类,具体入参设置需要参考具体能力的文档
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为例,其他能力请使用相应类目的包和类,注意,RecognizeBankCardWithOptions方法名也需要改成对应能力的方法名。方法名是根据能力名称按照一定规范形成的,如能力名称为SegmentCommonImage,对应方法名应该为SegmentCommonImageWithOptions。
AlibabaCloud.SDK.Ocr20191230.Models.RecognizeBankCardResponse recognizeBankCardResponse = client.RecognizeBankCardWithOptions(recognizeBankCardRequest, runtime);
// 获取整体结果
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);
}
}
}
}
需要修改的地方均在上述代码注释中标明,总结如下:
引入包的时候,需要引入相应类目的包和相关类。包名可参考上文SDK包名称,能力名称可参考对应API文档中的Action参数。
例如,您想使用通用分割能力,通过通用分割API文档可知该能力属于分割抠图类目(imageseg20191230),能力名称为SegmentCommonImage,您需要将代码中的ocr20191230改为imageseg20191230,将RecognizeBankCard改为SegmentCommonImage。
访问的域名一定要修改为相应类目的域名,如果域名类目不匹配会报错
InvalidAction.NotFound
。关于域名详情,请参见访问域名。Client类需要使用相应类目的包下的Client类。
Request和Response需要使用相应类目的包和类。
调用Client的方法时,方法名需要改成对应能力的方法名。方法名是根据能力名称按照一定规范形成的。例如,能力名称为SegmentCommonImage,对应方法名应该为SegmentCommonImageWithOptions。
文件在本地或可访问的URL
文件在本地、文件不在同一地与文件在同地域区别在于需要使用xxxAdvanceRequest,文件是以Stream形式通过ImageURLObject参数传入。
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Threading.Tasks;
// 1、这里只是以ocr为例,其他能力请引入相应类目的包。包名可参考本文档上方的SDK包名称,能力名可参考对应API文档中的Action参数。例如您想使用通用分割,其文档为https://help.aliyun.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、访问的域名。注意:这个地方需要求改为相应类目的域名,参考:https://help.aliyun.com/document_detail/143103.html
config.Endpoint = "ocr.cn-shanghai.aliyuncs.com";
// 3、这里只是以ocr为例,其他能力请使用相应类目的包下面的Client类
return new AlibabaCloud.SDK.Ocr20191230.Client(config);
}
public static void Main(string[] args)
{
// 4、创建AccessKey ID和AccessKey Secret,请参考https://help.aliyun.com/document_detail/175144.html。
// 如果您用的是RAM用户的AccessKey,还需要为RAM用户授予权限AliyunVIAPIFullAccess,请参考https://help.aliyun.com/document_detail/145025.html。
// 从环境变量读取配置的AccessKey ID和AccessKey Secret。运行示例前必须先配置环境变量。
// 这里只是以ocr为例,其他能力请使用相应类目的包下面的Client类
AlibabaCloud.SDK.Ocr20191230.Client client = CreateClient(Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"), Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")); // 5、这里只是以ocr下的RecognizeBankCard为例,其他能力请使用相应类目的包和类,具体入参设置需要参考具体能力的文档
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为例,其他能力请使用相应类目的包和类,注意,RecognizeBankCardAdvance方法名也需要改成对应能力的方法名。方法名是根据能力名称按照一定规范形成的,如能力名称为SegmentCommonImage,对应方法名应该为SegmentCommonImageAdvance。
AlibabaCloud.SDK.Ocr20191230.Models.RecognizeBankCardResponse recognizeBankCardResponse = client.RecognizeBankCardAdvance(recognizeBankCardAdvanceRequest, runtime);
// 获取整体结果
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);
}
}
}
}
需要修改的地方均在上述代码注释中标明,总结如下:
引入包的时候,需要引入相应类目的包和相关类。包名可参考上文SDK包名称,能力名称可参考对应API文档中的Action参数。
例如,您想使用通用分割能力,通过通用分割API文档可知该能力属于分割抠图类目(imageseg20191230),能力名称为SegmentCommonImage,您需要将代码中的ocr20191230改为imageseg20191230,将RecognizeBankCard改为SegmentCommonImage。
访问的域名一定要修改为相应类目的域名,如果域名类目不匹配会报错
InvalidAction.NotFound
。关于域名详情,请参见访问域名。Client类需要使用相应类目的包下面的Client类。
Request和Response需要使用相应类目的包和类。
调用Client的方法时,方法名需要改成对应能力的方法名。方法名是根据能力名称按照一定规范形成。例如,能力名称为SegmentCommonImage,对应方法名应该为SegmentCommonImageAdvance。
常见问题
调用报错如何处理?
如果您的调用出现报错,请先尝试升级SDK包到最新版本,最新版本请参考各类目SDK链接。如果您的程序中同时引入了多个类目的包,也可以先尝试将这些包都升级到最新版本,避免版本之间的包冲突问题。
OpenAPI界面显示的最新包在nuget仓库中找不到如何处理?
如果您发现OpenAPI界面显示的最新版本的包,在nuget仓库中找不到,这是因为新版本的包刚刚发布,仓库同步可能会有延迟,如果遇到版本不存在的情况,请稍后再试或使用nuget仓库中的最新版本。
技术支持
如果以上方法未能解决您的问题,请通过搜索钉钉群号(23109592)加入阿里云视觉智能开放平台咨询群联系我们。届时会有专业的技术人员与您对接解决问题。
- 本页导读 (1)
- 准备工作
- 配置环境变量
- 代码示例
- 文件在上海地域OSS
- 文件在本地或可访问的URL
- 常见问题
- 调用报错如何处理?
- OpenAPI界面显示的最新包在nuget仓库中找不到如何处理?
- 技术支持