1

我有一个画廊和附件模型。画廊有很多附件,基本上所有附件都是在附件的 ':content' 属性中引用的图像。

图像使用Carrierwave gem上传,并通过fog-aws gem存储在 Aws S3 中。这工作正常。但是,我想使用Amazon Rekognition对上传的图像进行图像识别。

我已经安装了aws-sdk gem,并且我能够毫无问题地实例化 Rekognition,直到我调用该detect_labels方法,此时我无法使用我附加的图像作为该方法的参数。

太胖了,我试过了:

@attachement = Attachment.first
client = Aws::Rekognition::Client.new
resp = client.detect_labels(
         image: @attachment
       )
# I GET expected params[:image] to be a hash... and got class 'Attachment' instead

我试过使用:

client.detect_labels( image: { @attachment })
client.detect_labels( image: { @attachment.content.url })
client.detect_labels( image: { @attachment.content })

都有同样的错误。我想知道如何从@attachment 中获取 s3 对象,即使我可以这样做,我如何将它用作detect_labels.

我也尝试过直接获取 s3 对象来尝试最后一点:

s3 = AWS:S3:Client.new
s3_object = s3.list_objects(bucket: 'my-bucket-name').contents[0]

# and then

client.detect_labels( image: { s3_object })

还是没有成功...

有小费吗?

4

1 回答 1

1

在以下AWS 论坛的帮助下,我终于弄清楚了问题所在

“Image”哈希键将必须命名为“s3_object”的对象作为值,随后只需要 S3 存储桶名称和要处理的文件的路径。作为参考,请参见下面的正确示例:

client = Aws::Rekognition::Client.new
resp = client.detect_labels(
         image:
            { s3_object: {
              bucket: "my-bucket-name",
              name: @attachment.content.path, 
            },
          }
       )

# @attachment.content.path => "uploads/my_picture.jpg"
于 2017-08-07T10:23:49.303 回答