本文介绍图像搜索服务.Net SDK的使用方法及示例。

接口列表

接口名称 接口说明
Add 增加图片。
SearchImageByPic 使用图片进行搜索。
SearchImageByName 指定名称,使用已入库的图片进行搜索。
Delete 删除图片。

准备工作

在安装和使用阿里云SDK前,确保您已经注册阿里云账号并生成访问密钥(AccessKey)。详情请参见创建AccessKey

  1. 在解决方案资源管理器面板中,右键单击您的项目,选择管理NuGet程序包菜单。
  2. 在打开的NuGet管理面板中单击浏览选项卡输入AlibabaCloud.SDK.ImageSearch20201214 。
  3. 单击安装。

Add接口

  • 代码示例
    using AlibabaCloud.OpenApiClient.Models;
    using AlibabaCloud.SDK.ImageSearch20201214.Models;
    using AlibabaCloud.SDK.ImageSearch20201214;
    using AlibabaCloud.TeaUtil.Models;
    using System;
    using System.IO;
    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";
                // 必填,图像搜索实例名称。
                request.InstanceName = "XXXXXXXXXXXXXXXXXXXXXXXXX";
                // 图片内容,最多支持 4MB大小图片以及5s的传输等待时间。当前仅支持PNG、JPG、JPEG、BMP、GIF、WEBP、TIFF、PPM格式图片;
                // 对于商品、通用图片搜索,图片长和宽的像素必须都大于等于100且小于等于4096;
                 // 对于布料搜索,图片长和宽的像素必须都大于等于448且小于等于4096;
                // 图像中不能带有旋转信息
                request.PicContentObject = fs;
                // 选填,整数类型属性,可用于查询时过滤,查询时会返回该字段。
                //  例如不同的站点的图片/不同用户的图片,可以设置不同的IntAttr,查询时通过过滤来达到隔离的目的
                request.IntAttr = 99;
                 // 选填,字符串类型属性,最多支持 128个字符。可用于查询时过滤,查询时会返回该字段。
                request.StrAttr = "aliyun.com";
                // 选填,图片类目。
                // 1. 对于商品搜索:若设置类目,则以设置的为准;若不设置类目,将由系统进行类目预测,预测的类目结果可在Response中获取 。
                // 2. 对于通用搜索:不论是否设置类目,系统会将类目设置为88888888。
                request.CategoryId = 5;
                // 选填,是否需要进行主体识别,默认为true。
               // 1.为true时,由系统进行主体识别,以识别的主体进行搜索,主体识别结果可在Response中获取。
                //  设置的region 区域不要超过图片的边界。
               // 2. 为false时,则不进行主体识别,以整张图进行搜索。
                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("result:" + Newtonsoft.Json.JsonConvert.SerializeObject(response))
                }
                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:{"Headers":{"date":"Mon, 11 Jan 2021 06:57:16 GMT","connection":"keep-alive","access-control-allow-origin":"*","access-control-allow-methods":"POST, GET, OPTIONS","access-control-allow-headers":"X-Requested-With, X-Sequence, _aop_secret, _aop_signature","access-control-max-age":"172800","x-acs-request-id":"6D32C931-D584-4927-938A-6053AE9B630D"},"Body":{"Message":"success","RequestId":"6D32C931-D584-4927-938A-6053AE9B630D","Code":0,"PicInfo":{"Region":"112,440,76,387","CategoryId":88888888},"Success":true}}

SearchImageByPic接口

  • 代码示例
    using AlibabaCloud.OpenApiClient.Models;
    using AlibabaCloud.SDK.ImageSearch20201214.Models;
    using AlibabaCloud.SDK.ImageSearch20201214;
    using AlibabaCloud.TeaUtil.Models;
    using System;
    using System.IO;
    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;
                // 图片内容,最多支持 4MB大小图片以及5s的传输等待时间。当前仅支持PNG、JPG、JPEG、BMP、GIF、WEBP、TIFF、PPM格式图片;
            
                // 对于商品、商标、通用图片搜索,图片长和宽的像素必须都大于等于100且小于等于4096;
            
                // 对于布料搜索,图片长和宽的像素必须都大于等于448且小于等于4096;
            
                // 图像中不能带有旋转信息
                request.PicContentObject = fs;
                // 选填,是否需要进行主体识别,默认为true。
                // 1.为true时,由系统进行主体识别,以识别的主体进行搜索,主体识别结果可在Response中获取。
               // 2. 为false时,则不进行主体识别,以整张图进行搜索。
                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 区域不要超过图片的边界。
                // 若用户设置了Region,则不论Crop参数为何值,都将以用户输入Region进行搜索。
                request.Region = "66,333,98,356";
                // 必填,图像搜索实例名称。
                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,
                "Score":1.0
                "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"},{.....}],
            "MultiRegion":[
                {"Region":"112,440,76,387"}
            ]
         }
    }

SearchImageByName接口

  • 代码示例
    using AlibabaCloud.OpenApiClient.Models;
    using AlibabaCloud.SDK.ImageSearch20201214.Models;
    using AlibabaCloud.SDK.ImageSearch20201214;
    using AlibabaCloud.TeaUtil.Models;
    using System;
    using System.IO;
    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;
                // 必填,图像搜索实例名称
                request.InstanceName = "XXXXXXXXXX";
                // 必填,图片名称,最多支持 512个字符。
                // 1. ProductId + PicName唯一确定一张图片
                request.PicName = "xusong.jpg";
                 // 必填,商品id,最多支持 512个字符。
                // 一个商品可有多张图片。
                request.ProductId = "1001";
                try
                {
                    SearchImageByNameResponse response = client.SearchImageByName(request);
                    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,
                "Score":1.0
                "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"},
                {...}
            ],
           "MultiRegion":[
                {"Region":"112,440,76,387"}
           ]
        }
    }

Delete接口

  • 代码示例
    using AlibabaCloud.OpenApiClient.Models;
    using AlibabaCloud.SDK.ImageSearch20201214.Models;
    using AlibabaCloud.SDK.ImageSearch20201214;
    using AlibabaCloud.TeaUtil.Models;
    using System;
    using System.IO;
    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();
               // 必填,图像搜索实例名称。
                request.InstanceName = "XXXXXXXXXXX";
                 // 必填,图片名称,最多支持 512个字符。
                 // 1. ProductId + PicName唯一确定一张图片。
                request.PicName = "xusong.jpg";
                //  选填,图片名称。若不指定本参数,则删除ProductId下所有图片;若指定本参数,则删除ProductId+PicName指定的图片。
                request.ProductId = "1001";
                try
                {
                    DeleteImageResponse response = client.DeleteImage(request);
                    Console.WriteLine("RequestId:" + response.Body.RequestId);
                    Console.WriteLine("Message:" + response.Body.Message);
                    Console.WriteLine("Code:" + response.Body.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