通过 Carrierwave 上传时获取 AWS S3 对象以在 Rekognition 中使用
Fetch an AWS S3 object to use in Rekognition when uploaded via Carrierwave
我有一个图库和附件模型。图库 has_many 附件和基本上所有附件都是在附件的“:content”属性中引用的图像。
图片是使用Carrierwave gem and are stored in Aws S3 via fog-aws gem. This works OK. However, I'd like to conduct image recognition to the uploaded images with 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 })
仍然没有成功...
有什么建议吗?
在以下AWS forum
的帮助下,我终于弄清楚了问题出在哪里
'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"
我有一个图库和附件模型。图库 has_many 附件和基本上所有附件都是在附件的“:content”属性中引用的图像。
图片是使用Carrierwave gem and are stored in Aws S3 via fog-aws gem. This works OK. However, I'd like to conduct image recognition to the uploaded images with 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 })
仍然没有成功...
有什么建议吗?
在以下AWS forum
的帮助下,我终于弄清楚了问题出在哪里'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"