亚马逊AWS官方博客

使用 Amazon Rekognition 和图形数据库来了解电影明星的社交网络

Amazon Rekognition 是一种让您能够向应用程序中轻松添加图像分析功能的 AWS 服务。由深度学习提供技术支持的此计算机视觉 API 中增加的最新功能为名人识别。这项简单易用的功能能够检测并识别出各领域数以千计的著名、值得注意或广为人知的人士。用户可以利用该工具根据任何特定兴趣对名人的数字图像库编制索引和进行搜索。

我们看到客户存储个人相关数据的一种常见方式是使用图形数据库。在之前的博文中我们曾仔细讨论过,像 Facebook、LinkedIn 和 Twitter 这样的公司已凭借其对庞大关系网络的管理能力,让整个社会的互动方式发生了彻底变革。本博文的目的就是展示将 Rekognition 的名人及人脸识别功能与图形数据库中存储的关系信息进行配对是多么简单。

这些技术的配对让客户只需要一张图片就能够知道图片中的人物与另一位相关人物的关系。用户甚至可以提交两张图片,然后快速确定这两张不同图片中的两个人之间可能存在怎样的相互关系。这种关系映射的一个有趣例子就是著名的 Kevin Bacon 六度分割游戏。然而,此类应用存在巨大商业价值。执法机构可以从两张图片入手,先使用 Rekognition 来识别当事人,然后再通过查询图形数据库来判断两名当事人是否彼此相识。同样地,酒店类公司也可以使用 Rekognition 和图形数据库来快速识别酒店内的任何名人,以及了解有哪些他们可能认识的其他名人在附近住宿。

在本博文中,我们将展示如何将 Rekognition 与图形数据库(我们将使用Neo4j 社区版)和使用 D3.js 库的 Jupyter Notebook 结合使用。

设置

要开始使用这项令人兴奋的组合技术,首先要从 AWS 实验室 Github 存储库获得一份项目副本。该项目结构主要包含两个方面:

  • <project root> – 这是实际的 Jupyter Notebook 及所有依赖项所在的位置。
  • <project root>/cft – AWS CloudFormation 模板、示例属性,以及创建基础设施的示例命令。

您将需要添加一个新的或现有的 SSH 密钥。AWS CloudFormation 模板会安装 Neo4j 社区版,下载来自 AWS 实验室的 Jupyter Notebook (其中包含用于与 Rekognition 交互的 Python 示例代码),并配置几个快速开始操作所需的其他 Amazon EC2 设置。Cloud Formation 模板还会自动下载要通过 Neo4j 浏览器或 Jupyter Notebook 对其进行查询的常用电影图形数据库

运行名为 rek-neo4j-blogpost-git.template 的 AWS CloudFormation 模板。借助此模板,您只需要知道您的 SSH EC2 密钥名称即可 (见下文):

aws cloudformation create-stack –-stack-name rekognitionblog \
  --template-body file://rek-neo4j-blogpost-git.template \
  --parameters ParameterKey=KeyName,ParameterValue=<YOURKEYHERE> \
  --capabilities CAPABILITY_NAMED_IAM

AWS CloudFormation 需要花费几分钟的时间来完成安装,安装完成后您可以通过执行以下操作并查看响应输出部分内容来获取您的新服务器的 DNS 和 IP 地址 (示例如下):

