0

J'ai une galerie et des modèles de pièces jointes. Une galerie has_many pièces jointes et essentiellement toutes les pièces jointes sont des images référencées dans l'attribut ': content' de la pièce jointe.Récupère un objet AWS S3 à utiliser dans Rekognition lorsqu'il est chargé via Carrierwave

Les images sont téléchargées en utilisant Carrierwave gem et sont stockées dans Aws S3 via fog-aws gem. Cela fonctionne bien. Cependant, je voudrais effectuer une reconnaissance d'image pour les images téléchargées avec Amazon Rekognition.

J'ai installé aws-sdk gem et je suis capable d'instancier Rekognition sans problème jusqu'à ce que j'appelle la méthode detect_labels à quel point j'ai été incapable d'utiliser mes images attachées comme arguments de cette méthode.

si gros que je l'ai essayé:

@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 

J'ai essayé d'utiliser:

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

Tous avec la même erreur. Je me demande comment puis-je récupérer la forme d'objet s3 @attachment et, même si je pouvais le faire, comment pourrais-je l'utiliser comme argument dans detect_labels.

J'ai essayé aussi aller chercher directement l'objet s3 essayer ce dernier bit:

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

# and then 

client.detect_labels(image: { s3_object }) 

Toujours pas de succès ...

Des conseils?

Répondre

0

J'ai finalement compris quel était le problème, aidé par le AWS forum

suivant la clé de hachage « Image » prend comme valeur un objet qui doit être nommé « s3_object » et qui doit par la suite que le nom du godet S3 et le chemin du fichier à traiter. À titre de référence, voir l'exemple correct ci-dessous:

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"