本文介绍图像搜索服务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和地域信息。
IClientProfile profile = DefaultProfile.getProfile("cn-shanghai", ak, aks);
- 创建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();
}