如何使用 Amazon Rekognition 进行人脸识别和比对?
本指南以实用和技术性的方式展示了如何使用 亚马逊 Rekognition 处理图像和视频,进行人脸识别、特征分析(例如,大致年龄、面部表情、是否佩戴眼镜以及情绪),并在图像集中进行人脸比较或搜索。此外,还涵盖部署方法、安全性、与GPU服务器上自托管实现的比较,以及网络优化技巧(CDN、BGP和85个以上的服务器位置)。.
为什么选择亚马逊 Rekognition?
亚马逊 Rekognition AWS 托管的机器视觉服务,提供现成的 API,用于人脸识别、图像标注、文本识别、视频分析和内容安全审查。.
- 优势:
- 即用型,无需训练基础模型。.
- AWS自动扩展和SLA。.
- 与 S3、Lambda、SNS、CloudWatch 和 CloudTrail 集成。.
- 诸如以下功能 索引面 和 通过图像搜索人脸.
- 可能的缺点:
- 大批量生产成本高。.
- 数据治理问题以及选择合适的区域以符合监管要求的必要性。.
整体架构和工作流程
使用 Rekognition 进行人脸处理的典型架构包括以下步骤:
- 上传图片/视频到 S3(或直接发送到 API)。.
- 调用 API 类似 人脸检测, 比较面孔 或者 启动人脸检测 视频演示。.
- 视频异步处理:Rekognition 将输出提供给 SNS/SQS/Lambda。.
- 将结果存储在数据库(DynamoDB/Postgres)中,并在 Web 控制面板中显示。.
通过 CDN、VPC 端点和 BGP 路由,可以增强跨 85 个以上位置的网络的流程,从而优化延迟和性能。.
初始设置(AWS CLI、IAM、S3)
AWS CLI 安装和配置
Debian/Ubuntu 发行版上的示例命令:
sudo apt update
sudo apt install -y awscli
aws configure
# Enter AWS Access Key, Secret Key, region, and output format (json)Rekognition 的最小访问权限 IAM 策略示例
以下 JSON 策略示例为 Rekognition 提供所需的权限以及对特定存储桶的读/写访问权限:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"rekognition:DetectFaces",
"rekognition:CompareFaces",
"rekognition:IndexFaces",
"rekognition:SearchFacesByImage",
"rekognition:StartFaceDetection",
"rekognition:GetFaceDetection"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::your-bucket-name/*"
}
]
}Python (boto3) 的实用示例
笔记: 在运行 awscli 之前进行配置,或者设置 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 环境变量。.
图像人脸检测(DetectFaces)
调用 DetectFaces 的示例 Python 代码:
import boto3
rek = boto3.client('rekognition', region_name='us-east-1')
with open('person.jpg','rb') as img:
resp = rek.detect_faces(Image={'Bytes': img.read()}, Attributes=['ALL'])
print(resp)此方法返回诸如估计年龄、眼睛/嘴巴位置、情绪和边界框坐标之类的信息。.
比较两张脸(CompareFaces)
比较两张图片并读取相似度值的简单示例:
import boto3
rek = boto3.client('rekognition')
with open('source.jpg','rb') as s, open('target.jpg','rb') as t:
resp = rek.compare_faces(SourceImage={'Bytes': s.read()}, TargetImage={'Bytes': t.read()})
for match in resp['FaceMatches']:
print(match['Similarity'], match['Face']['BoundingBox'])重要参数: 相似度阈值 — 介于 0 到 100 之间的数字,用于确定相似程度。.
创建集合并进行搜索(IndexFaces + SearchFacesByImage)
用于创建收藏集、添加图像和搜索人脸的模板:
import boto3
rek = boto3.client('rekognition')
# Create collection
rek.create_collection(CollectionId='employees')
# Index a face
with open('employee1.jpg','rb') as img:
rek.index_faces(CollectionId='employees', Image={'Bytes': img.read()}, ExternalImageId='emp1')
# Search by image
with open('unknown.jpg','rb') as img:
resp = rek.search_faces_by_image(CollectionId='employees', Image={'Bytes': img.read()}, MaxFaces=5, FaceMatchThreshold=85)
print(resp['FaceMatches'])这种模式适用于入住/退房或客户身份识别系统。.
视频中的人脸识别(Rekognition Video)
一般流程:将视频上传到 S3,调用 start_face_detection,获取 JobId,并使用 get_face_detection 读取结果,或者使用 SNS 进行通知。.
import boto3
rek = boto3.client('rekognition')
job = rek.start_face_detection(Video={'S3Object':{'Bucket':'mybucket','Name':'video.mp4'}})
job_id = job['JobId']
# Poll for results or use SNS to receive completion notification
resp = rek.get_face_detection(JobId=job_id)
print(resp)部署、安全和隐私方面的实用技巧
几条关键规则:
- 最小特权: 将 IAM 角色权限限制在最低限度。.
- VPC 端点: 使用 VPC 端点访问 S3 和 Rekognition,这样流量就不会经过公共互联网。.
- 日志和审计: 启用 CloudTrail 以记录 Rekognition 调用和 S3 访问。.
- 敏感数据: 为了遵守 GDPR 或当地法律,请选择相应的地区并限制数据保留。.
- 用户隐私: 对于人脸识别的一般用途, 知情同意 接收并指定数据删除策略。.
何时使用您自己的 GPU 服务器或型号
Amazon Rekognition 适用于快速且易于管理的任务,但在以下情况下,最好在 GPU 服务器上运行模型:
- 需要高度定制(例如,使用 ArcFace 或 FaceNet 对内部数据集进行微调)。.
- 对数据(数据驻留)的完全控制需求。.
- 大批量处理成本高昂,且需要极低的延迟(边缘实时推理)。.
硬件建议:
- 延迟敏感型推理: NVIDIA T4 或 RTX 4000/5000。.
- 训练或微调: NVIDIA A100 或 V100。.
- 磁盘: 用于高 I/O 的 NVMe SSD。.
- 网络: 10Gbps 或更高,并使用 BGP/CDN 来降低加载延迟。.
我们提供 GPU 服务器和云服务器,在全球拥有 85 多个地点的网络,适合部署实时应用程序的定制模型。.
最佳配置和位置对比,以降低延迟
降低延迟的实用技巧:
- 对于延迟敏感型应用,请将用户和服务器部署在距离客户最近的位置。我们拥有超过 85 个数据中心和 BGP 路由网络,您可以选择距离客户最近的数据中心。.
- 对于敏感交易或应用:建议将图像处理服务器部署在靠近交易所/目标服务器的位置,并使用 CDN 和 VPC 对等连接。.
- 对于注重隐私的应用程序:在用户所在国家/地区存储和处理数据(数据驻留)。.
总体比较:
- 位置靠近用户: 最低延迟和更低的网络带宽成本。.
- 配备GPU的位置: 适用于推理/训练。.
- 具有专用 BGP 路由的位置: 更高的稳定性和容错能力。.
监测、成本核算和优化
- 降低成本: 使用 Rekognition 的离线模式和非高峰时段调度来批量处理视频。.
- 缓存: Redis 中的缓存检测功能可以降低重复请求的 API 成本。.
- 监测: 使用 CloudWatch 指标和警报来监控错误率和成本。.
- 精度设置: 根据误报率/漏报率调整相似度阈值;对于安全敏感系统,使用更高的阈值(>90)。.
Docker 实例和简单部署
使用 Rekognition 的 Python 应用示例 Dockerfile:
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python","app.py"]您可以将此容器运行在具有高速网络的 VPS 或云服务器上,并使用负载均衡器和自动扩展功能来管理流量。.
结论——益处与注意事项
亚马逊 Rekognition 它是一种快速且可扩展的人脸识别、分析和比对方案。如果您需要个性化、数据治理或极低延迟,那么使用 GPU 服务器和原生模型(例如 ArcFace)则更为合适。.
要选择最佳组合(例如用于交易的 VPS、用于 AI 的 GPU 服务器,或在 85 个以上地点提供 DDoS 防护和 CDN 的安全部署),您可以提交请求以审查您的需求,从而获得定制的架构和定价。.









