【问题标题】:Unable to get object metadata from S3. Check object key, region and/or access permissions in aws Rekognition无法从 S3 获取对象元数据。在 aws Rekognition 中检查对象键、区域和/或访问权限
【发布时间】:2018-10-15 07:52:56
【问题描述】:
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,我在代码中进行了相同的配置。 我做错了什么?

【问题讨论】:

  • 您找到解决方案了吗?尽管相同的 lambda 成功地与 aws rekognition 创建的另一个存储桶一起工作,但我的存储桶也遇到了同样的错误。
  • 这段代码现在对我有用,我没有改变任何东西,当我部署它时它刚刚开始工作。
  • 我认为该角色已分配给另一个存储桶。它现在正在工作。
  • 您能否详细说明您是如何解决的?这是一个普遍的问题

标签: python amazon-web-services amazon-s3 face-detection


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          在我使用 AWS rekognition sdk for android 时发生过,问题是我的请求中 S3 存储桶的区域不一样,所以我必须在请求中放入正确的区域(与 S3 存储桶相同) :

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

          【讨论】:

            【解决方案6】:

            检查 S3 和 Image Rekognition 是否在同一个区域,我知道,这不是很好或记录在案(我猜),但这些家伙正在谈论它 herehere

            【讨论】:

              【解决方案7】:

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

              【讨论】:

              • 是的,我可以支持。即使 S3 是全球性的,但当我将会话设置为与 S3 相同的区域时,它仍然有效
              【解决方案8】:

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

              【讨论】:

                【解决方案9】:

                我遇到了同样的问题。我所做的修复它是重新排列我的存储桶和文件夹。确保您的图像直接在您的存储桶中,而不是在您的存储桶中的文件夹中。还要仔细检查图像的名称是否正确以及一切是否正确。

                【讨论】:

                • 是的,我发现存储桶的名称以及存储在其中的文件是区分大小写的,即“hello”!=“Hello”。愚蠢的错误。
                • 或者如果你有文件夹,把对象的完整路径放上去:path/to/my/object.ext
                【解决方案10】:

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

                【讨论】:

                • 我已向用户提供管理员和 Rekognition 访问权限。我已经创建了角色,但我不确定它们。请指导我
                【解决方案11】:

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

                【讨论】:

                • 您能详细说明一下吗?我是新手
                • 好的,我已经通过从 aws 获取正确的访问密钥来设置凭据,但它仍然显示同样的问题。
                • 你如何运行你的python脚本。?你下面几行的输出是什么..?请查看print(os.environ['AWS_SECRET_ACCESS_KEY']) print(os.environ['AWS_ACCESS_KEY_ID'])
                • 我只是使用“aws configure”通过命令行更改了键的值
                • 那很好。然后在 AWS 控制台中检查 s3 角色。 S3 Bucket Access to a Specific IAM Role
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2019-01-28
                • 1970-01-01
                • 1970-01-01
                • 2018-11-26
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多