“ID + Selfie” – 使用 AWS PlatoBlockchain 数据智能改进数字身份验证。 垂直搜索。 人工智能。

“ID + Selfie” – 使用 AWS 改进数字身份验证

COVID-19 全球大流行加快了对金融服务、保险和医疗保健等多个行业在线验证和注册用户的需求。 在用户体验方面,提供顺畅交易的同时保持高标准的身份验证至关重要。 问题是,你如何验证数字世界中的真人?

亚马逊重新认识 为您的在线应用程序(如银行、福利、电子商务等)提供身份验证的预训练面部识别和分析功能。

在这篇文章中,我们提出了“ID + Selfie”身份验证设计模式和 样例代码 您可以使用它来创建自己的身份验证 REST 端点。 这是一种常见的设计模式,您可以将其合并到需要基于面部的身份验证的现有或新解决方案中。 用户出示一种身份证明,例如驾照或护照。 用户然后使用应用程序捕获实时自拍照。 然后,我们将文档中的人脸与他们设备上拍摄的实时自拍进行比较。

Amazon Rekognition CompareFaces API

“身份证+自拍”设计模式的核心是将自拍中的人脸与身份证件上的人脸进行比对。 为此,我们使用 Amazon Rekognition CompareFaces 应用程序接口。 API 将源输入图像中的人脸与目标输入图像中检测到的人脸进行比较。 在下面的示例中,我们将示例驾驶执照(左)与自拍(右)进行比较。

来源 目标
“ID + Selfie” – 使用 AWS PlatoBlockchain 数据智能改进数字身份验证。 垂直搜索。 人工智能。

以下是 API 代码的示例:

response = client.compare_faces(SimilarityThreshold=80,
                              SourceImage={'Bytes': s_bytes},
                              TargetImage={'Bytes': t_bytes})

for faceMatch in response['FaceMatches']:
    position = faceMatch['Face']['BoundingBox']
    similarity = str(faceMatch['Similarity'])

中返回了几个值 CompareFaces API 响应. 我们专注于 Similarity 返回值 FaceMatches 验证自拍是否与提供的 ID 匹配。

了解关键调整参数

SimilarityThreshold 默认设置为 80%,只会返回相似度得分大于或等于 80% 的结果。 通过指定调整值 SimilarityThreshold 参数。

QualityFilter 是一个输入参数,用于过滤掉检测到的不符合所需质量栏的人脸。 质量栏基于各种常见用例。 利用 QualityFilter 通过指定设置质量栏 LOW, MEDIUMHIGH. 如果您不想过滤质量差的面孔,请指定 NONE. 默认值为 NONE.

解决方案概述

您可以通过部署以下组件创建“身份证+自拍”数字身份验证API:

  • 一个带有 POST 方法的 REST API,允许我们发送自拍和识别负载并返回响应,在本例中为相似度分数
  • 接收负载、将图像转换为正确格式并调用 Amazon Rekognition 的函数 compare_faces API。

我们实施 Amazon API网关 用于 REST API 功能和 AWS Lambda 为函数。

下图说明了解决方案架构和工作流程。

“ID + Selfie” – 使用 AWS PlatoBlockchain 数据智能改进数字身份验证。 垂直搜索。 人工智能。

工作流包含以下步骤:

  1. 用户上传所需的身份证明文件和自拍照。
  2. 客户端将身份证明文件和自拍照提交给 REST 端点。
  3. REST 端点向客户端返回一个相似度分数。
  4. 评估是通过应用程序中的业务逻辑完成的。 例如,如果相似度得分低于 80%,则无法通过数字身份检查; 否则它通过数字身份检查。
  5. 客户端将状态发送给用户。

Lambda代码

Lambda 函数将每个图像的传入负载从 base64 转换为字节,然后将源(自拍)和目标(身份)发送到 Amazon Rekognition compare_faces API 并返回在 API 响应正文中收到的相似性分数。 请参见以下代码:

import boto3
import sys
import json
import base64


def lambda_handler(event, context):

  client = boto3.client('rekognition')

  payload_dict = json.loads(json.loads(event['body']))
  selfie = payload_dict['selfie']
  dl = payload_dict['dl']

  # convert text to base64
  s_base64 = dl.encode('utf-8')
  t_base64 = selfie.encode('utf-8')
  #convert base64 to bytes
  s_bytes = base64.b64decode(s_base64)
  t_bytes = base64.b64decode(t_base64)
  response = client.compare_faces(SimilarityThreshold=80,
                                SourceImage={'Bytes': s_bytes},
                                TargetImage={'Bytes': t_bytes})

  for faceMatch in response['FaceMatches']:
      position = faceMatch['Face']['BoundingBox']
      similarity = str(faceMatch['Similarity'])

  return {

    'statusCode': response['ResponseMetadata']['HTTPStatusCode'],

    'body': similarity

  }

