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

介面列表

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

準備工作

使用Govendor工具執行以下命令,安裝阿里雲Go SDK:
go get  github.com/aliyun/alibabacloud-sdk/imagesearch-20200212/golang@master

Add介面

  • 程式碼範例
    package main
    import (
      "fmt"
      "os"
      util "github.com/aliyun/tea-util/golang/service"
      imagesearch "github.com/aliyun/alibabacloud-sdk/imagesearch-20200212/golang/client"
    )
    func main() {
      // 初始化 config
      var config = new(imagesearch.Config).SetAccessKeyId("XXXXXXX").
        SetAccessKeySecret("XXXXXXXXXXX").
        SetType("access_key").
        SetEndpoint("imagesearch.cn-shanghai.aliyuncs.com").
        SetRegionId("cn-shanghai")
        // 建立用戶端
      client, err := imagesearch.NewClient(config)
      if err != nil {
        panic(err)
      }
      // 初始化 runtimeObject
      var runtimeObject = new(util.RuntimeOptions)
      b, err := os.Open("D:/123.jpg")
      if err != nil {
        panic(err)
      }
      request := new(imagesearch.AddImageAdvanceRequest).
         // 必填,Image Search執行個體名稱。
        SetInstanceName("XXXXXXXX").
        // 必填,圖片名稱,最多支援 512個字元。
        // 1. ProductId + PicName唯一確定一張圖片。
        // 2. 如果多次添加圖片具有相同的ProductId + PicName,以最後一次添加為準,前面添加的圖片將被覆蓋。
        SetPicName("test").
        // 必填,商品id,最多支援 512個字元。
        // 一個商品可有多張圖片。
        SetProductId("test").
        // 圖片內容,最多支援 2MB大小圖片以及5s的傳輸等待時間。當前僅支援jpg和png格式圖片;
        // 對於商品、通用圖片搜尋,圖片長和寬的像素必須都大於等於200,並且小於等於1024;
        // 映像中不能帶有旋轉資訊
        SetPicContentObject(b).
        // 選填,圖片類目。
        // 1. 對於商品搜尋:若設定類目,則以設定的為準;若不設定類目,將由系統進行類目預測,預測的類目結果可在Response中擷取。
        // 2. 對於布料、通用搜尋:不論是否設定類目,系統會將類目設定為88888888。
        SetCategoryId(2).
        // 選填,是否需要進行主體識別,預設為true。
        // 1.為true時,由系統進行主體識別,以識別的主體進行搜尋,主體識別結果可在Response中擷取。
        // 2. 為false時,則不進行主體識別,以整張圖進行搜尋。
        SetCrop(true).
        // 選填,圖片的主體地區,格式為 x1,x2,y1,y2, 其中 x1,y1 是左上方的點,x2,y2是右下角的點。
        // 若使用者佈建了Region,則不論Crop參數為何值,都將以使用者輸入Region進行搜尋。
        SetRegion("167,477,220,407").
         // 選填,使用者自訂的內容,最多支援 4096個字元。
         // 查詢時會返回該欄位。例如可添加圖片的描述等文本。
        SetCustomContent("this is a simple test!").
         // 選填,整數類型屬性,可用於查詢時過濾,查詢時會返回該欄位。
        //  例如不同的網站的圖片/不同使用者的圖片,可以設定不同的IntAttr,查詢時通過過濾來達到隔離的目的
        SetIntAttr(100).
        // 選填,字串類型屬性,最多支援 128個字元。可用於查詢時過濾,查詢時會返回該欄位。
        SetStrAttr("1")
        // 調用 api
      resp, err := client.AddImageAdvance(request, runtimeObject)
      if err != nil {
        fmt.Println(err.Error())
      }
      fmt.Println(resp)
    }
  • 結果樣本
    {
       "RequestId": "B48CC953-F495-496C-BC96-B96826A860F1",
       "Success": true,
       "Message": "success",
       "Code": 0,
       "PicInfo": {
          "CategoryId": 2,
          "Region": "167,477,220,407"
       }
    }

