无法从S3获取对象元数据。检查aws Rekognition中的对象键,区域和/或访问权限

时间:2018-05-04 18:52:54

标签: python amazon-web-services amazon-s3 face-detection

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,我在我的代码中配置了相同的区域。 我做错了什么?

8 个答案:

答案 0 :(得分:4)

检查S3和图像识别是否在同一区域,我知道这不好或没有记录(我想),但是这些人正在谈论herehere

答案 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 存储桶中的文件权限有效。