人脸识别、分析及与 Amazon Rekognition 的比较——综合指南
在本文中,我们将以实用和技术的方式了解如何使用 Amazon Rekognition 对图像和视频进行人脸识别和特征分析。.

人脸识别、分析及与 Amazon Rekognition 的比较——综合指南

本文将探讨使用 Amazon Rekognition 进行人脸检测、分析和比对的技术。欢迎阅读本文,了解具体的实现方法和安全提示。.
0 股票
0
0
0
0

如何使用 Amazon Rekognition 进行人脸识别和比对?

本指南以实用和技术性的方式展示了如何使用 亚马逊 Rekognition 处理图像和视频,进行人脸识别、特征分析(例如,大致年龄、面部表情、是否佩戴眼镜以及情绪),并在图像集中进行人脸比较或搜索。此外,还涵盖部署方法、安全性、与GPU服务器上自托管实现的比较,以及网络优化技巧(CDN、BGP和85个以上的服务器位置)。.

为什么选择亚马逊 Rekognition?

亚马逊 Rekognition AWS 托管的机器视觉服务,提供现成的 API,用于人脸识别、图像标注、文本识别、视频分析和内容安全审查。.

  • 优势:
    • 即用型,无需训练基础模型。.
    • AWS自动扩展和SLA。.
    • 与 S3、Lambda、SNS、CloudWatch 和 CloudTrail 集成。.
    • 诸如以下功能 索引面通过图像搜索人脸.
  • 可能的缺点:
    • 大批量生产成本高。.
    • 数据治理问题以及选择合适的区域以符合监管要求的必要性。.

整体架构和工作流程

使用 Rekognition 进行人脸处理的典型架构包括以下步骤:

  1. 上传图片/视频到 S3(或直接发送到 API)。.
  2. 调用 API 类似 人脸检测比较面孔 或者 启动人脸检测 视频演示。.
  3. 视频异步处理:Rekognition 将输出提供给 SNS/SQS/Lambda。.
  4. 将结果存储在数据库(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 的安全部署),您可以提交请求以审查您的需求,从而获得定制的架构和定价。.

常见问题解答

您可能也喜欢