文档

Java(不推荐)

更新时间:

本文介绍了如何使用阿里云视觉智能开放平台的Java SDK,具体包括SDK的安装方法以及SDK代码示例。

说明

阿里云视觉智能开放平台各类目视觉AI能力SDK接入、接口使用或问题咨询等,请通过钉钉群(23109592)加入阿里云视觉智能开放平台咨询群联系我们。

本文档介绍旧版Java SDK,最低环境要求Java6。推荐您使用新版Java

您需要引入的SDK包如下:

准备工作

  • 在使用阿里云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安装

    1. 将下载的aliyun-java-sdk-xxx.jar文件复制到您的项目文件夹中。

    2. 在Eclipse中打开您的项目,右键单击该项目,选择Properties

    3. 在弹出的对话框中,单击Java Build Path > Libraries > Add JARs添加下载的JAR文件。

    4. 单击Apply and Close

  • IntelliJ安装

    1. 将下载的aliyun-java-sdk-xxx.jar文件复制到您的项目文件夹中。

    2. 在IntelliJ中打开您的项目,在菜单栏中单击File > Project > Structure

    3. 单击Apply,然后单击OK

配置环境变量

配置环境变量ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET

重要
  • 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维,具体操作,请参见创建RAM用户

  • 请不要将AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。

  • Linux和macOS系统配置方法

    1. 在IntelliJ IDEA中打开终端Terminal。

    2. 执行以下命令,配置环境变量。

      <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_IDALIBABA_CLOUD_ACCESS_KEY_SECRET,并写入已准备好的AccessKey ID和AccessKey Secret。然后重启Windows系统。本操作以Windows 10为例进行说明。

    1. 打开文件资源管理器,在此电脑上右键单击属性。

    2. 在右侧导航栏,单击高级系统配置

    3. 系统属性对话框的高级页签下,单击环境变量

    4. 环境变量对话框中,单击新建(W)image.png

    5. 在弹出的新建系统变量对话框中,添加环境变量ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET,并写入已准备好的AccessKey ID和AccessKey Secret。

    6. 重启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变更和已知问题。

后续处理

  1. 安装后重新调用报错

    • 报错信息

      java.lang.NoSuchMethodError: com.google.gson.JsonParser.parseString(Ljava/lang/String;)Lcom/google/gson/JsonElement;
    • 解决方案:gson包版本的问题,需升级gson版本到2.8.9。

  2. 继gson包更新安装后重新调用报错

  3. 继io/opentracing/util/GlobalTracer的问题解决后报错

    • 报错信息

      java.lang.NoClassDefFoundError: io/opentracing/noop/NoopTracerFactory
    • 解决方案:安装JAR包opentracing-noop