本文介绍了如何使用阿里云视觉智能开放平台的Java SDK,具体包括SDK的安装方法以及SDK代码示例。
阿里云视觉智能开放平台各类目视觉AI能力SDK接入、接口使用或问题咨询等,请通过钉钉群(23109592)加入阿里云视觉智能开放平台咨询群联系我们。
本文档介绍旧版Java SDK,最低环境要求Java6。推荐您使用新版Java。
您需要引入的SDK包如下:
安装Alibaba Cloud SDK for Java:aliyun-java-sdk-core。
该SDK包为阿里云Java核心库,无论使用哪个产品的SDK,都必须先安装该核心库。
使用不同服务,就需要下载对应服务的SDK包。具体服务的SDK包名称如下:
AI类目
SDK包名称
SDK链接
Github链接
人脸人体
aliyun-java-sdk-facebody
文字识别
aliyun-java-sdk-ocr
商品理解
aliyun-java-sdk-goodstech
内容审核
aliyun-java-sdk-imageaudit
图像识别
aliyun-java-sdk-imagerecog
图像生产
aliyun-java-sdk-imageenhan
分割抠图
aliyun-java-sdk-imageseg
目标检测
aliyun-java-sdk-objectdet
视觉搜索
aliyun-java-sdk-imgsearch
图像分析处理
aliyun-java-sdk-imageprocess
视频理解
aliyun-java-sdk-videorecog
视频生产
aliyun-java-sdk-videoenhan
视频分割
aliyun-java-sdk-videoseg
准备工作
在使用阿里云SDK前,确保您已经注册阿里云账号并生成访问密钥(AccessKey)。详情请参见创建AccessKey。
已安装Java SDK核心库。 有如下两种方式:
使用依赖包工具安装(推荐)。
使用git clone或其它方法从GitHub下载aliyun-java-sdk-core并自行添加解决方案。
已安装视觉智能API相关服务Java SDK。
查看SDK版本
pom.xml文件中version的值以SDK获取地址中的最新版本为准。您可以通过https://mvnrepository.com/artifact/com.aliyun/SDK包名称
查看不同服务SDK的版本。
例如,通过https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-ocr
可以查看aliyun-java-sdk-ocr的版本。
安装方法1:使用Maven(推荐)
如果您使用Maven管理Java项目,可以通过在pom.xml文件中添加Maven依赖安装Java SDK。
<!-- 核心包,必须引入 -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.6.2</version>
</dependency>
<!-- 能力包,按需引入 -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-ocr</artifactId>
<version>${aliyun.ocr.version}</version>
</dependency>
安装方法2:在集成开发环境(IDE)中导入JAR文件
无论您使用Eclipse还是IntelliJ作为集成开发环境,都可以通过导入JAR文件的方式安装Java SDK。
Eclipse安装
将下载的
aliyun-java-sdk-xxx.jar
文件复制到您的项目文件夹中。在Eclipse中打开您的项目,右键单击该项目,选择Properties。
在弹出的对话框中,单击
添加下载的JAR文件。单击Apply and Close。
IntelliJ安装
将下载的
aliyun-java-sdk-xxx.jar
文件复制到您的项目文件夹中。在IntelliJ中打开您的项目,在菜单栏中单击
。单击Apply,然后单击OK。
配置环境变量
配置环境变量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系统,使配置生效。
SDK示例
本文以RecognizeBankCard为例,SDK示例如下。该方式目前只支持同地域下OSS文件,其他场景请使用新版Java。
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
import com.google.gson.Gson;
import java.util.*;
import com.aliyuncs.ocr.model.v20191230.*;
/*
pom.xml
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.6.0</version>
</dependency>
*/
public class RecognizeBankCard {
public static void main(String[] args) {
// 创建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。运行代码示例前必须先配置环境变量。
DefaultProfile profile = DefaultProfile.getProfile("cn-shanghai", System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
/** use STS Token
DefaultProfile profile = DefaultProfile.getProfile(
"<your-region-id>", // The region ID
System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), // The AccessKey ID of the RAM account
System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"), // The AccessKey Secret of the RAM account
System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN")); // STS Token
**/
IAcsClient client = new DefaultAcsClient(profile);
RecognizeBankCardRequest request = new RecognizeBankCardRequest();
try {
RecognizeBankCardResponse response = client.getAcsResponse(request);
System.out.println(new Gson().toJson(response));
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
System.out.println("ErrCode:" + e.getErrCode());
System.out.println("ErrMsg:" + e.getErrMsg());
System.out.println("RequestId:" + e.getRequestId());
}
}
}
常见问题
报错Caused by: java.lang.ClassNotFoundException......如何解决?
报错信息
Caused by: java.lang.ClassNotFoundException: org.apache.http.conn.ssl.NoopHostnameVerifier
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/conn/ssl/DefaultHostnameVerifier
Caused by: java.lang.ClassNotFoundException: org.apache.http.conn.ssl.DefaultHostnameVerifier
解决方案
将HTTP Client的JAR包提升到4.5.13版本,更多信息,请参见HTTP Client的Maven仓库。
关于升级操作是否会影响原来使用该JAR包的程序,从版本升级上来说一般不会影响。HTTP Client4.3升级到HTTP Client4.5,可能会涉及到一些API的更改,因此某些代码可能需要进行调整才能与新版本兼容。为了确保在升级后不会遇到问题,建议在升级之前进行充分的测试(例如测试是否能跑通,或者在预发环境灰度测试等),并查看Apache HttpClient的发行说明,以便了解任何API变更和已知问题。
后续处理
安装后重新调用报错
报错信息
java.lang.NoSuchMethodError: com.google.gson.JsonParser.parseString(Ljava/lang/String;)Lcom/google/gson/JsonElement;
解决方案:gson包版本的问题,需升级gson版本到2.8.9。
继gson包更新安装后重新调用报错
报错信息
java.lang.NoClassDefFoundError: io/opentracing/util/GlobalTracer
解决方案:引入JAR包opentracing-util和opentracing-api。
继io/opentracing/util/GlobalTracer的问题解决后报错
报错信息
java.lang.NoClassDefFoundError: io/opentracing/noop/NoopTracerFactory
解决方案:安装JAR包opentracing-noop。