每次运行命令时
aws rekognition detect-labels --image "S3Object={Bucket=BucketName,Name=picture.jpg}" --region us-east-1
我收到此错误。
InvalidS3ObjectException:调用 DetectLabels 操作时发生错误 (InvalidS3ObjectException):无法从 S3 获取图像元数据。检查对象密钥、区域和/或访问权限。
我正在尝试检索我正在从事的项目的标签,但我似乎无法通过这一步。我使用访问密钥、秘密密钥、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。
问题似乎出在我的 S3 存储桶上,但我还没有找到问题所在。
出于稳定性原因,S3 和 Rekognition 的区域应该相同。
更多信息:https://forums.aws.amazon.com/thread.jspa?threadID=243999
请检查您的 IAM 角色策略/权限,同时检查为 lambda 函数创建的角色。最好使用 IAM 策略检查器来验证策略。
我面临类似的问题,这可能是由于 IAM 角色和 S3 存储桶附带的权限和策略造成的。还需要检查 S3 存储桶中对象的元数据。
我的 S3 存储桶策略:
{
"Version": "2012-10-17",
"Id": "Policy1547200240036",
"Statement": [
{
"Sid": "Stmt1547200205482",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::459983601504:user/veral"
},
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::esp32-rekognition-459983601504/*"
}
]
}
跨域资源共享(CORS):
[
{
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"PUT",
"POST",
"GET",
"DELETE"
],
"AllowedOrigins": [
"*"
],
"ExposeHeaders": []
}
]
如果您通过 KMS 对存储桶使用服务器端加密,请记住还拥有/授予 IAM 角色访问权限以使用 KMS 进行解密