本文介绍图像搜索服务Java SDK的使用方法及示例。

准备工作

  • 在安装和使用阿里云SDK前,确保您已经注册阿里云账号并生成访问密钥(AccessKey)。详情请参见创建AccessKey
  • 将SDK添加到项目中
    引入ImageSearch SDK依赖,通过Maven二方库依赖的方式将ImageSearch的SDK加入到自己的项目中。
    <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>aliyun-java-sdk-imagesearch</artifactId>
        <version>1.0.4</version>
    </dependency>
    <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>aliyun-java-sdk-core</artifactId>
        <version>3.2.8</version>
    </dependency>

SDK使用示例

单击Java SDK下载使用示例。

创建Client

  1. 设置图像搜索服务访问的EndPoint,假定实例是在上海区域。
    DefaultProfile.addEndpoint("cn-shanghai", "cn-shanghai", "ImageSearch", "imagesearch.cn-shanghai.aliyuncs.com");
  2. 创建Profile。生成IClientProfile的对象profile,该对象存放AccessKeyID和AccessKeySecret和地域信息。
    // 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
    // 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
    // 本示例以将AccessKey ID和AccessKey Secret保存在环境变量为例说明。您也可以根据业务需要,保存到配置文件里。
    IClientProfile profile = DefaultProfile.getProfile("cn-shanghai", System.getenv("CC_AK_ENV"), System.getenv("CC_SK_ENV"));
  3. 创建Client。从IClientProfile类中再生成IAcsClient的对象client,后续获得response都需要从IAcsClient中获得。
    IAcsClient client = new DefaultAcsClient(profile);

新增图片

增加图片时:
  • 对于商品图像搜索,用户可以选择指定或者不指定类目ID。
  • 对于通用图片搜索,用户不需要指定类目ID。
AddItemRequest request = new AddItemRequest();
request.setInstanceName("testinstance");
request.setCatId("0");
request.setItemId("1000");
request.setCustContent("{\"key\":\"value\"}");

String dressPicPath = "./resources/dress.jpg";
String clothesPicPath = "./resources/clothes.jpg";

// 以字节流的方式读取图片内容, key 为图片名称,value 为图片内容
request.addPicture("dress", getBytes(dressPicPath));
request.addPicture("clothes", getBytes(clothesPicPath));

// 将上述设置的相关字段 build 成 API 接口中指定的 Body 格式,成功返回  true,失败返回 false
if (!request.buildPostContent()) {
        System.out.println("build post content failed.");
            return;
}
AddItemResponse response = null;
try {
        response = client.getAcsResponse(request);
        System.out.println(response.getSuccess());
        System.out.println(response.getRequestId());
        System.out.println(response.getCode());
        System.out.println(response.getMessage());
} catch (ServerException e) {    // 服务端有问题时,会抛出此异常
    e.printStackTrace();
    } catch (ClientException e) {    // Client 端有问题时,会抛出此异常,包括参数无效,或者实例不可用等情况
    e.printStackTrace();
}

查询图片

查询图片时:
  • 对于商品图像搜索,用户可以选择指定或者不指定类目ID,指定了则会从用户指定的类目ID中进行搜索,不指定则会从系统预测出的类目ID中进行搜索。
  • 对于通用图片搜索,用户不需要指定类目ID。
SearchItemRequest request = new SearchItemRequest();
request.setCatId("0");
request.setInstanceName("testintance");
request.setNum(10);
request.setStart(0);

String filePath = "./resources/dress.jpg";
byte[] bytes = getBytes(filePath);
request.setSearchPicture(bytes);

if (!request.buildPostContent()) {
    System.out.println("build post content failed.");
    return;
}

SearchItemResponse response = null;
try {
    response = client.getAcsResponse(request);
    
    System.out.println(response.getSuccess());
    System.out.println(response.getRequestId());
    System.out.println(response.getCode());
    System.out.println(response.getMessage());
    System.out.println(JSONObject.toJSONString(response.getHead()));
    System.out.println(JSONObject.toJSONString(response.getPicInfo()));
    System.out.println(JSONObject.toJSONString(response.getAuctions()));
} catch (ServerException e) {
     e.printStackTrace();
} catch (ClientException e) {
        e.printStackTrace();
}

删除图片

删除图片代码示例如下。
DeleteItemRequest request = new DeleteItemRequest();
request.setInstanceName("testinstance");
request.setItemId("1000");
request.addPicture("shoes1.jpg");
request.addPicture("shoes2.jpg");

if (!request.buildPostContent()) {
    System.out.println("build post content failed.");
    return;
}

DeleteItemResponse response = null;
try {
    response = client.getAcsResponse(request);
    
    System.out.println(response.getSuccess());
    System.out.println(response.getRequestId());
    System.out.println(response.getCode());
    System.out.println(response.getMessage());
} catch (ServerException e) {
        e.printStackTrace();
} catch (ClientException e) {
        e.printStackTrace();
}