0%

Aliyun

前言

因为在本次课程中本来要使用的的微软的azure服务因为在国外而且服务部署很不稳定无法使用所以打算将文中使用的bing rearch v7换成阿里云的图像搜素服务进行fastai chapter 2的代码演示。所以本次博客记录的是对阿里云图像搜索SDK(阿里云的图像搜索服务在python上并不支持api的使用方式给出的是sdk的使用办法虽然说对于个人用户而言更加的安全高效但是需要对课程中的代码进行大修改)的学习及使用核对课程代码的修改运行。

阿里云python sdk

接口列表

接口名称 接口说明
Add 增加图片。
SearchImageByPro 使用图片进行搜索。
SearchImageByName 指定名称,使用已入库的图片进行搜索。
SearchImageByTotal 使用文本进行搜索。(仅在服务类型为商品名和收藏类时可以使用。)
Delete 删除图片。
UpdateImage 修改图片。
Dictal 查询你的消息。
DumpMeta 无信息导出任务。
DumpMetaList 无信息导出任务列表。
BatchTask 批量任务。
BatchTaskList 批量任务列表。
CompareSimilarByImage 比较所有图片的相似度。

准备工作

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

  • 使用如下方式安装依赖包。

1
pip install alibabacloud_imagesearch20201214

Add 接口

  • example:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    from alibabacloud_imagesearch20201214.client import Client
    from alibabacloud_imagesearch20201214.models import AddImageAdvanceRequest
    from alibabacloud_tea_openapi.models import Config
    from alibabacloud_tea_util.models import RuntimeOptions
    def addImage():
    request = AddImageAdvanceRequest()
    # 必填,图像搜索实例名称。注意是实例名称不是实例ID。购买后通过上云层管控台实例信息一栏查看:https://imagesearch.console.aliyun.com/overview
    request.instance_name = '<instanceName>'
    # 必填,商品id,最多支持 256个字符。
    # 一个商品可有多张图片。
    request.product_id = '<productId>'
    # 必填,图片名称,最多支持 256个字符。
    # 1. ProductId + PicName唯一确定一张图片。
    # 2. 如果多次添加图片具有相同的ProductId + PicName,以最后一次添加为准,前面添加的图片将被覆盖。
    request.pic_name = '<picName>'
    # 图片内容,最多支持 4MB大小图片以及5s的传输等待时间。当前仅支持PNG、JPG、JPEG、BMP、GIF、WEBP、TIFF、PPM格式图片;
    # 对于商品、商标、通用图片搜索,图片长和宽的像素必须都大于等于100且小于等于4096;
    # 对于布料搜索,图片长和宽的像素必须都大于等于448且小于等于4096;
    # 图像中不能带有旋转信息;

    # 使用URL方式释放下方注释即可。
    # url = '<fileUrl>'
    # f = BytesIO(requests.get(url).content)

    # 使用图片file新增
    f = open('<filePath>', 'rb')

    request.pic_content_object = f
    # 选填,商品类目。
    # 1. 对于商品搜索:若设置类目,则以设置的为准;若不设置类目,将由系统进行类目预测,预测的类目结果可在Response中获取 。
    # 2. 对于布料、商标、通用搜索:不论是否设置类目,系统会将类目设置为88888888。
    request.category_id = 3
    # 选填,用户自定义的内容,最多支持4096个字符。
    # 查询时会返回该字段。例如可添加图片的描述等文本。
    request.custom_content = "this is a simple test"
    # 选填,整数类型属性,可用于查询时过滤,查询时会返回该字段。
    # 例如不同的站点的图片/不同用户的图片,可以设置不同的IntAttr,查询时通过过滤来达到隔离的目的
    request.int_attr = 56
    # 选填,字符串类型属性,最多支持 128个字符。可用于查询时过滤,查询时会返回该字段。
    request.str_attr = "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()
    # 创建AK/SK参考:https://help.aliyun.com/document_detail/116401.htm
    # 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
    # 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
    # 本示例以将AccessKey ID和AccessKey Secret保存在环境变量为例说明。您也可以根据业务需要,保存到配置文件里。
    config.access_key_id = os.environ['CC_AK_ENV']
    config.access_key_secret = os.environ['CC_SK_ENV']
    # 请更换成您购买实例的区域,例如购买的是杭州区域,则endpoint='imagesearch.cn-hangzhou.aliyuncs.com'
    config.endpoint = 'imagesearch.[regionId].aliyuncs.com'

    # 以下为内网(VPC)访问方式
    # 说明:内网(VPC)访问:仅限同区域ECS或资源的访问,例如您购买的图像搜索实例是华东2(上海),那么您的ECS或资源也必须在华东2(上海)才能通过内网VPC地址访问图搜服务,否则会调用不通,如果遇到调用不通,请先检查您的ECS或资源与图像搜索是否在同一个区域。
    # config.endpointType = 'internal' // 如果是内网访问图像搜索服务,则endpointType为必填项,值统一为'internal'
    # config.endpoint = 'imagesearch-vpc.[regionId].aliyuncs.com' // 为内网访问(VPC)地址,请您更换为您购买实例的区域,例如您购买实例的区域为杭州,则endpoint='imagesearch-vpc.cn-hangzhou.aliyuncs.com'

    # 请您更换成您购买实例的区域,例如您购买的实例区域为杭州,则更换为regionId='cn-hangzhou'
    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()
  • result:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    {
    'RequestId': '7F769FFC-4F45-476E-BE6C-E4EF82E012A7',
    'Success': True,
    'Message': 'success',
    'Code': 0,
    'PicInfo': {
    'CategoryId': 20,
    'Region': '474,747,497,784'
    }
    }

    SearchImagebyName 接口

  • example:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    from alibabacloud_imagesearch20201214.client import Client
    from alibabacloud_imagesearch20201214.models import SearchImageByNameRequest
    from alibabacloud_tea_openapi.models import Config
    from alibabacloud_tea_util.models import RuntimeOptions
    def searchImageByName() :
    request = SearchImageByNameRequest()
    # 必填,图像搜索实例名称。注意是实例名称不是实例ID。购买后通过上云层管控台实例信息一栏查看:https://imagesearch.console.aliyun.com/overview
    request.instance_name = '<instanceName>'
    # 必填,商品id,最多支持 256个字符。
    # 一个商品可有多张图片。
    request.product_id = '<productId>'
    # 必填,图片名称,最多支持 256个字符。
    # 1. ProductId + PicName唯一确定一张图片。
    # 2. 如果多次添加图片具有相同的ProductId + PicName,以最后一次添加为准,前面添加的图片将被覆盖。
    request.pic_name = '<picName>'
    # 选填,商品类目。
    # 1. 对于商品搜索:若设置类目,则以设置的为准;若不设置类目,将由系统进行类目预测,预测的类目结果可在Response中获取 。
    # 2. 对于布料、商标、通用搜索:不论是否设置类目,系统会将类目设置为88888888。
    request.category_id = 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()
    # 创建AK/SK参考:https://help.aliyun.com/document_detail/116401.htm
    # 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
    # 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
    # 本示例以将AccessKey ID和AccessKey Secret保存在环境变量为例说明。您也可以根据业务需要,保存到配置文件里。
    config.access_key_id = os.environ['CC_AK_ENV']
    config.access_key_secret = os.environ['CC_SK_ENV']
    # 请更换成您购买实例的区域,例如购买的是杭州区域,则endpoint='imagesearch.cn-hangzhou.aliyuncs.com'
    config.endpoint = 'imagesearch.<regionId>.aliyuncs.com'

    # 以下为内网(VPC)访问方式
    # 说明:内网(VPC)访问:仅限同区域ECS或资源的访问,例如您购买的图像搜索实例是华东2(上海),那么您的ECS或资源也必须在华东2(上海)才能通过内网VPC地址访问图搜服务,否则会调用不通,如果遇到调用不通,请先检查您的ECS或资源与图像搜索是否在同一个区域。
    # config.endpointType = 'internal' // 如果是内网访问图像搜索服务,则endpointType为必填项,值统一为'internal'
    # config.endpoint = 'imagesearch-vpc.<regionId>.aliyuncs.com' // 为内网访问(VPC)地址,请您更换为您购买实例的区域,例如您购买实例的区域为杭州,则endpoint='imagesearch-vpc.cn-hangzhou.aliyuncs.com'

    # 请您更换成您购买实例的区域,例如您购买的实例区域为杭州,则更换为regionId='cn-hangzhou'
    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()
  • result:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
{
'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'
}]
}
}