SearchImageByPic介面

  • 程式碼範例
    package main
    import (
      "fmt"
       "os"
      util "github.com/aliyun/tea-util/golang/service"
      imagesearch "github.com/aliyun/alibabacloud-sdk/imagesearch-20200212/golang/client"
    )
    func main() {
      // 初始化 config
      var config = new(imagesearch.Config).SetAccessKeyId("xxxxxxxxxx").
        SetAccessKeySecret("xxxxxxxxxxxx").
        SetType("access_key").
        SetEndpoint("imagesearch.cn-shanghai.aliyuncs.com").
        SetRegionId("cn-shanghai")
        // 建立用戶端
      client, err := imagesearch.NewClient(config)
      if err != nil {
        panic(err)
      }
      // 初始化 runtimeObject
      var runtimeObject = new(util.RuntimeOptions)
         b, err := os.Open("D:/123.jpg")
      if err != nil {
        panic(err)
      }
      request := new(imagesearch.SearchImageByPicAdvanceRequest).
        // 必填,Image Search執行個體名稱。
         SetInstanceName("xxxxxxxxxx").
         // 圖片內容,最多支援 2MB大小圖片以及5s的傳輸等待時間。當前僅支援jpg和png格式圖片;
         // 對於商品、通用圖片搜尋,圖片長和寬的像素必須都大於等於200,並且小於等於1024;
         // 映像中不能帶有旋轉資訊
         SetPicContentObject(b).
         // 選填,商品類目。
         // 1. 對於商品搜尋:若設定類目,則以設定的為準;若不設定類目,將由系統進行類目預測,預測的類目結果可在Response中擷取 。
         // 2. 對於布料、通用搜尋:不論是否設定類目,系統會將類目設定為88888888。
         SetCategoryId(2).
        // 選填,返回結果的數目。取值範圍:1-100。預設值:10。
         SetNum(10).
         // 選填,返回結果的起始位置。取值範圍:0-499。預設值:0
         SetStart(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"
         SetFilter("int_attr=101 OR str_attr=\"2\"").
        // 選填,是否需要進行主體識別,預設為true。
        // 1.為true時,由系統進行主體識別,以識別的主體進行搜尋,主體識別結果可在Response中擷取。
       // 2. 為false時,則不進行主體識別,以整張圖進行搜尋。
         SetCrop(true).
        // 選填,圖片的主體地區,格式為 x1,x2,y1,y2, 其中 x1,y1 是左上方的點,x2,y2是右下角的點。
        // 若使用者佈建了Region,則不論Crop參數為何值,都將以使用者輸入Region進行搜尋。
         SetRegion("167,476,220,407")
        // 調用 api
      resp, err := client.SearchImageByPicAdvance(request, runtimeObject)
      if err != nil {
        fmt.Println(err.Error())
      }
      fmt.Println(resp)
    }
  • 結果樣本
    {
       "RequestId": "F468F52E-963A-452B-88E7-1C43F92C9D81",
       "Success": true,
       "Code": 0,
       "Msg": "success",
       "Auctions": [
          {
             "CategoryId": 2,
             "ProductId": "php",
             "PicName": "test",
             "CustomContent": "this is a simple test!",
             "SortExprValues": "292.509948730469;16",
             "IntAttr": 100,
             "StrAttr": "1"
          }
       ],
       "Head": {
          "DocsReturn": 1,
          "DocsFound": 1,
          "SearchTime": 121
       },
       "PicInfo": {
          "CategoryId": 2,
          "Region": "167,476,220,407",
          "AllCategories": [
             {
                "Id": 0,
                "Name": "Tops"
             },
             .......
             {
                "Id": 88888888,
                "Name": "Other"
             }
          ]
       }
    }

SearchImageByName介面

  • 程式碼範例
    package main
    import (
      "fmt"
      util "github.com/aliyun/tea-util/golang/service"
      imagesearch "github.com/aliyun/alibabacloud-sdk/imagesearch-20200212/golang/client"
    )
    func main() {
      // 初始化 config
      var config = new(imagesearch.Config).SetAccessKeyId("xxxxx").
        SetAccessKeySecret("XXXXXXXXXXXXXXX").
        SetType("access_key").
        SetEndpoint("imagesearch.cn-shanghai.aliyuncs.com").
        SetRegionId("cn-shanghai")
        // 建立用戶端
      client, err := imagesearch.NewClient(config)
      if err != nil {
        panic(err)
      }
      // 初始化 runtimeObject
      var runtimeObject = new(util.RuntimeOptions)
      request := new(imagesearch.SearchImageByNameRequest).
        // 必填,Image Search執行個體名稱。
        SetInstanceName("XXXXXXXXXXX").
        // 必填,圖片名稱,最多支援512個字元。
        // 1. ProductId + PicName唯一確定一張圖片。
        SetPicName("test").
         // 必填,商品id,最多支援512個字元。
         // 一個商品可有多張圖片。
        SetProductId("php").
         // 選填,商品類目。
         // 1. 對於商品搜尋:若設定類目,則以設定的為準;若不設定類目,將由系統進行類目預測,預測的類目結果可在Response中擷取 。
         // 2. 對於布料、通用搜尋:不論是否設定類目,系統會將類目設定為88888888。
        SetCategoryId(2).
        // 選填,返回結果的數目。取值範圍:1-100。預設值:10。
        SetNum(10).
        // 選填,返回結果的起始位置。取值範圍:0-499。預設值:0。
        SetStart(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"
        SetFilter("str_attr=\"1\"")  //設定字串過濾條件
        // 調用api
      resp, err := client.SearchImageByName(request, runtimeObject)
      if err != nil {
        fmt.Println(err.Error())
      }
      fmt.Println(resp)
    }
  • 結果樣本
    {
       "RequestId": "9011A4A3-7642-44C5-AA33-6E38BA2EA3F1",
       "Success": true,
       "Code": 0,
       "Msg": "success",
       "Auctions": [
          {
             "CategoryId": 2,
             "ProductId": "php",
             "PicName": "test",
             "CustomContent": "this is a simple test!",
             "SortExprValues": "7.33136443711219e+24;0",
             "IntAttr": 100,
             "StrAttr": "1"
          }
       ],
       "Head": {
          "DocsReturn": 1,
          "DocsFound": 1,
          "SearchTime": 12
       },
       "PicInfo": {
          "CategoryId": 2,
          "Region": null,
          "AllCategories": [
             {
                "Id": 0,
                "Name": "Tops"
             },
            .......
             {
                "Id": 88888888,
                "Name": "Other"
             }
          ]
       }
    }

Delete介面

  • 程式碼範例
    package main
    import (
      "fmt"
      util "github.com/aliyun/tea-util/golang/service"
      imagesearch "github.com/aliyun/alibabacloud-sdk/imagesearch-20200212/golang/client"
    )
    func main() {
      // 初始化 config
      var config = new(imagesearch.Config).SetAccessKeyId("XXXXXXXX").
        SetAccessKeySecret("XXXXXXXX").
        SetType("access_key").
        SetEndpoint("imagesearch.cn-shanghai.aliyuncs.com").
        SetRegionId("cn-shanghai")
        // 建立用戶端
      client, err := imagesearch.NewClient(config)
      if err != nil {
        panic(err)
      }
      // 初始化 runtimeObject
      var runtimeObject = new(util.RuntimeOptions)
      request := new(imagesearch.DeleteImageRequest).
        // 必填,Image Search執行個體名稱。
        SetInstanceName("XXXXXXXX").
           // 必填,圖片名稱,最多支援 512個字元。
        // 1. ProductId + PicName唯一確定一張圖片。
        SetPicName("test").
         //  選填,圖片名稱。若不指定本參數,則刪除ProductId下所有圖片;若指定本參數,則刪除ProductId+PicName指定的圖片。
        SetProductId("php")    
        // 調用 api
      resp, err := client.DeleteImage(request, runtimeObject)
      if err != nil {
        fmt.Println(err.Error())
      }
      fmt.Println(resp)
    }
  • 結果樣本
    {
       "RequestId": "C9432066-8918-447F-858B-B4B11E2A6941",
       "Success": true,
       "Message": "success",
       "Code": 0
    }