全部产品
云市场

图像上传

更新时间:2019-09-04 19:50:57

本文介绍如何将图像上传到图像搜索服务。

图片上传方式

图像搜索有两种方式可以实现图片上传,一种是通过图像搜索产品API,另一种方式是通过OSSImport这个工具来实现图片上传。

  • 如果您希望上传少量的图片,建议您使用API方式。详情请参考新增图片。如果您选用此方式,请忽略以下内容。
  • 如果您是企业级的用户,或者您希望批量上传图片,建议您使用OSSImport工具进行图片上传。具体步骤请参考操作步骤

工具简介

OSSImport是阿里云OSS提供的一款将数据迁移至OSS存储空间(Bucket)的工具。您可以将OSSImport部署在本地服务器或云上ECS实例内,轻松将您本地或其它云存储的数据迁移到OSS。

使用OSSImport上传图片具有以下优势:

  • 保持图片快速更新到图像搜索引擎。
  • 同一个OSS存储空间可供不同环境使用,像开发项目,线上项目等。
  • 根据业务需要,更好地组织和管理多种图片的来源。
  • 更好地管理复杂环境的项目,比如,开发项目,UAT项目等。
  • 优化使用网络带宽:一次上传,多次使用。
  • 使用这个工具,您可以将图像搜索管理产业化。

图片上传操作步骤

前提条件

  • 单张上传的图片小于2MB。
  • 图片的高度和宽度在200px到1024px之间,更高的分辨率对于提高搜索的准确率没有作用。

操作步骤

  1. 下载OSSImport工具。

    OSSImport有单机模式和分布式模式两种部署方式。

    • 单机模式:当您需要迁移的数据小于30TB时,推荐部署单机模式。您可以将OSSImport部署在任意一台可以访问您待迁移的数据,且可以访问OSS的机器上。点击这里下载
    • 分布式模式:当您需要迁移的数据大于30TB时,推荐使用分布式模式。您可以将OSSImport部署在任意多台可以访问您待迁移数据,且可以访问OSS的机器上。点击这里下载。

    当您待迁移的数据过大时,为了节约时间,您可以将OSSImport部署到与您OSS相同地域的ECS实例上,并通过专线将源数据存放的服务器挂载到阿里云VPC网络中。多台ECS实例将数据通过内网迁移至OSS,会极大的提升数据迁移效率。

  2. 开通对象存储OSS。

    如果您尚未开通OSS,请参考OSS官方开通文档进行开通。

  3. 创建相应的存储空间(bucket),请参考OSS创建存储空间。请确保开通的OSS服务以及创建的bucket与已购买的图像搜索服务在同一个地域。

  4. 导入数据。

    完成存储空间(bucket)创建后,需要将增量的数据导入到您的 bucket 中,为此我们约定如下:

  • 图像搜索服务不限定路径(Path),您可以自定义路径,在 提交增量 步骤中传入即可。
  • 在您定义的路径下需要创建 increment.meta 文件,以存储增量任务相关内容,具体内容格式为:
    • 每行对应一个商品(商品图片搜索)或者一张图片(通用图片搜索)。
    • 每个商品/图片由Json格式表示,具体字段含义如下表:
字段名 类型 含义 说明
operator String 操作类型 ADD表示新增商品/图片。

DELETE表示删除商品/图片。
item_id String 商品/图片唯一标识符 对于商品图片搜索为商品 ID。

对于通用图片搜索为图片名称。
cat_id Integer 类目信息 对于商品图片搜索该处不填或者参考类目参考

对于通用图片搜索为该处不填或者填 88888888。
cust_content String 用户自定义内容 该处内容会在搜索结果中透出,系统只负责透传。
pic_list Array 图片列表 此处为需要上传的图片名称,系统会处理对应的图片。
  • increment.meta参考示例:

    1. {"operator":"ADD","item_id":"1000", "cat_id":0, "cust_content":"k1:v1,k2:v2,k3:v3", "pic_list":["girl_cloth1.jpg"]}
    2. {"operator":"ADD","item_id":"1001", "cat_id":0, "cust_content":"k1:v1,k2:v2,k3:v3", "pic_list":["girl_cloth2.jpg"]}
    3. {"operator":"ADD","item_id":"1002", "cat_id":0, "cust_content":"k1:v1,k2:v2,k3:v3", "pic_list":["girl_cloth3.jpg"]}
    4. {"operator":"ADD","item_id":"1003", "cat_id":0, "cust_content":"k1:v1,k2:v2,k3:v3", "pic_list":["girl_cloth4.jpg"]}
    5. {"operator":"DELETE","item_id":"10005", "pic_list":["fengyi.jpg"]}
    6. {"operator":"DELETE","item_id":"10006"}
  • increment.meta 文件中涉及的图片存放在 increment.meta 文件所在的同一路径下


5. 创建角色。

a) 登录RAM控制台,选择RAM角色管理 > 新建RAM角色

1

b) 选择角色的可信实体类型为阿里云服务

2

c) 填写角色名称,并配置授信服务为图像搜索

3


6. 创建权限策略。

创建完角色之后,角色是没有任何权限的,需要创建一个权限策略来为服务账号来授予相应的权限。 以用户的 bucket 为 imagesearch-increment,文件存储路径为 /increment 为例,权限策略如下:

  1. {
  2. "Version": "1",
  3. "Statement": [
  4. {
  5. "Effect": "Allow",
  6. "Action": [
  7. "oss:GetObject"
  8. ],
  9. "Resource": [
  10. "acs:oss:*:*:imagesearch-increment/increment/*"
  11. ]
  12. }
  13. ]
  14. }


7. 将权限策略指派给相应的角色。

a) 在RAM控制台上,选择权限策略管理 > 新建权限策略

4

b) 填写策略名称,选择脚本配置,编辑策略内容,并单击确认

您可以将步骤6创建的权限策略复制到策略内容编辑区域。

5

c) 返回RAM控制台首页,选择RAM角色管理 。在RAM角色名称列,找到创建的角色,并单击添加权限

6

d) 选择自定义权限策略,找到创建的权限策略,单击策略名称,并单击确定

您也可以通过输入关键字来搜索权限策略名称。

7


8. 返回RAM角色管理页面,单击上述新建的角色名称,获取ARN字段,示例如下:

8


9. 连通OSS拉取图片。

a) 开通Image Search,创建实例。

b) 在实例列表页或者实例详情页单击更多>增量按钮,填入相应信息后,单击提交按钮,将触发后台服务从OSS上拉取数据,进行更新。

13

  • ARN:在RAM角色管理页面获取的ARN字段。
  • Bucket 名称:OSS 上创建的相应的 bucket 名称。

    请确保开通的OSS服务与已购买的图像搜索服务在同一个地域。

  • 数据路径:增量数据存储的路径。路径以/符号开头, 如:/imagesearch。

    任务运行完之后,您可以点击实例ID查看增量任务运行的状态:

    10

    如果运行失败,点击查看增量历史获得详细信息。更多信息,请参考常见问题——增量任务提交失败的原因都有哪些?

    11


10. 开始测试任务。

图片上传成功之后,您可以单击实例ID,然后单击测试服务进行图片搜索测试。

12