Cómo detectar contenido de imágenes de Ruby con Amazon Rekognition

Rekognition es un nuevo servicio web de Amazon que "facilita agregar análisis de imágenes a sus aplicaciones". Puede detectar caras y objetos, e incluso le permite almacenar bibliotecas de caras para reconocimiento futuro.

Si alguna vez ha usado un servicio de AWS de Ruby antes, hacer un poco de rekognition de imagen simple (sic) es sencillo.

Cree un archivo .env con sus credenciales de AWS

AWS_REGION = us-east-1
AWS_ACCESS_KEY_ID = [ponga esa clave aquí]
AWS_SECRET_ACCESS_KEY = [y el otro aquí]

Obtenga las credenciales de AWS, como lo haría con cualquier otro servicio. (Para mayor seguridad, use IAM para crear credenciales únicamente para Rekognition). Tenga en cuenta que actualmente solo está disponible en las regiones Oeste de EE. UU., Este de EE. UU. E Irlanda de la UE.

Cree un Gemfile para poner en marcha un proyecto simple

fuente 'https://rubygems.org'
joya 'dotenv'
joya 'aws-sdk'

La gema dotenv extrae el archivo .env como variables de entorno para su programa. La gema aws-sdk es el Ruby SDK oficial de Amazon para AWS.

Escriba un programa Ruby para consultar Amazon Rekognition

requiere 'dotenv'
Dotenv.load
requiere 'aws-sdk'
client = Aws :: Rekognition :: Client.new
resp = client.detect_labels (
         imagen: {bytes: File.read (ARGV.first)}
       )
resp.labels.each do | label |
  pone "# {label.name} - # {label.confidence.to_i}"
final

Primero, cargamos nuestras bibliotecas y cargamos en las variables de entorno de .env. AWS SDK usará sus credenciales automáticamente.

Luego, creamos un objeto cliente y llamamos a su método detect_labels (realmente, el método DetectLabels de Rekognition) con los datos sin procesar de un archivo cuyo nombre se pasa a través del primer argumento de línea de comando (ARGV.first). Finalmente, imprimimos las etiquetas y los niveles de confianza devueltos.

Haz algo de detección

Si el archivo anterior se llamase detect.rb, por ejemplo, podría ejecutar esto:

ruby detect.rb myimage.jpg

Digamos que myimage.jpg se veía así:

El script de Ruby anterior produciría:

Autopista-64
Carretera-64
Camino de tierra-63
Grava-63
Asphalt-56
Asfalto-56
Intersección-55

Las etiquetas de lo que se ha detectado están a la izquierda, con el porcentaje de "confianza" del algoritmo de detección a la derecha.

Diviértete y recuerda que Amazon te cobrará $ 1 por cada 1000 imágenes procesadas a menos que estés en el nivel gratuito.

Ideas terribles al azar para estas cosas si estás aburrido

  • Escanee Twitter / Instagram en busca de imágenes, detecte lo que hay en ellas, luego automatice las respuestas utilizando las etiquetas detectadas, como "¡Me encanta [etiqueta]!" O "¡Oh, wow, su [etiqueta] es [superlativa]!" Y haga incluso Twitter / Instagram peor de lo que ya son. Pero obtendrás más seguidores ...
  • Rastree cualquier fuente de fotos y elija todas aquellas que tengan una coincidencia de alta confianza tanto en "gatos" como en "pizza". Luego, cree una cuenta de Facebook o un boletín de correo electrónico que solo publique imágenes de gatos que estén cerca de una pizza.
  • El método detect_labels devuelve si la orientación de la imagen tuvo que corregirse para hacer la detección, por lo que podría usarla como un costoso detector de orientación de imagen.
  • Escanee los avatares que cargan sus usuarios y no permita que los canguros o perros en trajes de etiqueta usen su aplicación. Son difíciles de monetizar.
  • Use una cámara web más una cerradura digital y desbloquee automáticamente la puerta cuando la cámara vea a sus hijos. OK, puede fallar algunas veces, ¡pero a tus hijos les parecerá una gran aventura dormir al aire libre!
  • Haz cosas malvadas con la detección facial y las cosas de reconocimiento que no pude cubrir arriba. Estoy seguro de que vi a Amazon sugerir usar esta tecnología en "vallas publicitarias digitales" para detectar cosas sobre la demografía de las personas que pasan o algo así; ese tipo de cosas seguramente solo tiene resultados positivos.
  • Ahora estoy aburrida, ve y escucha a Poppy, ella será una gran estrella.