使用 Amazon Rekognition、Lambda 和 JavaScript 进行面部识别
使用 Amazon Rekognition、Lambda 和 JavaScript 进行面部识别
创建面部搜索 lambda 函数以按图像搜索面部
亚马逊识别
亚马逊识别 是一个 基于云的SAAS平台 提供 计算机视觉服务 可用于 图像和视频的人工智能分析 .通过向 AWS Rekognition API 提供图像或视频,也很容易集成到应用程序中。它提供了高度准确的面部分析、面部比较和面部搜索功能。我们可以检测、分析和比较各种用例的人脸,包括用户验证、编目、人数统计和公共安全。 — AWS 官方文档
在本文中,我们将研究以下描述的用例之一:
面部搜索
借助 Amazon Rekognition,您可以 在图像中搜索与存储在称为人脸集合的容器中的人脸相匹配的人脸 . 面孔集合是您拥有和管理的面孔的索引 .在 Amazon Rekognition 中根据人脸搜索需要两个主要步骤:
- 索引面
- 搜索面孔
对于上述用例,我们将首先创建一个集合,我们将在其中存储所有面孔。然后我们将不同的面孔添加到集合中。这将创建添加到集合中的所有面的列表。然后,我们可以执行面部搜索来搜索我们收藏中的图像。因此,我们可以将其分为以下三个步骤。
- 创建一个集合
- 将面孔添加到集合中
- 在集合中搜索面孔
先决条件
- 你需要有一个 AWS 管理控制台账户 .不用担心,对于我们在这里使用的东西,您不会被收取费用作为它的一部分 免费套餐
- 一个 base 64 编码的输入图像 (例如:data:image/png;base64, KzApRSe22iP0w8Gp…..)用于 API 的输入。我们也可以使用 S3 存储桶 在这里,但我只想专注于 Rekoginition API。
Rekognition API
我们的用例需要以下 Amazon Rekognition API。
- rekognition.createCollection — 在 AWS 区域中创建一个集合。我们可以使用 IndexFaces 操作将人脸添加到集合中。
- 识别.indexFaces — 检测输入图像中的人脸并将它们添加到指定的集合中。
- rekognition.searchFacesByImage — 对于给定的输入图像,首先检测图像中最大的人脸,然后在指定的集合中搜索匹配的人脸。该操作将输入人脸的特征与指定集合中的人脸进行比较。
设置 Lambda 函数
我们将使用 拉姆达函数 和 节点.js 执行所有上述三个操作。我将演示为我们的“ 面部搜索”操作 .同样,您可以为“ 创建面集合 “ 和 ” 添加面 ” 操作。
步骤1
转到查找服务,然后搜索 lambda。
第2步
点击 创建函数 lambda 函数页面上的按钮。
第 3 步
将函数命名为“ 面部搜索 ”,然后在运行时下,单击下拉菜单,然后选择 节点.js。
第4步
点击 创建函数 ,保持其余部分不变。这也将创建一个 lambda 函数的默认角色 .就我而言,它是用名称“facial-search-role-8sy40unw”创建的。稍后我们还将更新角色。
第 5 步
在 lambda 函数页面上,向下滚动到 代码源 .擦除编辑器中的所有内容并粘贴以下代码。
**常量 AWS = 要求('aws-sdk');
const rekognition = new AWS.Rekognition();** **exports.handler = async (event) = > {**
// 回复
**常量响应 = {
数据:空,
状态码:200,
信息: '',
};**
// 人脸搜索
**尝试 {**
// 获取不带 'data:image/png;base64,' 文本的编码图像
**常量编码图像 = event.imgdata;**
// 转换为缓冲区
**const decodedImage = Buffer.from(encodedImage, 'base64');** // rekoginition api 的参数
**变量参数 = {**
// 存放人脸的集合名称
**CollectionId:“面孔集合”,**
// 最小匹配置信度得分
**FaceMatchThreshold:90,
图片: {
字节:解码图像
},**
// 要返回的最大面数
**最大面数:5**
**};**
// 调用rekognition api搜索输入人脸
**常量数据 = 等待 rekognition.searchFacesByImage(params).promise();**
**response.data = 数据;
response.message = "人脸识别成功!!"
response.error = null;**
**} 抓住 (e) {**
**响应数据=空;
response.message = "人脸识别失败"
response.error = e;**
**}** **返回响应;**
**};**
facial-search lambda function
第 6 步
跟着 从 1 到 4 的相同步骤 为了 其他两个 lambda 函数 , IE。 ” create-face-collection”和“add-face”。 这些函数的代码将在接下来的步骤中提及。
请注意 ,我们可以重用为我们的“ 面部搜索” 这两个函数的函数。这如下所示。
Select existing role
第 7 步
在“ 创建集合 “ 功能。将以下代码擦除并粘贴到编辑器中。
常量 AWS = 要求('aws-sdk');
const rekognition = new AWS.Rekognition(); exports.handler = async (event) => {
// 形成要返回的响应
让响应 = {
“数据”: ””,
“信息”: ””,
“错误”: ””
};
// 创建一个集合
尝试 {
// 唯一命名集合
变量参数 = {
“CollectionId”:“面孔集合”
};
常量数据 = 等待 rekognition.createCollection(params).promise();
response.data = 数据;
response.message = "集合创建成功";
response.error = null;
} 抓住 (e) {
响应数据=空;
response.message = "集合创建失败";
response.error = e;
}
返回响应;
};
第 8 步
在“ 添加面 “ 功能。将以下代码擦除并粘贴到编辑器中。
常量 AWS = 要求('aws-sdk');
const rekognition = new AWS.Rekognition(); exports.handler = async (event) => {
// 形成要返回的响应
让响应 = {
“数据”: ””,
“信息”: ””,
“错误”: ””
};
// 将人脸添加到集合中
尝试 {
// 没有 'data:image/png;base64,' 文本的编码图像
常量编码图像 = event.imgdata;
// 转换为缓冲区
const decodedImage = Buffer.from(encodedImage, 'base64'); // rekoginition api 的参数
让参数 = {
// 存放人脸的集合名称
CollectionId: "人脸收藏",
检测属性:[
“默认”
],
// ExternalImageId: "myphotoid",
图片: {
字节:解码图像
}
};
常量数据 = 等待 rekognition.indexFaces(params).promise();
response.data = 数据;
response.message = "人脸添加成功!!"
response.error = null;
} 抓住 (e) {
响应数据=空;
response.message = "添加人脸数据失败!!"
response.error = e;
}
返回响应;
};
现在,我们已经准备好使用我们的 lambda 函数了。它们需要按以下顺序执行。
- “create-face-collection”——只执行一次来创建集合。
- “add-face” - 执行此操作以将任何新面孔添加到集合中。
- “facial-search”——这是我们的主要功能,用于搜索我们收藏中的人脸。
现在,我们可以测试这些函数,但在此之前,我们需要使用 IAM 为我们的 lambda 函数设置角色。
使用 IAM 设置安全角色
要设置角色,请按照以下步骤操作。
步骤1
搜索并选择 我是 服务。
第2步
在左侧导航栏,点击 角色 .
第 3 步
现在,选择我们在“ 面部搜索 ” 拉姆达函数。
第4步
点击 添加权限 -> 附加策略 .
第 5 步
搜索并选择“ AmazonRekognitionFullAccess” 政策并点击“ 附加策略 ”。
我们所有的 lambda 函数的策略现在都已设置,因为它们共享相同的角色(请参阅 第 6 步 在上面的上一节中)。
测试时间
- 回到你的 lambda 函数“ 面部搜索 ”。
- 在代码编辑器顶部,选择下拉菜单并单击“ 配置测试事件 ”。
3. 为您的活动命名。
4. 然后输入以下 JSON 对象。请在此处输入您要搜索的面部的正确 base 64 编码图像值。
5. 点击 创造
6. 在编辑器顶部,单击 测试 按钮。
请注意 , 我们需要 首先创建一个集合 和 添加人脸 在调用它之前给它“ 面部搜索 “ 功能。 因此,请在测试此函数之前调用“create-face-collection”和“add-face” lambda 函数 .
7. 你应该看到下面的“ 执行结果 ”。
8. 除了返回自定义消息外,您还可以返回以下格式的人脸数据。
很神奇吧??
如您所见,通过 Node.js 中的 lambda 函数使用 Amazon Rekognition API 非常简单直接。您可以在官方文档中探索更多 API API 参考 .
感谢您的阅读。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通