本文介绍图像搜索服务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
- 设置图像搜索服务访问的EndPoint,假定实例是在上海区域。
DefaultProfile.addEndpoint("cn-shanghai", "cn-shanghai", "ImageSearch", "imagesearch.cn-shanghai.aliyuncs.com");
- 创建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"));
- 创建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();
}