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

介面列表

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

準備工作

通過NuGet封裝管理員來安裝,在方案總管面板中,按右鍵您的專案選擇管理NuGet程式包菜單,在開啟的NuGet管理面板中單擊瀏覽選項卡輸入AlibabaCloud.SDK.ImageSearch 1.0.3,選擇並單擊安裝即可。

Add介面

  • 程式碼範例
    using AlibabaCloud.Commons.Models;
    using AlibabaCloud.ImageSearch;
    using AlibabaCloud.ImageSearch.Models;
    using AlibabaCloud.TeaUtil.Models;
    using System;
    using System.IO;
    using Tea;
    namespace Test
    {
        class Add
        {
            static void Main(string[] args)
            {
                // Console.WriteLine("Hello World!");
                Config config = new Config();
                config.AccessKeyId = "XXXXXXXXXXX";
                config.AccessKeySecret = "XXXXXXXXXXXXXXXXXXXXXXXX";
                config.Endpoint = "imagesearch.cn-shanghai.aliyuncs.com";
                config.RegionId = "cn-shanghai";
                config.Type = "access_key";
                Client client = new Client(config);
                FileStream fs = File.OpenRead("D:/111.jpg");
                AddImageAdvanceRequest request = new AddImageAdvanceRequest();
                // 必填,圖片名稱,最多支援 512個字元。
                 // 1. ProductId + PicName唯一確定一張圖片。
               // 2. 如果多次添加圖片具有相同的ProductId + PicName,以最後一次添加為準,前面添加的圖片將被覆蓋
                request.PicName = "xusong.jpg";
                // 必填,商品id,最多支援 512個字元。
                // 一個商品可有多張圖片。
                request.ProductId = "1001";
                // 必填,Image Search執行個體名稱。
                request.InstanceName = "XXXXXXXXXXXXXXXXXXXXXXXXX";
                // 圖片內容,最多支援 2MB大小圖片以及5s的傳輸等待時間。當前僅支援jpg和png格式圖片;
                // 對於商品、商標、通用圖片搜尋,圖片長和寬的像素必須都大於等於200,並且小於等於1024;
                // 對於布料搜尋,圖片長和寬的像素必須都大於等於448,並且小於等於1024;
                // 映像中不能帶有旋轉資訊
                request.PicContentObject = fs;
                // 選填,整數類型屬性,可用於查詢時過濾,查詢時會返回該欄位。
                //  例如不同的網站的圖片/不同使用者的圖片,可以設定不同的IntAttr,查詢時通過過濾來達到隔離的目的
                request.IntAttr = 99;
                 // 選填,字串類型屬性,最多支援 128個字元。可用於查詢時過濾,查詢時會返回該欄位。
                request.StrAttr = "aliyun.com";
                // 選填,圖片類目。
                // 1. 對於商品搜尋:若設定類目,則以設定的為準;若不設定類目,將由系統進行類目預測,預測的類目結果可在Response中擷取 。
                // 2. 對於布料、商標、通用搜尋:不論是否設定類目,系統會將類目設定為88888888。
                request.CategoryId = 5;
                // 選填,是否需要進行主體識別,預設為true。
               // 1.為true時,由系統進行主體識別,以識別的主體進行搜尋,主體識別結果可在Response中擷取。
               // 2. 為false時,則不進行主體識別,以整張圖進行搜尋。
               // 3.對於布料圖片搜尋,此參數會被忽略,系統會以整張圖進行搜尋。
                request.Crop = true;
                // 選填,圖片的主體地區,格式為 x1,x2,y1,y2, 其中 x1,y1 是左上方的點,x2,y2是右下角的點。
               // 若使用者佈建了Region,則不論Crop參數為何值,都將以使用者輸入Region進行搜尋。
                // 對於布料圖片搜尋,此參數會被忽略,系統會以整張圖進行搜尋。
                request.Region = "66,333,97,356";
                RuntimeOptions runtimeObject = new RuntimeOptions();
                try
                {
                    AddImageResponse response = client.AddImageAdvance(request, runtimeObject);
                    Console.WriteLine("RequestId:" + response.RequestId);
                     Console.WriteLine("Message:" + response.Message);
                    Console.WriteLine("Success:" + response.Success);
                    Console.WriteLine("Code:" + response.Code);
                    Console.WriteLine("PicInfo.CategoryId:" + response.PicInfo.CategoryId);
                    Console.WriteLine("PicInfo.Region:" + response.PicInfo.Region);
                }
                catch (TeaUnretryableException e)
                {
                    Console.WriteLine("InnerException結果:" + e.InnerException.Message);
                    Console.WriteLine("Data結果:" + e.Data);
                    Console.WriteLine("Message結果:" + e.Message);
                    Console.WriteLine("列印String:" + e.ToString());
                }
            }
        }
    }
  • 結果樣本
    RequestId:247D5DAC-EBDD-49DC-973B-463B36C6BB41
    Message:success
    Success:True
    Code:0
    PicInfo.CategoryId:5
    PicInfo.Region:66,333,97,356

