我正在使用AWS Rekognition构建面部识别应用程序。我还想向用户显示与输入图像匹配的图像。当我们为索引建立索引时,AWS是否还会保存图像?如果是,我如何获得该图像?
如果没有,我正在考虑采用这种方式。我可以将图像以与ExternalImageId相同的名称保存到S3中,以便在检测到面部时从Rekognition读取外部ID并从S3中获取。
如果有比这更好的方法,请告诉我。
我正在使用以下代码来索引集合中的图像:
import boto3
from PIL import Image
import io
import time
image1 = 'images/haad2.jpg'
client = boto3.client('rekognition')
image = Image.open(image1)
stream = io.BytesIO()
image.save(stream, format="JPEG")
image_binary = stream.getvalue()
response = client.index_faces(
Image={
'Bytes': image_binary
},
CollectionId='root_faces_data',
ExternalImageId=str(time.time()),
DetectionAttributes=[
'ALL',
]
)
print(response)
以及以下代码来查看集合中是否存在面孔:
import boto3
import io
from PIL import Image
client = boto3.client('rekognition')
image1 = 'images/haad2.jpg'
client = boto3.client('rekognition')
image = Image.open(image1)
stream = io.BytesIO()
image.save(stream, format="JPEG")
image_binary = stream.getvalue()
response = client.search_faces_by_image(
CollectionId='root_faces_data',
Image={
'Bytes': image_binary
},
MaxFaces=10,
FaceMatchThreshold=90
)
print(response)
这是search_faces_by_image的输出:
{
'SearchedFaceBoundingBox': {
'Width': 0.2646464705467224,
'Height': 0.39817628264427185,
'Left': 0.3186868727207184,
'Top': 0.23252280056476593
},
'SearchedFaceConfidence': 99.9957275390625,
'FaceMatches': [
{
'Similarity': 99.98405456542969,
'Face': {
'FaceId': '5bc98595-7d30-4447-b430-4c0fd8f1b926',
'BoundingBox': {
'Width': 0.2646459937095642,
'Height': 0.39817601442337036,
'Left': 0.31868699193000793,
'Top': 0.23252299427986145
},
'ImageId': '8e631731-4a0c-513d-be32-dbfe3ae5e813',
'ExternalImageId': '1534576206.8314612',
'Confidence': 99.9957046508789
}
}
],
'FaceModelVersion': '3.0',
'ResponseMetadata': {
'RequestId': 'eca4bea6-a2b5-11e8-9345-a5eddf19f47f',
'HTTPStatusCode': 200,
'HTTPHeaders': {
'content-type': 'application/x-amz-json-1.1',
'date': 'Sat, 18 Aug 2018 07:12:09 GMT',
'x-amzn-requestid': 'eca4bea6-a2b5-11e8-9345-a5eddf19f47f',
'content-length': '553',
'connection': 'keep-alive'
},
'RetryAttempts': 0
}
}
答案 0 :(得分:2)
不。将脸部添加到“脸部收藏”时,不会保留原始图像。
来自Adding Faces to a Collection - Amazon Rekognition:
对于检测到的每张脸,Amazon Rekognition都会提取脸部特征并将特征信息存储在数据库中。此外,该命令还存储在指定面部集合中检测到的每个面部的元数据。 Amazon Rekognition不存储实际的图像字节。
您将原始图像存储在Amazon S3中的想法很好。但是,您可以在对BoundingBox
的回复中使用search_faces_by_image()
信息来改进它。
当Amazon Rekognition将人脸添加到人脸收藏中时,它会在输入图像中搜索最大的人脸。此脸的位置由BoundingBox
提供。
在存储原始图像之前,应使用BoundingBox
尺寸裁剪图像。请注意,这些是相对于尺寸大小的,因此您需要使用类似以下内容的
(int(face['BoundingBox']['Left'] * width),
int(face['BoundingBox']['Top'] * height)),
(int((face['BoundingBox']['Left'] + face['BoundingBox']['Width']) * width),
int((face['BoundingBox']['Top'] + face['BoundingBox']['Height']) * height))
结果是,您所有的图像都将聚焦在面部本身上。