阿里云视觉智能开放平台提供的Java SDK,在传入参数时不仅可以使用图片的URL,还支持直接上传本地文件。本文档为您介绍直接使用本地文件的SDK代码示例。
优先推荐
推荐您优先使用文件URL调用API接口,关于如何通过本地文件生成文件URL的详细操作请参见生成URL。
查看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的版本。
升级说明
阿里云视觉智能开放平台对Java SDK进行了升级增强,升级前传入图片仅支持URL形式,升级后增加支持使用本地文件传入图片。升级前后具体差异如下:
- 引入的POM包不同
以文字识别(ocr)为例。
- 如下所示,旧版本引入的POM为
<artifactId>aliyun-java-sdk-ocr</artifactId>
。 <dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-ocr</artifactId>
<version>${aliyun.ocr.version}</version>
</dependency>
- 如下所示,新版本引入的POM为
<artifactId>ocr20191230</artifactId>
。 <dependency>
<groupId>com.aliyun</groupId>
<artifactId>ocr20191230</artifactId>
<version>${aliyun.ocr.version}</version>
</dependency>
- 参数构建和调用方法不同
接入步骤
下面介绍新版本的参数构建和调用方法。
- 引入资源。
如果您使用Maven管理Java项目,可以通过在
pom.xml文件中添加Maven依赖安装Java SDK。
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.5.14</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.74</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>ocr20191230</artifactId>
<version>${aliyun.ocr.version}</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>facebody20191230</artifactId>
<version>${aliyun.facebody.version}</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>imagerecog20190930</artifactId>
<version>${aliyun.imagerecog.version}</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>imageseg20191230</artifactId>
<version>${aliyun.imageseg.version}</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>imageenhan20190930</artifactId>
<version>${aliyun.imageenhan.version}</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>goodstech20191230</artifactId>
<version>${aliyun.goodstech.version}</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>objectdet20191230</artifactId>
<version>${aliyun.objectdet.version}</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>imgsearch20200320</artifactId>
<version>${aliyun.imgsearch.version}</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>videorecog20200320</artifactId>
<version>${aliyun.videorecog.version}</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>videoseg20200320</artifactId>
<version>${aliyun.videoseg.version}</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>videoenhan20200320</artifactId>
<version>${aliyun.videoenhan.version}</version>
</dependency>
引用成功后如下所示:

- 构建Client。
示例如下:
public static void main(String[] args) throws Exception {
Config config = new Config();
config.accessKeyId="######";
//你的accessKeyId
config.accessKeySecret="######";
//你的accessKeySecret
config.type="access_key";
config.regionId="cn-shanghai";
// config.endpointType="internal"; //默认通过公网访问OSS,如需通过内网请打开这一行
Client client = new Client(config);
RuntimeOptions runtimeOptions = new RuntimeOptions();
//url方式
recognizeBankCard(client,runtimeOptions);
config.endpoint="ocr.cn-shanghai.aliyuncs.com";
//此处endpoint以文字识别为例。不同服务的Endpoint参见访问域名。
}
- 调用服务。
Client已经封装好需要调用的能力,且大多数API支持本地文件。
说明 当前仅ScanImage(内容安全)和ExtendImageStyle(风格迁移)不支持本地文件。
以银行卡识别(RecognizeBankCard)为例,在调用服务时分别使用URL和本地文件。
- 使用URL
- request:RecognizeBankCardRequest
- 方法:recognizeBankCard
- 示例
private static void recognizeBankCard(Client client, RuntimeOptions runtimeOptions) throws Exception {
try {
RecognizeBankCardRequest req = new RecognizeBankCardRequest();
req.imageURL="https://viapi-demo.oss-cn-shanghai.aliyuncs.com/viapi-demo/images/RecognizeBankCard/bankcard.jpg";
RecognizeBankCardResponse rep = client.recognizeBankCard(req, runtimeOptions);
System.out.println("银行卡识别="+JSON.toJSONString(rep));
}
catch (TeaException e){
System.out.println("银行卡识别异常了");
System.out.println(JSON.toJSONString(e.getData()));
}
}
- 使用本地文件
- request:RecognizeBankCardAdvanceRequest
- 方法:recognizeBankCardAdvance
- 示例
private static void recognizeBankCardAdvance(Client client, RuntimeOptions runtimeOptions) throws Exception {
try {
RecognizeBankCardAdvanceRequest req = new RecognizeBankCardAdvanceRequest();
InputStream inputStream = new FileInputStream(new File("/Users/robinqu/Library/bankCard.png"));
req.imageURLObject=inputStream;
RecognizeBankCardResponse rep = client.recognizeBankCardAdvance(req, runtimeOptions);
System.out.println("银行卡识别="+JSON.toJSONString(rep));
}
catch (TeaException e){
System.out.println("银行卡识别异常了");
System.out.println(JSON.toJSONString(e.getData()));
}
}
出现Advance表示使用本地文件,没有则表示使用公网可以访问的URL。

说明 如果报错信息为java.lang.NoSuchMethodError:okhttp3.Headers.iterator()java/util/Iterator
,请将okhttp升级到4.0以上版本。
结果示例
对于同一个接口,如果SDK中包含类似xxxAdvanceRequest的结构,那么这个接口支持本地文件上传,否则不支持。
例如下图中ChangeImageSize是支持本地文件的,而RecolorImage则不支持本地文件,只支持URL。

异常相关
如果调用发生异常,则异常信息会在
TeaException.getData()
中显示出来。
{
"RequestId": "6B8A283F-DFFA-4F30-9DF1-A85D8609AD88",
"HostId": "ocr.cn-shanghai.aliyuncs.com",
"Code": "InvalidImage.Content",
"Message": "Invalid Input - wrong category"
}