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

接口列表

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

准备工作

  pip install alibabacloud_imagesearch20201214

Add接口

  • 代码示例
    from alibabacloud_imagesearch20201214.client import Client
    from alibabacloud_imagesearch20201214.models import AddImageAdvanceRequest
    from alibabacloud_tea_openapi.models import Config
    from alibabacloud_oss_util.models import RuntimeOptions
    def addImage():
        request = AddImageAdvanceRequest()
        # 必填,图像搜索实例名称。
        request.instance_name = '<instanceName>'
        # 必填,商品id,最多支持 512个字符。
        # 一个商品可有多张图片。
        request.product_id = '<productId>'
        # 必填,图片名称,最多支持 512个字符。
        # 1. ProductId + PicName唯一确定一张图片。
        # 2. 如果多次添加图片具有相同的ProductId + PicName,以最后一次添加为准,前面添加的图片将被覆盖。
        request.pic_name = '<picName>'
        # 图片内容,最多支持 4MB大小图片以及5s的传输等待时间。当前仅支持PNG、JPG、JPEG、BMP、GIF、WEBP、TIFF、PPM格式图片;
        # 对于商品、商标、通用图片搜索,图片长和宽的像素必须都大于等于100且小于等于4096;
        # 对于布料搜索,图片长和宽的像素必须都大于等于448且小于等于4096;
        # 图像中不能带有旋转信息
        f = open('<filePath>', 'rb')
        request.pic_content_object = f
        # 选填,商品类目。
        # 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 区域不要超过图片的边界。
        # 若用户设置了Region,则不论Crop参数为何值,都将以用户输入Region进行搜索。
        # 对于布料图片搜索,此参数会被忽略,系统会以整张图进行搜索。
        request.region = "167,467,221,407"
        config = Config()
        config.access_key_id = '<accessKeyId>'
        config.access_key_secret = '<accessKeySecret>'
        config.endpoint = 'imagesearch.[regionId].aliyuncs.com'
        config.region_id = '<regionId>'
        config.type = 'access_key'
        client = Client(config)
        runtime_option = RuntimeOptions()
        response = client.add_image_advance(request, runtime_option)
        print(response.to_map())
        f.close()
    if __name__ == '__main__':
        addImage()
  • 结果示例
    {
      'RequestId': '7F769FFC-4F45-476E-BE6C-E4EF82E012A7',
      'Success': True,
      'Message': 'success',
      'Code': 0,
      'PicInfo': {
        'CategoryId': 20,
        'Region': '474,747,497,784'
      }
    }

SearchImageByPic接口

  • 代码示例
    from alibabacloud_imagesearch20201214.client import Client
    from alibabacloud_imagesearch20201214.models import SearchImageByPicAdvanceRequest
    from alibabacloud_tea_openapi.models import Config
    from alibabacloud_oss_util.models import RuntimeOptions
    def searchImageByPic() :
        request = SearchImageByPicAdvanceRequest()
        # 必填,图像搜索实例名称。
        request.instance_name = '<instanceName>'
        # 图片内容,最多支持 4MB大小图片以及5s的传输等待时间。当前仅支持PNG、JPG、JPEG、BMP、GIF、WEBP、TIFF、PPM格式图片;
        # 对于商品、商标、通用图片搜索,图片长和宽的像素必须都大于等于100且小于等于4096;
        # 对于布料搜索,图片长和宽的像素必须都大于等于448且小于等于4096;
        # 图像中不能带有旋转信息
        f = open('<filePath>', 'rb')
        request.pic_content_object = f
        # 选填,商品类目。
        # 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 区域不要超过图片的边界。
        # 若用户设置了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\""
        config = Config()
        config.access_key_id = '<accessKeyId>'
        config.access_key_secret = '<accessKeySecret>'
        config.endpoint = 'imagesearch.[regionId].aliyuncs.com'
        config.region_id = '<regionId>'
        config.type = 'access_key'
        client = Client(config)
        runtime_option = RuntimeOptions()
        response = client.search_image_by_pic_advance(request, runtime_option)
        print(response.to_map())
        f.close()
    if __name__ == '__main__':
        searchImageByPic()
  • 结果示例
    {
      'RequestId': '53C481F3-E064-428D-AB25-B6C57A704E68',
      'Success': True,
      'Code': 0,
      'Msg': 'success',
      'Auctions': [{
        'CategoryId': 20,
        'ProductId': 'test-version-001',
        'PicName': 'test-version-001.jpg',
        'CustomContent': None,
        'Score': 1.0
        'SortExprValues': '5.37633353624177e+24;0',
        'IntAttr': None,
        'StrAttr': None
      }, {
        'CategoryId': 20,
        'ProductId': 'test_0426_1',
        'PicName': 'test_0426_1.png',
        'CustomContent': None,
        'Score': 1.0,
        'SortExprValues': '2.71303606033325;263',
        'IntAttr': None,
        'StrAttr': None
      }],
      'Head': {
        'DocsReturn': 5,
        'DocsFound': 5,
        'SearchTime': 295
      },
      'PicInfo': {
        'CategoryId': 20,
        'Region': '474,747,497,784',
        'AllCategories': [{
          'Id': 0,
          'Name': 'Tops'
        }, {
          'Id': 1,
          'Name': 'Dress'
        }, {
          'Id': 2,
          'Name': 'Bottoms'
        }, {
          'Id': 3,
          'Name': 'Bag'
        }, {
          'Id': 4,
          'Name': 'Shoes'
        }, {
          'Id': 5,
          'Name': 'Accessories'
        }, {
          'Id': 6,
          'Name': 'Snack'
        }, {
          'Id': 7,
          'Name': 'Makeup'
        }, {
          'Id': 8,
          'Name': 'Bottle'
        }, {
          'Id': 9,
          'Name': 'Furniture'
        }, {
          'Id': 20,
          'Name': 'Toy'
        }, {
          'Id': 21,
          'Name': 'Underwear'
        }, {
          'Id': 22,
          'Name': 'Digital device'
        }, {
          'Id': 88888888,
          'Name': 'Other'
        }],
        'MultiRegion': [{
            'Region': '112,440,76,387'
         }]
      }
    }

