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

问题描述 投票:0回答:16
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,我在代码中配置了相同的区域。 我做错了什么?

python amazon-web-services amazon-s3 face-detection
16个回答
12
投票

我也有同样的问题。我解决这个问题的方法是重新排列我的存储桶和文件夹。确保您的图像直接位于存储桶中,而不是存储桶中的文件夹中。还要仔细检查图像名称是否正确以及一切是否正确。


12
投票

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


4
投票

确保

bucket
区域与呼叫区域相同。如果您使用
AWS CLI
,请确保包含具有适当区域的配置文件。


3
投票

我遇到了类似的问题

botocore.errorfactory.InvalidS3ObjectException:发生错误 (InvalidS3ObjectException) 调用 CompareFaces 操作时:无法 > 从 S3 获取对象元数据。检查对象键、区域和/或访问权限 权限

这可能是由于错误的AWS区域、密钥或未正确授予权限。

在我的例子中,错误的区域被设置为环境变量。


2
投票

我遇到了使用适用于 Android 的 AWS rekognition sdk 的情况,问题是 S3 存储桶的区域与我的请求中的区域不同,因此我必须在请求中放入正确的区域(与 S3 存储桶相同):

 rekognitionClient.setRegion(Region.getRegion(Regions.US_WEST_1));//replace with your S3 region

1
投票

在我看来,您对该 access_key 和 Secret_key 没有足够的权限!如果凭证是 IAM 用户的,请确保 IAM 用户有权执行 Rekognition Compare_faces 读取操作和 s3 读取操作!另请检查您的 s3 源和目标对象密钥是否正确。 最好创建具有所需权限的角色,并假设该角色请求临时安全凭证,而不是使用永久访问密钥。


1
投票

对我来说,问题是 s3 Bucket 中包含空格的文件名。因此,您必须确保密钥在存储自身时不包含空格。


1
投票

在我的例子中,我的对象路径以斜线(/)为前缀。删除它就成功了。


1
投票

同样的错误消息,但使用 Textract 函数,权限没有问题,但我在 s3 中的文件包含特殊字符,一旦我重命名文件就没有问题了。


1
投票

遇到类似的问题,并发现这是由于任何文件夹名称中包含空格所致。


0
投票

编译前请确保脚本中的AWS环境变量配置

AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY


0
投票

也遇到了这个问题,注意到我的 IAM 角色将存储桶名称作为资源,我必须在末尾添加斜杠和通配符。将其更改为“资源”:“arn:aws:s3:::/*”


0
投票

对我来说,更改 S3 存储桶中的文件权限是有效的。


0
投票

我遇到了同样的错误:我检查并发现该图像存在于存储桶的某个子文件夹中。确保图像位于根存储桶中。


0
投票

虽然这是一个很老的问题,但我也有同样的问题。但就我而言,我使用的是

Lambda
并且我的 Lambda 角色无法访问 S3,因此如果您通过 Lambda 执行此操作,除了 Rekognition 之外,您还需要提供对其的 S3 访问权限。


0
投票

无法连接s3文件的原因有很多。

  1. 检查您所在的地区
  2. 验证您的存储桶策略
  3. 检查 IAM 用户区域和您的 s3 存储桶区域。它会对你有帮助
© www.soinside.com 2019 - 2024. All rights reserved.