SearchImageByPic介面

  • 程式碼範例
    using AlibabaCloud.ImageSearch;
    using AlibabaCloud.ImageSearch.Models;
    using AlibabaCloud.TeaUtil.Models;
    using System;
    using System.IO;
    using Tea;
    namespace Test
    {
        class SearchImageByPic
        {
            static void Main(string[] args)
            {
                Config config = new Config();
                config.AccessKeyId = "XXXXXXXX";
                config.AccessKeySecret = "XXXXXXXXXXXXX";
                config.Endpoint = "imagesearch.cn-shanghai.aliyuncs.com";
                config.RegionId = "cn-shanghai";
                config.Type = "access_key";
                Client client = new Client(config);
                FileStream fs = File.OpenRead("D:/123.jpg");
                SearchImageByPicAdvanceRequest request = new SearchImageByPicAdvanceRequest();
                // 選填,商品類目。
               // 1. 對於商品搜尋:若設定類目,則以設定的為準;若不設定類目,將由系統進行類目預測,預測的類目結果可在Response中擷取 。
               // 2. 對於布料、商標、通用搜尋:不論是否設定類目,系統會將類目設定為88888888。
                request.CategoryId = 5;
                // 圖片內容,最多支援 2MB大小圖片以及5s的傳輸等待時間。當前僅支援jpg和png格式圖片;
                // 對於商品、商標、通用圖片搜尋,圖片長和寬的像素必須都大於等於200,並且小於等於1024;
               // 對於布料搜尋,圖片長和寬的像素必須都大於等於448,並且小於等於1024;
               // 映像中不能帶有旋轉資訊
                request.PicContentObject = fs;
                // 選填,是否需要進行主體識別,預設為true。
                // 1.為true時,由系統進行主體識別,以識別的主體進行搜尋,主體識別結果可在Response中擷取。
               // 2. 為false時,則不進行主體識別,以整張圖進行搜尋。
               // 3.對於布料圖片搜尋,此參數會被忽略,系統會以整張圖進行搜尋。
                request.Crop = true;
                // 選填,過濾條件
               // 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=99";
                // 選填,圖片的主體地區,格式為 x1,x2,y1,y2, 其中 x1,y1 是左上方的點,x2,y2是右下角的點。
                // 若使用者佈建了Region,則不論Crop參數為何值,都將以使用者輸入Region進行搜尋。
                // 3.對於布料圖片搜尋,此參數會被忽略,系統會以整張圖進行搜尋。
                request.Region = "66,333,98,356";
                // 必填,Image Search執行個體名稱。
                request.InstanceName = "XXXXXX";
                RuntimeOptions runtimeObject = new RuntimeOptions();
                try
                {
                    SearchImageByPicResponse response = client.SearchImageByPicAdvance(request, runtimeObject);
                    String result = Newtonsoft.Json.JsonConvert.SerializeObject(response);
                    Console.WriteLine("result:" + result);
                    }
                catch (TeaUnretryableException e)
                {
                    Console.WriteLine("InnerException結果:" + e.InnerException.Message);
                    Console.WriteLine("Data結果:" + e.Data);
                    Console.WriteLine("Message結果:" + e.Message);
                    Console.WriteLine("列印String:" + e.ToString());
                }
            }
        }
    }
  • 結果樣本
    result:
    {
        "RequestId":"632814A0-F34D-46FB-882D-81D74E7C3290",
        "Success":true,
        "Code":0,
        "Msg":"success",
        "Auctions":[
            {
                "CategoryId":0,
                "ProductId":"test",
                "PicName":"test.jpg",
                "CustomContent":null,
                "SortExprValues":"7.33136443711219;0",
                "IntAttr":null,
                "StrAttr":null
            },
            {......}
            ],
        "Head":{
            "DocsReturn":4,
            "DocsFound":4,
            "SearchTime":155
        },
        "PicInfo":{
            "CategoryId":0,
            "Region":"202,596,155,637",
            "AllCategories":[{"Id":0,"Name":"Tops"},{.....}]
             }
    }

