Вы можете использовать операцию сравнения_файлов клиента Rekognition.Вот псевдокод, отражающий операцию (Примечание: этот код не тестируется и предназначен только для демонстрации концепций).Вы можете настроить порог сходства в соответствии с вашими потребностями.
client = boto3.client('rekognition', region_name='eu-west-1')
keyNamesInsideRandomFolder=['1.jpg','2.jpg']
for key in keyNamesInsideRandomFolder:
response = client.detect_faces(
'S3Object': {
'Bucket': "bucketname",
'Name': "randomfolder/"+key
}
)
faceDetails = response['FaceDetails']
hasFace = len(faceDetails) > 0
if hasFace:
response = client.compare_faces(
SimilarityThreshold=90,
SourceImage={
'S3Object': {
'Bucket': "bucketname",
'Name': "ownerfolder/ownerimage.jpg"
}
},
TargetImage={
'S3Object': {
'Bucket': "bucketname",
'Name': "randomfolder/"+key
},
}
)
faceMatch= response['FaceMatches']
similarity = faceMatch['Similarity']
if similarity>90:
#write to dynamodb
Отредактировано: чтобы получить список объектов из папки с префиксом / папка random, используйте операцию list_objects клиента s3.
response = client.list_objects(
Bucket='bucketname',
Prefix='random'
)
numberofobjects=len(response['Contents'])
keyNamesInsideRandomFolder=[]
for x in range(1, numberofobjects):
keyNamesInsideRandomFolder.append(response['Contents'][x]['Key'])
Примечание. Ответ ['Contents'] [x] ['Key'] возвращает имя ключа объекта вместе с префиксом.Например,Если внутри случайной папки есть изображение с именем img.jpg, оно возвращает «random / img.jpg».Обратите внимание, что я запустил цикл for с 1, потому что первый элемент, возвращаемый в качестве ответа, является просто именем ключа папки, то есть «random /» в этом случае.