> aws cloudformation describe-stacks –-stack-name rekognitionblog
. . .
. . .
“Outputs”: [
	{
		“OutputKey”:”IPPublicInstance”,
		“OutputValue”:”54.172.52.208”
},
	{
		“OutputKey”:”DNSPublicInstance”,
		“OutputValue”:”ec2-54-172-52-208.compute-1.amazonaws.com”
}

. . . 

请记住新服务器的 IP 地址和 DNS 以供将来使用。

通过在您常用的浏览器中输入 <public DNS>:7474 来查看新创建的 EC2 实例的端口 7474。第一次可使用 neo4j / neo4j 登录,随后您会收到更改密码的提示。这是您将在 Notebook 中使用的密码 (我们在此次演示中使用的密码为 password,但您可以使用自己选择的更安全的密码)。如果您无法浏览到 Neo4j 实例,则可以在打开 Neo4j 浏览器遇到问题时尝试退出 VPN。

访问 Notebook

在该练习中,我们将使用 SSH 来建立连接至 EC2 实例的通道以便能够浏览 Jupyter Notebook。该实例中的默认用户为“ubuntu”,请记得在设置该实例时使用您指定的 SSH 密钥:

> sudo ssh –I <your-pubic-key> -N -L 8888:localhost:8888 ubuntu@<publicDNS>

接下来,在 EC2 实例中使用以下命令从 Jupyter Notebook 所在的位置启动 notebook。

> cd /opt/notebook
> jupyter notebook –no-browser
. . . 
. . .
首次连接时,请将此 URL 复制/粘贴到您的浏览器,
    以使用令牌登录:
        http://localhost:8888/?token=0b640d92e8114965441a8cac2af61864dbf99086afcd6762

记下作为反馈返回给您的令牌。您可以通过在自己选择的新浏览器中导航至 localhost8888/?token=<whatever the token> 来使用该令牌。

您现在应该已经打开 Jupyter Notebook,其中包括使用 Python 与 Rekognition API 交互的示例。代码结构如下所示:

  1. 下载、安装并导入必需的 Python 模块。
  2. 检索一个选定图像,并将该对象存储为“image1.jpg”。
  3. 使用 Rekognition API 检测该图像中的面孔数量(名人或非名人),在这些面孔周围显示边界框,并展示如何显示图像中最大面孔的裁切面孔。Rekognition 从图像中最大的面孔开始识别,随后依次移动到较小的面孔,最多可识别一张图像中的 15 张面孔。
  4. 使用 Rekognition API 可检测该图像中是否有名人并输出他们的姓名以及一个查找关于此人的更多信息的链接。
  5. 向 Neo4j 数据库进行身份验证并创建一个图形对象。
  6. 通过查询 Kevin Bacon 与 image1.jpg 中显示的电影明星之间存在几度分割,来确认该电影图形数据库可供访问。请注意,Rekognition 可识别各行各业的名人,而电影图形数据库只存储那些在电视或电影中出现过的人员的信息。在默认代码中,image1.jpg 显示 Amazon 原创节目“Patriot”(《爱国者》) 中的 Michael Dorman。
  7. 将第二张图片存储为 image2.jpg 并输出下载的对象。
  8. 使用 Rekognition API 检测并输出 image2.jpg 中所有名人的姓名。默认代码表示检测到 Amazon 原创节目“Bosch”(《博斯》) 中的 Titus Welliver 和 Jamie Hector。
  9. 在 Neo4j 电影图形数据库中查询 image1.jpg 和 image2.jpg 中这些电影明星之间的关系。作为一项附加好处,该代码还会呈现该关系的交互式 d3.js 可视化内容。

总结

本博文展示了如何使用 Python 与 Rekognition API 进行交互,使用 Rekognition 输出查询 Neo4j 数据库,以及在交互式 Jupyter Notebook 中呈现 d3.js 可视化内容。通过将此类技术配对,您不仅能找出某张图片中有什么人,而且还能确定识别出的人物与另一名相关人物之间有何关系。此类解决方案对于从执法机构到酒店等不同行业的客户的影响是巨大的。

如果您有任何问题或建议,请给我们留言。


补充阅读

了解俄勒冈州华盛顿县如何在执法过程中使用 Amazon Rekognition 识别当事人


作者简介


derek_graeber_90_1Derek Graeber 是 AWS 专业服务组织的大数据与分析部门的一名高级顾问。
他与企业客户合作,领导他们完成大数据项目,并帮助他们实现在 AWS 上运行时的业务目标。闲暇时,他喜欢与妻子和家人呆在一起,有时也会出去打高尔夫球,但他的球技表明他永远不会成为一个出色的高尔夫球手。

Kyle Johnson 是 AWS 专业服务组织的一名数据科学家。他喜欢构建可重复的人工智能解决方案以解决客户的业务问题。闲暇时,他喜欢和家人一起去普斯植物园游玩,并为借助 Amazon Rekognition 打造的万圣节装饰想一些新点子。