import boto3
if __name__ == "__main__":
bucket='MyBucketName'
sourceFile='pic1.jpg'
targetFile='pic2.jpg'
client=boto3.client('rekognition','us-east-1')
response=client.compare_faces(SimilarityThreshold=70,
SourceImage={'S3Object':{'Bucket':bucket,'Name':sourceFile}},
TargetImage={'S3Object':{'Bucket':bucket,'Name':targetFile}})
for faceMatch in response['FaceMatches']:
position = faceMatch['Face']['BoundingBox']
confidence = str(faceMatch['Face']['Confidence'])
print('The face at ' +
str(position['Left']) + ' ' +
str(position['Top']) +
' matches with ' + confidence + '% confidence')
我正在尝试比较我的存储桶中存在的两个图像,但无论我选择哪个区域,我总会收到以下错误: -
botocore.errorfactory.InvalidS3ObjectException:调用CompareFaces操作时发生错误(InvalidS3ObjectException):无法从S3获取对象元数据。检查对象密钥,区域和/或访问权限。
我的水桶区域是us-east-1,我在我的代码中配置了相同的区域。 我做错了什么?
答案 0 :(得分:4)
答案 1 :(得分:1)
确保bucket
区域与调用区域相同。如果您使用的是AWS CLI
,请确保在配置文件中包含适当的区域。
答案 2 :(得分:0)
在编译之前,请确保脚本中的AWS环境变量配置AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY
答案 3 :(得分:0)
在我看来,你没有足够的权限与access_key和secret_key!如果凭据属于IAM用户,请确保IAM用户有权执行Rekognition compare_faces读取操作和s3读取操作!还要检查s3源和目标对象键是否正确。 最好创建具有所需权限的角色,并假设该角色请求临时安全凭证,而不是使用永久访问密钥。
答案 4 :(得分:0)
我有同样的问题。我要做的就是重新整理我的存储桶和文件夹。确保图像直接位于存储桶中,而不位于存储桶中的文件夹中。还要仔细检查图像名称是否正确以及一切都正确。
答案 5 :(得分:0)
也遇到了这个问题,注意到我的IAM角色使用存储桶名称作为资源,我必须在末尾添加斜杠和通配符。将其更改为“资源”:“ arn:aws:s3 ::: / *”
答案 6 :(得分:0)
这是我使用适用于Android的AWS Rekognition sdk发生的,问题是我的请求中S3存储桶的区域不同,因此我必须在请求中放入正确的区域(与S3存储桶相同) :
rekognitionClient.setRegion(Region.getRegion(Regions.US_WEST_1));//replace with your S3 region
答案 7 :(得分:0)
对我来说,更改 S3 存储桶中的文件权限有效。