亚马逊AWS官方博客

使用 Amazon Rekognition 快速构建智能照片库

简介

在数据爆炸式增长的今天,数据在给生活的方方面面提供了便利的同时,也造成了一些困扰。以照片为例,过去以胶卷相框存储的形式被大量电子设备存储逐渐取代,现代虽然提供了更大容量的存储性能,却更难在短时间内找到指定的照片,我们不得不一页页的翻动照片库寻找某一张特定的照片。 AWS 提供了丰富的人工智能服务,在文本处理、语音、图像等方面解决了这些困扰。对于照片的例子而言,Amazon Rekognition 能快速有效的解决这样的问题。

Amazon Rekognition 是一种让您能够轻松为应用程序添加图像分析功能的服务。利用 Rekognition,您可以检测对象、场景和面孔;识别名人;还可以识别图像中的不当内容。您还可以搜索和比较面孔。借助 Rekognition 的 API,您可以快速为应用程序添加基于深度学习的复杂视觉搜索和图像分类功能。

应用场景

  1. 图像审核。在部分场景下,需要鉴定图片是否包含明显和暗示性的内容。例如自动审核提供给幼儿的读物,自动审核影片镜头的合规性。
  2. 对象场景检测。Rekognition 可识别数千种对象 (如车辆、宠物或家具) 并提供置信度。Rekognition 还可以检测出图像内的场景,如日落或沙滩。这可以应用在以图搜图、关键字搜图、图片自动分类等场景中。
  3. 其余图像处理场景。Rekognition 面部分析功能可以定位到图像中的面孔并分析面孔特征;Rekognition 面孔比较功能可以衡量两张图像中的面孔是否属于同一个人;Rekognition 面部识别功能可以在海量图像中找出相似的面部;Rekognition 名人识别功能可以识别出图像中名人的面孔并显示他们的名字。上述四个场景主要涉及到图像中面部元素的识别处理,可以应用在智能家居主客识别、人脸密码、酒店快捷入住等场景中。

效果展示

上传图片。

图一

显示图片,标签均自动生成。

图二

搜索标签。

图三

整体架构

您将使用到 Amazon S3, Amazon Cognito, Amazon Elasticsearch Service, Amazon Rekognition 以及用于生成以上资源的 AWS CloudFormation 来构建智能照片库。整体架构为无服务(Serverless)架构,简要工作流程如下:

  1. 终端用户使用 S3 静态网站功能运行前端静态网站。
  2. 使用 Cognito Federated Identities Pool 验证静态网站登录,生成临时证书赋予静态网站合适的访问后端资源权限。
  3. 静态网站获取存储在 S3 存储桶中的照片对象。
  4. 当上传照片操作触发,先通过 Rekognition 图像审核功能,通过后把照片上传至 S3 存储桶,并通过 Rekognition 对象场景检测功能分析出照片的标签归类,最后把存储信息和标签信息保存在Elasticsearch 中。
  5. 当检索照片操作触发,根据检索的标签调用 Elasticsearch ,根据返回信息显示相应的图片。

图四

构建步骤

在开始之前,请先确保您具有登录 AWS 全球区控制台的账号,并具备管理员权限,您可以先登录控制台并保持窗口开启。

一、   构建照片库环境

在这一模块中,我们将动手搭建照片库的运行环境。

1.  打开 Github 网址: https://github.com/finishy1995/photos-library/archive/v1.4.zip,下载ZIP压缩文件。

2.  解压缩刚下载的ZIP压缩文件。

3.  在AWS 全球区控制台中,在右上角的区域列表里选择 us-east-1 (弗吉尼亚北部)。

图五

4.  在所有服务列表中点击 CloudFormation ,在 CloudFormation 管理控制台上点击“创建新堆栈”。

5.  在“选择一个模版”中,选择“将模版上传到 Amazon S3”,打开刚下载并解压缩好的文件,选择“template”文件并上传。

图六

6.  点击下一步,输入:

a)    堆栈名称: photos-library

b)    照片存储桶: 请输入可以辨识的唯一存储桶名,并记录下来,例: david-test-library

c)    网站存储桶: 请输入可以辨识的唯一存储桶名,并记录下来,例: david-test-library-web