部署项目

这个项目可以通过部署 AWS 示例AWS云开发套件 (AWS CDK)。 您可以克隆存储库并使用以下 AWS CDK 流程部署到您的 AWS 账户。

  1. 设置有权通过 AWS CDK 以编程方式部署解决方案资源的用户。
  2. 设置 AWS命令行界面 (AWS CLI)。 有关说明,请参阅 配置AWS CLI.
  3. 如果这是您第一次使用 AWS CDK,请完成中列出的先决条件 在 Python 中使用 AWS CDK.
  4. 克隆 GitHub存储库.
  5. 创建虚拟环境。 您使用的命令取决于您的操作系统:
    1. 如果使用 Windows,请在终端窗口中从克隆存储库的源运行以下命令:
      ..venvScriptsactivate

    2. 如果使用 Mac 或 Linux,请在终端窗口中从克隆存储库的源运行以下命令:
      .venv/bin/activate

  6. 激活虚拟环境后,安装应用程序的标准依赖项:
    python -m pip install -r requirements.txt

  7. 现在环境搭建好了,需求也满足了,我们可以发出AWS CDK部署命令,将这个项目部署到AWS:
    CDK Deploy

进行 API 调用

我们需要将 base64 格式的有效负载发送到 REST 端点。 我们使用 Python 文件进行 API 调用,这允许我们打开源文件和目标文件,将它们转换为 base64,并将有效负载发送到 API 网关。 此代码在存储库中可用。

请注意 SOURCETARGET 文件位置将在您的本地文件系统上,URL 是在创建项目期间生成的 API 网关 URL。

import requests
from base64 import b64encode
from json import dumps

TARGET = '.png'
SOURCE = .png'
URL = "https://.execute-api..amazonaws.com//ips"
ENCODING = 'utf-8'
JSON_NAME = 'output.json'

# first: reading the binary stuff
with open(SOURCE, 'rb') as source_file:
    s_byte_content = source_file.read()
with open(TARGET, 'rb') as target_file:
    t_byte_content = target_file.read()

# second: base64 encode read data
s_base64_bytes = b64encode(s_byte_content)
t_base64_bytes = b64encode(t_byte_content)

# third: decode these bytes to text
s_base64_string = s_base64_bytes.decode(ENCODING)
t_base64_string = t_base64_bytes.decode(ENCODING)

# make raw data for json
raw_data = {
    " dl ": s_base64_string,
    " selfie ": t_base64_string
}

# now: encoding the data to json
json_data = dumps(raw_data, indent=2)

response = requests.post(url=URL, json=json_data)
response.raise_for_status()

print("Status Code", response.status_code)
print("Body ", response.json())

清理

我们使用 AWS CDK 来构建这个项目,所以我们可以在本地打开我们的项目并发出以下 AWS CDK 命令来清理资源:

CDK Destroy

结论

好了,“ID + 自拍”设计模式带有一个简单的 API,您可以将其与您的应用程序集成以执行数字身份验证。 在我们系列的下一篇文章中,我们通过从身份证明文件中提取文本并搜索面部集合以防止重复来进一步扩展此模式。

要了解更多信息,请查看 Amazon Rekognition 开发人员指南 检测和分析人脸。


作者简介

“ID + Selfie” – 使用 AWS PlatoBlockchain 数据智能改进数字身份验证。 垂直搜索。 人工智能。 迈克·艾姆斯 是 AWS 的首席应用 AI/ML 解决方案架构师。 他帮助公司使用机器学习和人工智能服务来打击欺诈、浪费和滥用行为。 在业余时间,您会发现他在 90 年代金属乐队中骑山地自行车、踢拳击或弹吉他。

“ID + Selfie” – 使用 AWS PlatoBlockchain 数据智能改进数字身份验证。 垂直搜索。 人工智能。诺亚·唐纳森 是 AWS 的解决方案架构师,支持联邦金融组织。 他对可以减少手动流程、改善客户体验并帮助解决有趣问题的 AI/ML 技术感到兴奋。 工作之余,他喜欢和儿子一起在冰上打曲棍球,和大女儿一起打猎,以及和小女儿一起打篮球。

时间戳记:

更多来自 AWS机器学习