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

介面列表

介面名稱 介面說明
Add 增加圖片。
SearchImageByPic 使用圖片進行搜尋。
SearchImageByName 指定名稱,使用已入庫的圖片進行搜尋。
Delete 刪除圖片。

SDK使用樣本

單擊Java SDK下載使用樣本。

準備工作

  • 在安裝和使用阿里雲SDK前,確保您已經註冊阿里雲帳號並產生存取金鑰(AccessKey)。詳情請參見t1938336.html#task968
  • 將SDK添加到專案中
    引入ImageSearch SDK依賴,通過Maven二方庫依賴的方式將ImageSearch的SDK加入到自己的專案中。
      <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>imagesearch</artifactId>
            <version>3.0.1</version>
       </dependency>

Add介面

  • 程式碼範例
    import com.aliyun.imagesearch.Client;
    import com.aliyun.imagesearch.models.AddImageAdvanceRequest;
    import com.aliyun.imagesearch.models.AddImageResponse;
    import com.aliyun.imagesearch.models.Config;
    import com.aliyun.tea.TeaException;
    import com.aliyun.teautil.models.RuntimeOptions;
    import java.io.FileInputStream;
    import java.io.InputStream;
    public class Add {
        public static void main(String[] args) throws Exception {
            Config authConfig = new Config();
            authConfig.accessKeyId = "XXXXXX";
            authConfig.accessKeySecret = "XXXXXXXXX";
            authConfig.type = "access_key";
            authConfig.endpoint = "imagesearch.cn-shanghai.aliyuncs.com";
            authConfig.regionId = "cn-shanghai";
            Client client = new Client(authConfig);
            AddImageAdvanceRequest request = new AddImageAdvanceRequest();
            // 必填,Image Search執行個體名稱。
            request.instanceName = "XXXXXXXXXXX";
             // 必填,商品id,最多支援 512個字元。
             // 一個商品可有多張圖片。
            request.productId = "test";
            // 必填,圖片名稱,最多支援 512個字元。
           // 1. ProductId + PicName唯一確定一張圖片。
           // 2. 如果多次添加圖片具有相同的ProductId + PicName,以最後一次添加為準,前面添加的圖片將被覆蓋。
            request.picName = "1000";
            // 選填,圖片類目。
            // 1. 對於商品搜尋:若設定類目,則以設定的為準;若不設定類目,將由系統進行類目預測,預測的類目結果可在Response中擷取 。
            // 2. 對於布料、商標、通用搜尋:不論是否設定類目,系統會將類目設定為88888888。
            request.categoryId = 3;
             // 選填,使用者自訂的內容,最多支援4096個字元。
            // 查詢時會返回該欄位。例如可添加圖片的描述等文本。
            request.customContent = "this is a simple test";
             // 選填,整數類型屬性,可用於查詢時過濾,查詢時會返回該欄位。
            //  例如不同的網站的圖片/不同使用者的圖片,可以設定不同的IntAttr,查詢時通過過濾來達到隔離的目的
            request.intAttr = 56;
            // 選填,字串類型屬性,最多支援 128個字元。可用於查詢時過濾,查詢時會返回該欄位。
            request.strAttr = "test";
            // 選填,是否需要進行主體識別,預設為true。
            // 1.為true時,由系統進行主體識別,以識別的主體進行搜尋,主體識別結果可在Response中擷取。
            // 2. 為false時,則不進行主體識別,以整張圖進行搜尋。
            // 3.對於布料圖片搜尋,此參數會被忽略,系統會以整張圖進行搜尋。
            request.crop = true;
            // 選填,圖片的主體地區,格式為 x1,x2,y1,y2, 其中 x1,y1 是左上方的點,x2,y2是右下角的點。
           // 若使用者佈建了Region,則不論Crop參數為何值,都將以使用者輸入Region進行搜尋。
           // 對於布料圖片搜尋,此參數會被忽略,系統會以整張圖進行搜尋。
            request.region = "167,467,221,407";
            RuntimeOptions runtimeOptions = new RuntimeOptions();
            String picName = "D:/123.jpg";
            InputStream inputStream = new FileInputStream(picName);
            // 圖片內容,最多支援 2MB大小圖片以及5s的傳輸等待時間。當前僅支援jpg和png格式圖片;
            // 對於商品、商標、通用圖片搜尋,圖片長和寬的像素必須都大於等於200,並且小於等於1024;
            // 對於布料搜尋,圖片長和寬的像素必須都大於等於448,並且小於等於1024;
            // 映像中不能帶有旋轉資訊
            request.picContentObject = inputStream;
            try {
                AddImageResponse response = client.addImageAdvance(request,runtimeOptions);
                System.out.println("success: " + response.success + ". message: " + response.message
                        + ". categoryId: " + response.picInfo.categoryId + ". region:" + response.picInfo.region
                        + ". requestId: " + response.requestId);
            } catch (TeaException e) {
                System.out.println(e.getCode());
                System.out.println(e.getData());
                System.out.println(e.getMessage());
                e.printStackTrace();
            }
        }
    }
  • 結果樣本
    success: true. message: success.
    categoryId: 3. region:167,467,221,407.
    requestId: 52EC4508-5BC0-4FA0-A85E-B2AD2F3B1EB1

