Comment détecter le contenu des images à partir de Ruby avec Amazon Rekognition

Rekognition est un nouveau service Web Amazon qui «facilite l'ajout d'une analyse d'image à vos applications». Il peut détecter des visages et des objets, et vous permet même de stocker des bibliothèques de visages pour une reconnaissance future.

Si vous avez déjà utilisé un service AWS de Ruby, effectuer une simple reconnaissance d’image (sic) est simple.

Créez un fichier .env avec vos informations d'identification AWS

AWS_REGION = us-east-1
AWS_ACCESS_KEY_ID = [mettez cette clé ici]
AWS_SECRET_ACCESS_KEY = [et l'autre ici]

Obtenez les informations d'identification d'AWS, comme pour tout autre service. (Pour plus de sécurité, utilisez IAM pour créer des informations d'identification uniquement pour la reconnaissance.) Notez qu'il n'est actuellement disponible que dans les régions Ouest américain, Est américain et Irlande européen.

Créer un Gemfile pour lancer un projet simple

source 'https://rubygems.org'
joyau 'dotenv'
gem 'aws-sdk'

La gem dotenv extrait le fichier .env en tant que variables d’environnement pour votre programme. Le joyau aws-sdk est le SDK officiel Ruby pour AWS d’Amazon.

Ecrivez un programme Ruby pour interroger Amazon Rekognition

besoin de 'dotenv'
Dotenv.load
nécessite 'aws-sdk'
client = Aws :: Rekognition :: Client.new
resp = client.detect_labels (
         image: {octets: fichier.read (ARGV.first)}
       )
resp.labels.each do | label |
  met "# {label.name} - # {label.confidence.to_i}"
fin

Premièrement, nous chargeons nos bibliothèques et les variables d’environnement depuis .env. AWS SDK utilisera automatiquement vos informations d'identification.

Ensuite, nous créons un objet client et appelons sa méthode detect_labels (vraiment, la méthode DetectLabels de Rekognition) avec les données brutes d’un fichier dont le nom est transmis via le premier argument de ligne de commande (ARGV.first). Enfin, nous imprimons les étiquettes et les niveaux de confiance retournés.

Faire un peu de détection

Si le fichier ci-dessus s'appelait detect.rb par exemple, vous pouvez exécuter ceci:

ruby detect.rb myimage.jpg

Disons que myimage.jpg ressemblait à ceci:

Le script Ruby ci-dessus produirait:

Autoroute-64
Route 64
Chemin de terre-63
Gravier-63
Asphalte-56
Tarmac-56
Intersection-55

Les étiquettes de ce qui a été détecté sont à gauche, avec le pourcentage de «confiance» de l’algorithme de détection à droite.

Amusez-vous et rappelez-vous, Amazon vous facturera 1 $ par 1 000 images traitées, sauf si vous êtes sur le niveau gratuit.

Des idées terribles au hasard pour ce genre de choses si vous vous ennuyez

  • Analysez les images sur Twitter / Instagram, détectez ce qu’elles contiennent, puis automatisez les réponses à l’aide des libellés détectés, tels que «J'aime [libellé]!» Ou «Oh wow votre [libellé] est [superlative]! pire qu'ils ne le sont déjà. Mais vous aurez plus d'adeptes ..
  • Explorez n’importe quelle source de photos et choisissez celles qui ont le plus haut degré de confiance à la fois pour les "chats" et pour les "pizzas". Créez ensuite un compte Facebook ou une newsletter qui ne publie que des photos de chats proches de la pizza.
  • La méthode detect_labels indique si l'orientation de l'image doit être corrigée pour permettre la détection. Vous pouvez donc l'utiliser comme détecteur coûteux d'orientation de l'image.
  • Analysez les avatars que vos utilisateurs téléchargent et n'autorisez pas les kangourous ou les chiens en smoking à utiliser votre application. Ils sont difficiles à monétiser.
  • Utilisez une webcam plus un verrou de porte numérique et déverrouillez automatiquement la porte lorsque la caméra voit vos enfants. D'accord, cela peut échouer de temps en temps, mais vos enfants trouveront que dormir à l'extérieur est une belle aventure!
  • Faites des trucs diaboliques avec les trucs de détection et de reconnaissance faciales que je n’ai pas abordés plus haut. Je suis sûr que j’ai vu Amazon suggérer d’utiliser cette technologie dans les ‘panneaux d’affichage numériques’ pour détecter des informations sur les données démographiques des personnes qui passaient ou quelque chose du genre - ce genre de choses n’a sûrement que des résultats positifs.
  • Je m'ennuie maintenant, écoute Poppy, elle sera une grande star.