7.  点击下一步,再点击下一步。

8.  勾上“我确认,AWS CloudFormation 可能创建具有自定义名称的 IAM 资源”,点击创建。

9.  请等待堆栈创建完成,这大约需要花费10分钟的时间。在此期间,您可以先阅读 Recognition 的相关信息,了解更多的应用场景:

https://aws.amazon.com/cn/rekognition/

图七

二、   配置照片库

在上一模块中,我们已成功动手搭建了照片库的运行环境;在这一模块中,我们将配置照片库,并显示在网页中。

10.确认堆栈创建成功,把输出值填入下载下来的配置文件中,文件地址为website/js/configuration.js 。其中,AWS_BUCKET_NAME为第6步b的存储桶名,例: david-test-library。

图八

图九

11.记录下输出中的 WebsiteURL,例:
http://david-test-library-web.s3-website-us-east-1.amazonaws.com
12.点击AWS 控制台左上方的服务,选择存储类别下的 S3。点击第6步c的存储桶名,例: david-test-library-web 。

13.将下载下来的 website 文件夹内的文件拖拽到AWS 控制台下,请注意不包含website自身。

图十

14.点击上传,并等待文件上传完成。

15.全选所有文件,点击更多中的公开,弹出的对话框中再次点击公开。

图十一

16.在浏览器中打开第11步记录的URL,您应该可以看到如下页面

图十二

三、   智能化照片库

在上一模块中,我们已成功配置了照片库,并在网页上显示出来;在这一模块中,我们将使用 Rekognition 使其智能化。您可以选择自行编写少量代码来体验 Rekognition 的方便简洁,也可以直接复制我们提供的示例代码。

17.添加代码,文件地址为website/js/common.js ,代码可以添加在文件128行下。示例代码可以直接从 example-code.txt 文件中拷贝,也可以结合代码注释内容并参考 SDK 文档自行编写:
http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Rekognition.html
对于标签,我们默认采用颜色来区分不同的置信度。您也可以通过285行下的代码修改这一设计。

18.在第15步的存储桶中,打开 js 文件夹,点击左侧的上传按钮,将第17步中修改好的 common.js文件添加并上传。

图十三

四、   测试照片库

19.在浏览器中打开第11步记录的URL,点击照片上传按钮 “Browse…”,上传若干张照片,您也可以上传一些不符合鉴定标准的照片。注意,每张照片的上传均需等待页面弹出 Upload Successful 后执行其他操作,您可以在img文件夹下找到示例照片。

20.刷新页面,可以看到刚刚上传的照片和打好的标签已经展示在了页面下方。尝试输入一些标签名称,如“People”等,测试搜索功能。

五、   删除照片库

21.在第15步的存储桶中,全选所有的桶内文件,点击“更多”中的删除,在弹出的对话框中点击删除

图十四

22.类似于第21步的方法,删除另一个创建的存储桶内的所有文件。例:删除存储桶 david-test-library 中的所有文件。

23.在所有服务列表中点击 CloudFormation ,在 CloudFormation 管理控制台上勾选 photos-library 堆栈,在“操作”中选择删除堆栈。

图十五

24.在堆栈成功删除后,智能照片库已完全从您的 AWS 环境中移除。

更多信息

Amazon Rekognition 作为基于深度学习的图像识别服务,能够轻松的适应数百万张图像的搜索、验证和整理工作,在审核图像、员工证扫描、顾客情绪分析、社交网络朋友查询、名人自动识别等场景下具有完善的解决方案和客户案例。同时,通过上面的例子可以发现,使用 Rekignition 仅需要数十行代码即可获取到图像中的信息,可以轻松的将强大的图像识别功能集成到应用程序中,不再需要投入大量的算法研究和改善成本,为图像识别的应用提供了无限的可能和创造力。

获取更多关于 Amazon Rekognition 的信息,请访问:

https://aws.amazon.com/cn/documentation/rekognitio

作者介绍

王元恺

AWS解决方案架构师,有数年C++程序开发以及一年PHP前后端开发经验,同时致力于AWS云服务在国内的应用和推广。熟悉网站架设与网络应用开发,对于TCP/IP及网络协议有自己的理解和实践经验。