阿里云视觉智能开放平台提供的Java SDK,在传入参数时不仅可以使用图片的URL,还支持直接上传本地文件,本文档为您介绍直接使用本地文件的SDK代码示例。

优先推荐

推荐您优先使用文件URL调用API接口,关于如何通过本地文件生成文件URL的详细操作请参见生成URL

升级说明

阿里云视觉智能开放平台对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>
    说明 您可以通过https://mvnrepository.com/artifact/com.aliyun/SDK包名称查看不同服务SDK的版本。例如通过https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-ocr查看aliyun-java-sdk-ocr的版本。
  • 参数构建和调用方法不同

接入步骤

下面介绍新版本的参数构建和调用方法。

  1. 引入资源。
    如果您使用Maven管理Java项目,可以通过在pom.xml文件中添加Maven依赖安装java SDK。
    <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>aliyun-java-sdk-core</artifactId>
        <version>4.4.8</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.52</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>
    引用成功后如下所示:引用maven
  2. 构建Client。
    示例如下:
      config.accessKeyId="######"; 
      // 你的accessKeyId
      config.accessKeySecret="#######";   
      //你的accessKeySecret
      config.type="access_key";
      config.regionId="cn-shanghai";
      config.endpointType="internal";
      Client client = new Client(config);
      config.endpoint="ocr.cn-shanghai.aliyuncs.com"; 
      //此处endpoint以文字识别为例。不同服务的Endpoint参见访问域名
  3. 调用服务。
    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。调用服务

结果示例

对于同一个接口,如果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"
}

信息参考

更多信息请参见Alibaba Cloud SDK