SearchImageByPic介面

  • 程式碼範例
    import com.aliyun.imagesearch.Client;
    import com.aliyun.imagesearch.models.Config;
    import com.aliyun.imagesearch.models.SearchImageByPicAdvanceRequest;
    import com.aliyun.imagesearch.models.SearchImageByPicResponse;
    import com.aliyun.tea.TeaException;
    import com.aliyun.teautil.models.RuntimeOptions;
    import java.io.FileInputStream;
    import java.io.InputStream;
    import java.util.List;
    public class SearchImageByPic {
        public static void main(String[] args) throws Exception {
            Config authConfig = new Config();
            authConfig.accessKeyId = "XXXXXXXX";
            authConfig.accessKeySecret = "XXXXXXXXXX";
            authConfig.type = "access_key";
            authConfig.endpoint = "imagesearch.cn-shanghai.aliyuncs.com";
            authConfig.regionId = "cn-shanghai";
            Client client = new Client(authConfig);
            SearchImageByPicAdvanceRequest request = new SearchImageByPicAdvanceRequest();
            // 必填,Image Search執行個體名稱。
            request.instanceName = "XXXXXXXXX";
            // 選填,商品類目。
            // 1. 對於商品搜尋:若設定類目,則以設定的為準;若不設定類目,將由系統進行類目預測,預測的類目結果可在Response中擷取 。
            // 2. 對於布料、商標、通用搜尋:不論是否設定類目,系統會將類目設定為88888888。
            request.categoryId = 3;
            // 選填,返回結果的數目。取值範圍:1-100。預設值:10。
            request.num = 10;
             // 選填,返回結果的起始位置。取值範圍:0-499。預設值:0。
            request.start = 0;
              // 選填,是否需要進行主體識別,預設為true。
            // 1.為true時,由系統進行主體識別,以識別的主體進行搜尋,主體識別結果可在Response中擷取。
            // 2. 為false時,則不進行主體識別,以整張圖進行搜尋。
            // 3.對於布料圖片搜尋,此參數會被忽略,系統會以整張圖進行搜尋。
            request.crop = true;
              // 選填,圖片的主體地區,格式為 x1,x2,y1,y2, 其中 x1,y1 是左上方的點,x2,y2是右下角的點。
            // 若使用者佈建了Region,則不論Crop參數為何值,都將以使用者輸入Region進行搜尋。
            // 3.對於布料圖片搜尋,此參數會被忽略,系統會以整張圖進行搜尋。
            request.region="167,467,221,407";
            // 選填,過濾條件
            // int_attr支援的操作符有>、>=、<、<=、=,str_attr支援的操作符有=和!=,多個條件之支援AND和OR進行串連。
            // 樣本:
            //  1. 根據IntAttr過濾結果,int_attr>=100
            //  2. 根據StrAttr過濾結果,str_attr!="value1"
            //  3. 根據IntAttr和StrAttr聯合過濾結果,int_attr=1000 AND str_attr="value1"
            request.filter="int_attr=56 AND str_attr=\"test\"";
            InputStream inputStream = new FileInputStream("D:/123.jpg");
             // 圖片內容,最多支援 2MB大小圖片以及5s的傳輸等待時間。當前僅支援jpg和png格式圖片;
            // 對於商品、商標、通用圖片搜尋,圖片長和寬的像素必須都大於等於200,並且小於等於1024;
            // 對於布料搜尋,圖片長和寬的像素必須都大於等於448,並且小於等於1024;
            // 映像中不能帶有旋轉資訊
            request.picContentObject = inputStream;
            request.num = 10;
            request.start = 0;
            RuntimeOptions runtimeObject =  new RuntimeOptions();
            try {
                SearchImageByPicResponse response = client.searchImageByPicAdvance(request, runtimeObject);
                System.out.println(response.requestId);
                System.out.println(response.picInfo.categoryId);
                System.out.println(response.picInfo.region);
              //  SearchImageByPicResponse.SearchImageByPicResponseAuctions[] auctions = response.auctions;
                List<SearchImageByPicResponse.SearchImageByPicResponseAuctions> auctions = response.auctions;
                for(SearchImageByPicResponse.SearchImageByPicResponseAuctions auction:auctions) {
                    System.out.println(auction.categoryId + " " + auction.picName + " " + auction.productId + " " + auction.customContent + " " + auction.sortExprValues + " " + auction.strAttr + " " + auction.intAttr);
                }
            } catch (TeaException e) {
                System.out.println(e.getCode());
                System.out.println(e.getData());
                System.out.println(e.getMessage());
                e.printStackTrace();
            }
        }
    }
  • 結果樣本
    09BE019A-AE3D-4D22-99C9-10533D8AC631
    3
    167,467,221,407
    3 1000 test this is a simple test 5.37633353624177e+24;0 test 56

