无法从 S3 获取对象元数据。检查 aws Rekognition 中的对象键、区域 and/or 访问权限
Unable to get object metadata from S3. Check object key, region and/or access permissions in aws Rekognition
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')
我正在尝试比较存储桶中存在的两个图像,但无论我在哪个区域 select,我总是会收到以下错误:-
botocore.errorfactory.InvalidS3ObjectException:调用 CompareFaces 操作时发生错误 (InvalidS3ObjectException):无法从 S3 获取对象元数据。检查对象键、区域 and/or 访问权限。
我的存储桶区域是 us-east-1,我在我的代码中配置了相同的区域。
我做错了什么?
编译前请确保脚本中的AWS环境变量配置AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY
在我看来,您对 access_key 和 secret_key 没有足够的权限!如果凭证是 IAM 用户的,请确保 IAM 用户有权执行 Rekognition compare_faces 读取操作和 s3 读取操作!还要检查您的 s3 源和目标对象密钥是否正确。
最好创建具有所需权限的角色并承担该角色来请求临时安全凭证,而不是使用永久访问密钥。
我遇到了同样的问题。我所做的修复是重新排列我的存储桶和文件夹。确保您的图像直接在您的存储桶中,而不是在您存储桶中的文件夹中。还要仔细检查图像的名称是否正确以及一切是否正确。
也 运行 进入这个问题,注意到我的 IAM 角色将 bucketname 作为资源,我不得不在末尾添加一个斜杠和一个通配符。将其更改为 "Resource":"arn:aws:s3:::/*"
确保 bucket
区域与呼叫区域相同。如果您使用的是 AWS CLI
,请确保包含具有适当区域的配置文件。
检查 S3 和 Image Rekognition 是否在同一区域,我知道,这不是很好或没有记录(我猜),但这些人正在谈论它 here and here
我遇到了 android 使用 AWS rekognition sdk 的问题,问题是 S3 存储桶的区域在我的请求中不一样,所以我必须在请求中输入正确的区域(与 S3 存储桶相同):
rekognitionClient.setRegion(Region.getRegion(Regions.US_WEST_1));//replace with your S3 region
对我来说,更改 S3 存储桶中的文件权限有效。
对我来说,问题是包含空格的 s3 存储桶中的文件名。所以你必须确保密钥在存储自身时不包含空格。
我有同样的错误:我检查并发现图像存在于存储桶的某个子文件夹中。确保图像在根存储桶中。
在我的例子中,我的对象路径以斜杠 (/) 为前缀。删除它就可以了。
虽然这是一个很老的问题,但我也有同样的问题。但就我而言,我使用的是 Lambda
并且我的 Lambda 角色没有访问 S3 的权限,因此如果您通过 Lambda 执行此操作,除了 Rekognition 之外,您还需要提供对它的 S3 访问权限。
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')
我正在尝试比较存储桶中存在的两个图像,但无论我在哪个区域 select,我总是会收到以下错误:-
botocore.errorfactory.InvalidS3ObjectException:调用 CompareFaces 操作时发生错误 (InvalidS3ObjectException):无法从 S3 获取对象元数据。检查对象键、区域 and/or 访问权限。
我的存储桶区域是 us-east-1,我在我的代码中配置了相同的区域。 我做错了什么?
编译前请确保脚本中的AWS环境变量配置AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY
在我看来,您对 access_key 和 secret_key 没有足够的权限!如果凭证是 IAM 用户的,请确保 IAM 用户有权执行 Rekognition compare_faces 读取操作和 s3 读取操作!还要检查您的 s3 源和目标对象密钥是否正确。 最好创建具有所需权限的角色并承担该角色来请求临时安全凭证,而不是使用永久访问密钥。
我遇到了同样的问题。我所做的修复是重新排列我的存储桶和文件夹。确保您的图像直接在您的存储桶中,而不是在您存储桶中的文件夹中。还要仔细检查图像的名称是否正确以及一切是否正确。
也 运行 进入这个问题,注意到我的 IAM 角色将 bucketname 作为资源,我不得不在末尾添加一个斜杠和一个通配符。将其更改为 "Resource":"arn:aws:s3:::/*"
确保 bucket
区域与呼叫区域相同。如果您使用的是 AWS CLI
,请确保包含具有适当区域的配置文件。
检查 S3 和 Image Rekognition 是否在同一区域,我知道,这不是很好或没有记录(我猜),但这些人正在谈论它 here and here
我遇到了 android 使用 AWS rekognition sdk 的问题,问题是 S3 存储桶的区域在我的请求中不一样,所以我必须在请求中输入正确的区域(与 S3 存储桶相同):
rekognitionClient.setRegion(Region.getRegion(Regions.US_WEST_1));//replace with your S3 region
对我来说,更改 S3 存储桶中的文件权限有效。
对我来说,问题是包含空格的 s3 存储桶中的文件名。所以你必须确保密钥在存储自身时不包含空格。
我有同样的错误:我检查并发现图像存在于存储桶的某个子文件夹中。确保图像在根存储桶中。
在我的例子中,我的对象路径以斜杠 (/) 为前缀。删除它就可以了。
虽然这是一个很老的问题,但我也有同样的问题。但就我而言,我使用的是 Lambda
并且我的 Lambda 角色没有访问 S3 的权限,因此如果您通过 Lambda 执行此操作,除了 Rekognition 之外,您还需要提供对它的 S3 访问权限。