本文介紹Image Search服務Java SDK的使用方法及樣本。

準備工作

  • 在安裝和使用阿里雲SDK前,確保您已經註冊阿里雲帳號並產生存取金鑰(AccessKey)。詳情請參見t1938336.html#task968
  • 將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. 設定Image Search服務訪問的EndPoint,假定執行個體是在上海地區。
    DefaultProfile.addEndpoint("cn-shanghai", "cn-shanghai", "ImageSearch", "imagesearch.cn-shanghai.aliyuncs.com");
  2. 建立Profile。產生IClientProfile的對象profile,該對象存放AccessKeyID和AccessKeySecret和地區資訊。
    IClientProfile profile = DefaultProfile.getProfile("cn-shanghai", ak, aks);
  3. 建立Client。從IClientProfile類中再產生IAcsClient的對象client,後續獲得response都需要從IAcsClient中獲得。
    IAcsClient client = new DefaultAcsClient(profile);

新增圖片

增加圖片時:
  • 對於商品Image Search,使用者可以選擇指定或者不指定類目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();
}

查詢圖片

查詢圖片時:
  • 對於商品Image Search,使用者可以選擇指定或者不指定類目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();
}