发布于: Aug 23, 2022
在本文的案例中我们将通过图像视频人工智能工具 Amazon Rekognition 对我们的照片进行人脸检测,再将检测到的人脸与私有人脸集合进行比对,来识别特定库中的人物,进而对图片做分类关联,如通过班级学生照片、家庭人员照片构建人脸集合,再将任意合照作为输入时,可以标注出照片中特定班级、家庭人员信息,在功能上我们主要使用面孔检测、分析、搜索、验证相关功能。
Amazon Rekognition 是亚马逊基于面部识别的一个项目,以人工智能和机器学习为中心。借助 Amazon Rekognition 我们可以在图像和视频中识别对象、人物、文本、场景和活动,也可以检测任何不适宜的内容。Amazon Rekognition 还提供高度精确的面孔分析和面孔搜索功能,可以使用这些功能来检测、分析和对比面孔,以处理各种用户验证、人员计数和公共安全使用案例。
Amazon API Gateway,可以帮助开发人员轻松创建、发布、维护、监控和保护任意规模的 API。
Amazon S3,对象存储服务,提供行业领先的可扩展性、数据可用性、安全性和性能。
Amazon SQS, 消息队列服务,可以帮助分离和扩展微服务、分布式系统和无服务器应用程序。
Amazon Lambda,几乎可以为任何类型的应用程序或后端服务运行代码,而且完全无需管理。
Amazon Rekognition,基于深度学习的图像识别服务,可以检测对象、场景和面孔;提取文本;识别名人;以及标识图像中的不当内容。
应用分为两部分:私有人脸集合构造、人脸检测与识别
浅绿色背景部分为私有人脸集合构造部分,通过服务器上传照片文件到 S3 中,S3 会将消息通过 SQS 传递给 Lambda,Lambda 中通过 SDK 提供的方法创建特定的人脸集合,当上传的图片在 S3 中的前缀一致时,将会添加到同一个集合中。
浅红色背景部分为人脸检测与识别部分,前端应用调用 API Gateway 发布的 API 并将需要检测的图片数据(base64)放在请求中,API Gateway 将请求发送至相应的 Lambda,Lambda 使用 Amazon Web Services Rekognition 进行人脸识别并提取图片中所有的人脸,再调用 Amazon Web Services Rekognition 将每张人脸与特定集合进行比对,最终返回图片中所有人脸位置及比对结果,此外还会包含一部分人脸特征预测信息(年龄、性别预测等)。
- 在进行检测和识别之前需要构造人脸集合,我们通过 S3 对象存储桶来存储需要构造人脸集合的图片。S3 可以监听特定前缀/后缀文件的特定事件,并将相应信息发送到指定后端,如 .jpg 后缀文件的对象创建事件发生时,会将文件 meta-data 及事件本身的信息发送给 Amazon Web Services SQS 服务。
- Amazon Web Services SQS 在架构中一方面做异步的解耦,一方面我们可以更好的对消息的消费进行管理(延迟、重试等),此外 Amazon Web Services SQS 中也有 trigger 的功能,可以和 lambda 进行关联,当有消息时会通知 Lambda 进行消费。
- 当 Lambda 通过 SQS 获取图片对象创建的事件及详细信息后,会读取图片数据并调用 Amazon Web Services Rekognition 提供的接口,创建相应的 Collection,Collection ID 为图片对象的前缀,如上图所示,前缀为 Singer、Moviestar 的图片上传时,会分别用来构建/添加图片特征到 Singer、Moviestar 人脸集合,若图片上传到根目录,则人脸集合名称为“default”。
- 此外需要注意的是,每张照片的描述信息为上传的文件名称,后续比对成功则会返回该描述信息,如具体的人名(目前不支持中文)。
- Amazon Web Services Rekognition 收到请求后创建相应的人脸集合,一个人脸集合中可存储的最大人脸数目为 2000 万。
- 客户端调用 API Gateway 的接口上传任意照片数据,根据客户业务逻辑获取要比对的集合 collection_id,完整请求的 body 如下:
{ "threshold": 70, "collection_id": "music", "img_type": "jpg", "img": "base64-encoded image bytes"}
注:Threshold 为相似度阈值,低于阈值的结果将不会输出,有多个匹配结果会输出阈值最高的结果
- 请求通过 API Gateway 会转发给后端的 Lambda 处理,Lambda 会根据 request 中的内容,先对图片进行人脸检测,获取图片中所有的人脸位置(单张照片最大支持 100 张人脸),对每张人脸进行剪裁,再将剪裁后的人脸与特定人脸集合做比对,对比对后的结果做阈值过滤,最终输出结果示例如下:
[{ "index": 0, "boundingbox": { "Width": 0.06503524631261826, "Height": 0.16279903054237366, "Left": 0.10349289327859879, "Top": 0.2639005780220032 }, "AgeRange": { "Low": 25, "High": 39 }, "Gender": { "Value": "Male", "Confidence": 54.92888641357422 }, "filename": "de6a7b78-6cbf-11ea-a965-e2e55fc3ef4d.jpg", "Similarity": 99.37139129638672, "Tag": "person1"}, { "index": 1, "boundingbox": { "Width": 0.06300899386405945, "Height": 0.14416594803333282, "Left": 0.32390841841697693, "Top": 0.29995396733283997 }, "AgeRange": { "Low": 23, "High": 37 }, "Gender": { "Value": "Male", "Confidence": 54.5346565246582 }, "filename": "de70f764-6cbf-11ea-a965-e2e55fc3ef4d.jpg", "Similarity": 0, "Tag": ""}]
- 比对不成功的会返回检测到的人脸位置,以及识别的部分人脸特征(如年龄、性别),如有必要可添加更多特征输出(如:是否微笑、戴眼镜等)
- 比对成功测出了返回人脸位置及部分特征外,还会返回人脸集合中人脸的描述信息
相关文章