【发布时间】:2021-06-18 14:15:20
【问题描述】:
每次我运行命令时
aws rekognition detect-labels --image "S3Object={Bucket=BucketName,Name=picture.jpg}" --region us-east-1
我收到此错误。
InvalidS3ObjectException: An error occurred (InvalidS3ObjectException) when calling the DetectLabels operation: Unable to get image metadata from S3. Check object key, region and/or access permissions.
我正在尝试为我正在处理的项目检索标签,但我似乎无法通过这一步。我使用我的访问密钥、秘密密钥、us-east-1 区域和 json 作为我的输出格式配置了 aws。
我也尝试了下面的代码,我收到了完全相同的错误(我正确地将 BucketName 替换为我的存储桶名称。)
import boto3
BUCKET = "BucketName"
KEY = "picture.jpg"
def detect_labels(bucket, key, max_labels=10, min_confidence=90, region="eu-west-1"):
rekognition = boto3.client("rekognition", region)
response = rekognition.detect_labels(
Image={
"S3Object": {
"Bucket": bucket,
"Name": key,
}
},
MaxLabels=max_labels,
MinConfidence=min_confidence,
)
return response['Labels']
for label in detect_labels(BUCKET, KEY):
print "{Name} - {Confidence}%".format(**label)
我可以在我的用户帐户上看到它正在调用 Rekognition。 Image showing it being called from IAM.
似乎问题出在我的 S3 存储桶的某个地方,但我还没有找到原因。
【问题讨论】:
-
从错误中可以明显看出您的请求正在到达 Rekognition,它无法访问存储桶中的对象。 Rekognition 不会向 S3 发出跨区域请求 - 存储桶必须位于您调用 Rekognition 的同一区域。 docs.aws.amazon.com/rekognition/latest/dg/API_S3Object.html
-
@michael-sqlbot 我的存储桶在美国俄亥俄州东部,但 URL 显示的是 us-east-1,所以我认为它在弗吉尼亚州。我修好了它。我现在工作非常感谢。
-
我面临同样的问题,但现在 AWS 没有指定存储桶区域,因为它超出了我们的控制范围。怎么办?
标签: amazon-web-services amazon-s3 amazon-rekognition