SearchImageByName介面

  • 程式碼範例
    using AlibabaCloud.ImageSearch;
    using AlibabaCloud.ImageSearch.Models;
    using AlibabaCloud.TeaUtil.Models;
    using System;
    using System.IO;
    using Tea;
    namespace Test
    {
        class SearchImageByName
        {
            static void Main(string[] args)
            {
                Config config = new Config();
                config.AccessKeyId = "XXXXXXXX";
                config.AccessKeySecret = "XXXXXXXXXXX";
                config.Endpoint = "imagesearch.cn-shanghai.aliyuncs.com";
                config.RegionId = "cn-shanghai";
                config.Type = "access_key";
                Client client = new Client(config);
                
                SearchImageByNameRequest request = new SearchImageByNameRequest();
                // 選填,商品類目。
               // 1. 對於商品搜尋:若設定類目,則以設定的為準;若不設定類目,將由系統進行類目預測,預測的類目結果可在Response中擷取 。
               // 2. 對於布料、商標、通用搜尋:不論是否設定類目,系統會將類目設定為88888888。
                request.CategoryId = 5;
                // 必填,Image Search執行個體名稱
                request.InstanceName = "XXXXXXXXXX";
                // 必填,圖片名稱,最多支援 512個字元。
                // 1. ProductId + PicName唯一確定一張圖片
                request.PicName = "xusong.jpg";
                 // 必填,商品id,最多支援 512個字元。
                // 一個商品可有多張圖片。
                request.ProductId = "1001";
                RuntimeOptions runtimeObject = new RuntimeOptions();
                try
                {
                    SearchImageByNameResponse response = client.SearchImageByName(request,runtimeObject);
                    String result = Newtonsoft.Json.JsonConvert.SerializeObject(response);
                    Console.WriteLine("result:" + result);
                }
                catch (TeaUnretryableException e)
                {
                    Console.WriteLine("InnerException結果:" + e.InnerException.Message);
                    Console.WriteLine("Data結果:" + e.Data);
                    Console.WriteLine("Message結果:" + e.Message);
                    Console.WriteLine("列印String:" + e.ToString());
                }
            }
        }
    }
  • 結果樣本
    result:
    {
        "RequestId":"5B16E5CD-FE8A-4A4E-A90B-02A5C9F8BD81",
        "Success":true,
        "Code":0,
        "Msg":"success",
        "Auctions":[
            {
                "CategoryId":0,
                "ProductId":"test",
                "PicName":"test.jpg",
                "CustomContent":null,
                "SortExprValues":"7.33136443711219;0",
                "IntAttr":null,
                "StrAttr":null
            },
            {....}
        ],
        "Head":{
            "DocsReturn":4,
            "DocsFound":4,
            "SearchTime":50
        },
        "PicInfo":{
            "CategoryId":0,
            "Region":null,
            "AllCategories":[
                {"Id":0,"Name":"Tops"},
                {...}
            ]
        }
    }

Delete介面

  • 程式碼範例
    using AlibabaCloud.ImageSearch;
    using AlibabaCloud.ImageSearch.Models;
    using AlibabaCloud.TeaUtil.Models;
    using System;
    using System.IO;
    using Tea;
    namespace Test
    {
        class Delete
        {
            static void Main(string[] args)
            {
                Config config = new Config();
                config.AccessKeyId = "XXXXXXXXX";
                config.AccessKeySecret = "XXXXXXXXX";
                config.Endpoint = "imagesearch.cn-shanghai.aliyuncs.com";
                config.RegionId = "cn-shanghai";
                config.Type = "access_key";
                Client client = new Client(config);
                DeleteImageRequest request = new DeleteImageRequest();
               // 必填,Image Search執行個體名稱。
                request.InstanceName = "XXXXXXXXXXX";
                 // 必填,圖片名稱,最多支援 512個字元。
                 // 1. ProductId + PicName唯一確定一張圖片。
                request.PicName = "xusong.jpg";
    //  選填,圖片名稱。若不指定本參數,則刪除ProductId下所有圖片;若指定本參數,則刪除ProductId+PicName指定的圖片。
                request.ProductId = "1001";
                RuntimeOptions runtimeObject = new RuntimeOptions();
                try
                {
                    DeleteImageResponse response = client.DeleteImage(request,runtimeObject);
                    Console.WriteLine("RequestId:" + response.RequestId);
                    Console.WriteLine("Message:" + response.Message);
                    Console.WriteLine("Code:" + response.Code);
                }
                catch (TeaUnretryableException e)
                {
                    Console.WriteLine("InnerException結果:" + e.InnerException.Message);
                    Console.WriteLine("Data結果:" + e.Data);
                    Console.WriteLine("Message結果:" + e.Message);
                    Console.WriteLine("列印String:" + e.ToString());
                }
            }
        }
    }
  • 結果樣本
    RequestId:D9BDEAE0-674C-4126-9D76-A79F0BE9E881
    Message:success
    Code:0