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,我在代码中配置了相同的区域。 我做错了什么?
我也有同样的问题。我解决这个问题的方法是重新排列我的存储桶和文件夹。确保您的图像直接位于存储桶中,而不是存储桶中的文件夹中。还要仔细检查图像名称是否正确以及一切是否正确。
确保
bucket
区域与呼叫区域相同。如果您使用 AWS CLI
,请确保包含具有适当区域的配置文件。
我遇到了类似的问题
botocore.errorfactory.InvalidS3ObjectException:发生错误 (InvalidS3ObjectException) 调用 CompareFaces 操作时:无法 > 从 S3 获取对象元数据。检查对象键、区域和/或访问权限 权限
这可能是由于错误的AWS区域、密钥或未正确授予权限。
在我的例子中,错误的区域被设置为环境变量。
我遇到了使用适用于 Android 的 AWS rekognition sdk 的情况,问题是 S3 存储桶的区域与我的请求中的区域不同,因此我必须在请求中放入正确的区域(与 S3 存储桶相同):
rekognitionClient.setRegion(Region.getRegion(Regions.US_WEST_1));//replace with your S3 region
在我看来,您对该 access_key 和 Secret_key 没有足够的权限!如果凭证是 IAM 用户的,请确保 IAM 用户有权执行 Rekognition Compare_faces 读取操作和 s3 读取操作!另请检查您的 s3 源和目标对象密钥是否正确。 最好创建具有所需权限的角色,并假设该角色请求临时安全凭证,而不是使用永久访问密钥。
对我来说,问题是 s3 Bucket 中包含空格的文件名。因此,您必须确保密钥在存储自身时不包含空格。
在我的例子中,我的对象路径以斜线(/)为前缀。删除它就成功了。
同样的错误消息,但使用 Textract 函数,权限没有问题,但我在 s3 中的文件包含特殊字符,一旦我重命名文件就没有问题了。
遇到类似的问题,并发现这是由于任何文件夹名称中包含空格所致。
编译前请确保脚本中的AWS环境变量配置
AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY
也遇到了这个问题,注意到我的 IAM 角色将存储桶名称作为资源,我必须在末尾添加斜杠和通配符。将其更改为“资源”:“arn:aws:s3:::/*”
对我来说,更改 S3 存储桶中的文件权限是有效的。
我遇到了同样的错误:我检查并发现该图像存在于存储桶的某个子文件夹中。确保图像位于根存储桶中。
虽然这是一个很老的问题,但我也有同样的问题。但就我而言,我使用的是
Lambda
并且我的 Lambda 角色无法访问 S3,因此如果您通过 Lambda 执行此操作,除了 Rekognition 之外,您还需要提供对其的 S3 访问权限。
无法连接s3文件的原因有很多。