SearchImageByName介面

  • 程式碼範例
    import com.aliyun.imagesearch.Client;
    import com.aliyun.imagesearch.models.Config;
    import com.aliyun.imagesearch.models.SearchImageByNameRequest;
    import com.aliyun.imagesearch.models.SearchImageByNameResponse;
    import com.aliyun.tea.TeaException;
    import com.aliyun.teautil.models.RuntimeOptions;
    import java.util.List;
    public class  SearchImageByName{
        public static void main(String[] args) throws Exception {
            //配置
            Config authConfig = new Config();
            authConfig.accessKeyId = "XXXXXX";
            authConfig.accessKeySecret = "XXXXXXXXX";
            authConfig.type = "access_key";
            authConfig.endpoint = "imagesearch.cn-shanghai.aliyuncs.com";
            authConfig.regionId = "cn-shanghai";
            Client client = new Client(authConfig);
            SearchImageByNameRequest request = new SearchImageByNameRequest();
            // 必填,Image Search執行個體名稱。
            request.instanceName = "XXXXXXXXX";
             // 必填,商品id,最多支援 512個字元。
            // 一個商品可有多張圖片。
            request.productId = "test";
             // 必填,圖片名稱,最多支援 512個字元。
            // 1. ProductId + PicName唯一確定一張圖片。
            request.picName = "1000";
             // 選填,商品類目。
            // 1. 對於商品搜尋:若設定類目,則以設定的為準;若不設定類目,將由系統進行類目預測,預測的類目結果可在Response中擷取 。
            // 2. 對於布料、商標、通用搜尋:不論是否設定類目,系統會將類目設定為88888888。
            request.categoryId = 3;
            // 選填,返回結果的數目。取值範圍:1-100。預設值:10。
            request.num =10;
             // 選填,返回結果的起始位置。取值範圍:0-499。預設值:0。
            request.start =0;
            // 選填,過濾條件
            // int_attr支援的操作符有>、>=、<、<=、=,str_attr支援的操作符有=和!=,多個條件之支援AND和OR進行串連。
            // 樣本:
            //  1. 根據IntAttr過濾結果,int_attr>=100
            //  2. 根據StrAttr過濾結果,str_attr!="value1"
            //  3. 根據IntAttr和StrAttr聯合過濾結果,int_attr=1000 AND str_attr="value1"
            request.filter = "int_attr=56 AND str_attr =\"test\"";
            RuntimeOptions runtimeObject =  new RuntimeOptions();
            try {
                SearchImageByNameResponse response = client.searchImageByName(request, runtimeObject);
                System.out.println(response.requestId);
                System.out.println(response.picInfo.categoryId);
                System.out.println(response.picInfo.region);
                List<SearchImageByNameResponse.SearchImageByNameResponseAuctions> auctions = response.auctions;
                for(SearchImageByNameResponse.SearchImageByNameResponseAuctions auction:auctions) {
                    System.out.println(auction.categoryId + " " + auction.picName + " " + auction.productId + " " + auction.customContent + " " + auction.sortExprValues + " " + auction.strAttr + " " + auction.intAttr);
                }
            } catch (TeaException e) {
                System.out.println(e.getCode());
                System.out.println(e.getData());
                System.out.println(e.getMessage());
                e.printStackTrace();
            }
        }
    }
  • 結果樣本
    8F2441C8-EA05-461B-A4AC-5F5DE25FAC21
    3
    null
    3 1000 test this is a simple test 5.37633353624177e+24;0 test 56

Delete介面

  • 程式碼範例
    import com.aliyun.imagesearch.Client;
    import com.aliyun.imagesearch.models.Config;
    import com.aliyun.imagesearch.models.DeleteImageRequest;
    import com.aliyun.imagesearch.models.DeleteImageResponse;
    import com.aliyun.tea.TeaException;
    import com.aliyun.teautil.models.RuntimeOptions;
    public class Delete {
        public static void main(String[] args) throws Exception {
            Config authConfig = new Config();
            authConfig.accessKeyId = "XXXXXXXX";
            authConfig.accessKeySecret = "XXXXXXXXXX";
            authConfig.type = "access_key";
            authConfig.endpoint = "imagesearch.cn-shanghai.aliyuncs.com";
            authConfig.regionId = "cn-shanghai";
            Client client = new Client(authConfig);
            DeleteImageRequest request = new DeleteImageRequest();
            // 必填,Image Search執行個體名稱。
            request.instanceName = "XXXXXXXXXXXX";
            // 必填,商品id,最多支援 512個字元。
            // 一個商品可有多張圖片。
            request.productId = "test";
             // 選填,圖片名稱。若不指定本參數,則刪除ProductId下所有圖片;若指定本參數,則刪除ProductId+PicName指定的圖片。
            request.picName = "1000";
            RuntimeOptions runtimeOptions = new RuntimeOptions();
            try {
                DeleteImageResponse response = client.deleteImage(request, runtimeOptions);
                System.out.println("requestId: " + response.requestId + ". success: " + response.success + ". message: " + response.message);
            } catch (TeaException e) {
                System.out.println(e.getCode());
                System.out.println(e.getData());
                System.out.println(e.getMessage());
                e.printStackTrace();
            }
        }
    }
  • 結果樣本
    requestId: 927AE217-90E1-4B48-9413-7508FCB4CE51. success: true. message: success