WEB端利用Amazon Rekognition 实现人脸识别
Amazon Rekognition基于相同的经过验证的,高度可扩展的深度学习技术,该技术由Amazon的计算机视觉科学家开发,用于每天分析数十亿张图像和视频。它不需要使用任何机器学习知识。Amazon Rekognition包含一个简单易用的API,可以快速分析Amazon S3中存储的任何图像或视频文件。
这里我们主要使用Amazon Rekognition中的面部检测和面部比较API接口实现操作。首先,我们利用面部检测接口将画面中所有人脸识别出来,接着对识别出的人脸进行遍历,与S3数据桶中存储的人脸信息进行比较,从而取出匹配对象的数据。
- 在S3创建一个储存人像信息的数据桶
- 在Amazon Cognito创建身份池
- 给未经身份验证和经过身份验证的角色设置权限
- 在代码引入js
<script src="./js/aws-sdk-2.48.0.min.js"></script>
- 登陆
function Unauthenticated_Login() { AWS.config.region = REGION;//亚马逊账户区域代码 AWS.config.credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: POOL_ID,//身份池ID }); AWS.config.credentials.get(function(){ var accessKeyId = AWS.config.credentials.accessKeyId; var secretAccessKey = AWS.config.credentials.secretAccessKey; var sessionToken = AWS.config.credentials.sessionToken; }); }
- 创建面部识别API接口对象
rekognition = new AWS.Rekognition();
- 调用摄像头
- 调用面部识别方法
var params = {Attributes:["ALL"],Image: {Bytes:dataURItoBlob(dataURL)}}; rekognition.detectFaces(params, function(err, data) {
if (err) console.log(err, err.stack);
} - 遍历面部识别方法返回的人脸数据集合和S3数据桶中的人脸集合,调用面部比较接口和S3数据桶中的人脸信息进行比较
for(var i=0;i<data.FaceDetails.length;i++){ var face_height= data.FaceDetails[i].BoundingBox.Height; var face_left= data.FaceDetails[i].BoundingBox.Left; var face_top= data.FaceDetails[i].BoundingBox.Top; var face_width= data.FaceDetails[i].BoundingBox.Width; if (face_width<1&&face_top<1&&face_left<1&&face_height<1){ var face_ctx=facecanvas.getContext('2d'); face_ctx.drawImage(canvas,320*face_left,320*face_top,320*face_width,320*face_height,0,0,100,100); var tmpDataUrl = facecanvas.toDataURL("image/jpeg", 0.8); var params = {
SimilarityThreshold: MIN_SIMILARITY,//相似度
SourceImage: {Bytes:dataURItoBlob(tmpDataUrl)},
TargetImage: {
S3Object: {
Bucket: BUCKET_NAME,//数据桶名称
Name: S3_filePath
}
}
};
rekognition.compareFaces(params, function(err, data) {
if (err) console.log(err, err.stack);
} } }