0

我有一個Gallery和Attachment模型。一個gallery has_many附件,基本上所有附件都是Attachment的':content'屬性中引用的圖片。當通過Carrierwave上傳時,獲取AWS S3對象以用於Rekognition

使用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 }) 

都具有相同的錯誤。我想知道我怎樣才能獲取s3對象形式@attachment,即使我可以這樣做,我怎樣才能在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 }) 

仍然沒有成功...

任何提示嗎?

回答

0

我終於想通了什麼問題,通過以下AWS forum

的「圖像」散列鍵採用的值必須命名爲「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" 
相關問題