SearchImageByName接口

  • 代码示例
    from alibabacloud_imagesearch20201214.client import Client
    from alibabacloud_imagesearch20201214.models import SearchImageByNameRequest
    from alibabacloud_tea_openapi.models import Config
    from alibabacloud_oss_util.models import RuntimeOptions
    def searchImageByName() :
        request = SearchImageByNameRequest()
        # 必填,图像搜索实例名称。
        request.instance_name = '<instanceName>'
        # 必填,商品id,最多支持 512个字符。
        # 一个商品可有多张图片。
        request.product_id = '<productId>'
        # 必填,图片名称,最多支持 512个字符。
        # 1. ProductId + PicName唯一确定一张图片。
        # 2. 如果多次添加图片具有相同的ProductId + PicName,以最后一次添加为准,前面添加的图片将被覆盖。
        request.pic_name = '<picName>'
        # 选填,商品类目。
        # 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 区域不要超过图片的边界。
        # 若用户设置了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\""
        config = Config()
        config.access_key_id = '<accessKeyId>'
        config.access_key_secret = '<accessKeySecret>'
        config.endpoint = 'imagesearch.[regionId].aliyuncs.com'
        config.region_id = '<regionId>'
        config.type = 'access_key'
        client = Client(config)
        response = client.search_image_by_name(request)
        print(response.to_map())
    if __name__ == '__main__':
        searchImageByName()
  • 结果示例
    {
      'RequestId': '7BC00158-3B9B-49C4-9E25-FFEC28AF3CE8',
      'Success': True,
      'Code': 0,
      'Msg': 'success',
      'Auctions': [{
        'CategoryId': 20,
        'ProductId': 'test-version-001',
        'PicName': 'test-version-001.jpg',
        'CustomContent': None,
        'score':1.0,
        'SortExprValues': '5.37633353624177e+24;0',
        'IntAttr': None,
        'StrAttr': None
      }, {
        'CategoryId': 20,
        'ProductId': 'test_0426_1',
        'PicName': 'test_0426_1.png',
        'CustomContent': None,
        'score':1.0,
        'SortExprValues': '2.71303606033325;263',
        'IntAttr': None,
        'StrAttr': None
      }],
      'Head': {
        'DocsReturn': 5,
        'DocsFound': 5,
        'SearchTime': 15
      },
      'PicInfo': {
        'CategoryId': 20,
        'Region': None,
        'AllCategories': [{
          'Id': 0,
          'Name': 'Tops'
        }, {
          'Id': 1,
          'Name': 'Dress'
        }, {
          'Id': 2,
          'Name': 'Bottoms'
        }, {
          'Id': 3,
          'Name': 'Bag'
        }, {
          'Id': 4,
          'Name': 'Shoes'
        }, {
          'Id': 5,
          'Name': 'Accessories'
        }, {
          'Id': 6,
          'Name': 'Snack'
        }, {
          'Id': 7,
          'Name': 'Makeup'
        }, {
          'Id': 8,
          'Name': 'Bottle'
        }, {
          'Id': 9,
          'Name': 'Furniture'
        }, {
          'Id': 20,
          'Name': 'Toy'
        }, {
          'Id': 21,
          'Name': 'Underwear'
        }, {
          'Id': 22,
          'Name': 'Digital device'
        }, {
          'Id': 88888888,
          'Name': 'Other'
        }],
        'MultiRegion': [{
            'Region': '112,440,76,387'
         }]
      }
    }

Delete接口

  • 代码示例
    def deleteImage() :
        request = DeleteImageRequest()
        # 必填,图像搜索实例名称。
        request.instance_name = '<instanceName>'
        # 必填,商品id,最多支持 512个字符。
        # 一个商品可有多张图片。
        request.product_id = '<productId>'
        # 必填,图片名称,最多支持 512个字符。
        # 1. ProductId + PicName唯一确定一张图片。
        # 2. 如果多次添加图片具有相同的ProductId + PicName,以最后一次添加为准,前面添加的图片将被覆盖。
        request.pic_name = '<picName>'
        config = Config()
        config.access_key_id = '<accessKeyId>'
        config.access_key_secret = '<accessKeySecret>'
        config.endpoint = 'imagesearch.[regionId].aliyuncs.com'
        config.region_id = '<regionId>'
        config.type = 'access_key'
        client = Client(config)
        response = client.delete_image(request)
        print(response.to_map())
    if __name__ == '__main__':
        deleteImage()
  • 结果示例
    {
      'RequestId': '9ADA959B-B639-4B3B-841D-2399F1C34DA8',
      'Success': True,
      'Message': 'success',
      'Code': 0
    }