Motivación
En la actualidad las aplicaciones necesitan una mayor velocidad de desarrollo. La inclusión de funcionalidades que implican el uso de machine learning se ha vuelto cada vez mayor.
Amazon Web Services a desarrollado un conjunto de servicios que te permiten rápidamente agregar características de machine learning a tus aplicaciones.
Con Amazon Rekognition puedes integrar de manera sencilla y rápida el análisis de imágenes y video a tus aplicaciones. Este servicio utiliza deep learning para el entrenamiento de sus algoritmos, pero no requiere conocimientos en inteligencia artificial para su uso.
Introducción
Amazon Rekognition provee de un conjunto de APIs con las que podemos interactuar y obtener resultados sobre el análisis de imágenes y videos. Estas APIs retornan como respuesta la inferencia que realiza sobre los datos que le enviamos a modelos entrenados por los expertos que trabajan en AWS.
Características
En esta sección vamos a revisar las capacidades del servicio y su uso a través de Python
1 Detección de objetos
A través de esta api podemos obtener información acerca de los objetos dentro de imagenes y videos, así como también los limites cartesianos dentro de los cuales se encuentra contenido el objeto en la imagen, los llamados bounding box.
A continuación presentare un ejemplo:
Para lograr este resultado tenemos que enviar la imagen original a la api de Rekognition especificado su localización en Amazon S3, a continuación presentare el código en python haciendo uso de boto3 (la librería oficial para trabajar con python)
rekognition = boto3.client('rekognition')
detectLabelsResponse = rekognition.detect_labels(
Image={
'S3Object': {
'Bucket': bucketName,
'Name': imageName,
}
}
)
En la variable detectLabelsResponse tendremos la respuesta de la API, con las etiquetas correspondientes y las coordenadas de los bounding box correspondientes. Con la información de los bounding box y el uso de una librería de python como PIL podemos dibujar los cuadrados sobre la imagen y tener la imagen del ejemplo.
2 Moderación de contenido
Con la api de moderación de contenido podemos detectar el contenido no seguro o inapropiado, a través de las etiquetas que retorna el API junto a un porcentaje de confiabilidad. Dentro de las categorías principales tenemos las siguientes etiquetas: Explicit Nudity, Suggestive, Violence, Visually Disturbing, Rude Gestures, Drugs, Tobacco, Alcohol, Gambling, Hate Symbols.
Para invocar esta api utilizaremos el siguiente codigo en Python:
rekognition = boto3.client('rekognition')
detectModerationLabelsResponse = rekognition.detect_moderation_labels(
Image={
'S3Object': {
'Bucket': bucketName,
'Name': imageName,
}
}
)
En la variable detectModerationLabelsResponse tendremos la respuesta a la API que contendrá las etiquetas principales mencionadas con anterioridad con algunas etiquetas secundarias y su porcentaje de confiabilidad.
3 Reconocimiento de celebridades
Con la API de reconocimiento de celebridades puede rápidamente identificar personas famosas en imágenes y video. La API tiene la capacidad de detectar a una o varias celebridades dentro de una imagen o frame de video. Por ejemplo podría enviarle al API la siguiente imagen
La API me retornara como resultado el nombre del famoso, en este caso sera Dwayne Johnson, mas conocido como "La roca". A continuación presentare el código en python.
rekognition = boto3.client('rekognition')
recognizeCelebritiesResponse = rekognition.recognize_celebrities(
Image={
'S3Object': {
'Bucket': bucketName,
'Name': imageName,
}
}
)
En la variable recognizeCelebritiesResponse obtendremos el nombre del famoso junto con un porcentaje de confianza, en esta caso sera: Dwayne Johnson (99.1% confidence).
4 Busquedas de rostros
La Busqueda de rostros te permite reconocer personas dentro de una colección de rostros preestablecido. Esta colección de rostros debe ser creado antes de realizar el llamado a la API. Para que la api de una respuesta correcta el nuevo rostro a reconocer debe pertenecer al de una persona que se encuentra en nuestra colección de rostros, teniendo en cuenta que la imagen a reconocer no necesariamente tiene que ser una existente en nuestra colección de rostros.
La api puede reconocer uno o mas rostros dentro de una imagen como en el ejemplo a continuación donde mostramos los rostros reconocidos dentro de un bounding box.
Para trabajar con esta api es necesario primero crear una colección de rostros, es recomendable tener como mínimo 3 rostros por persona.
Para crear una colección usaremos el siguiente código en python:
rekognition = boto3.client('rekognition')
rekognition.create_collection(
CollectionId='face-collection'
)
Para agregar rostros a nuestra coleccion:
rekognition.index_faces(
CollectionId='face-collection',
Image={
'S3Object': {
'Bucket': bucketName,
'Name': imageName,
}
},
ExternalImageId=personId,
DetectionAttributes=[
'DEFAULT',
],
MaxFaces=1,
QualityFilter='AUTO'
)
Todos los rostros de la misma persona deben tener el mismo ExternalImageId, MaxFaces es el numero máximo de rostros que se va indexar, QualityFilter es el valor de calidad de la imagen, en caso el valor sea AUTO entonces Rekognition decidira si utiliza o no la imagen, DetectionAttributes son los atributos que deseas que se retornen en la API. Puedes encontrar el detalle de estos parametros aqui
Finalmente para realizar un reconocimiento facial en una nueva imagen utilizamos el siguiente código:
searchFacesResponse = rekognition.search_faces_by_image(
CollectionId='face-collection',
Image={
'S3Object': {
'Bucket': bucketName,
'Name': imageName,
}
},
MaxFaces=2,
FaceMatchThreshold=95
)
En searchFacesResponse tendremos la respuesta de la API con un máximo de 2 rostros reconocidos a un 95% de confiabilidad.
5 Detección de texto
Las imágenes y videos pueden venir acompañados de texto, poder convertir el texto de una imagen o video en caracteres de texto puede ser muy útil en muchas aplicaciones, como por ejemplo detectar imágenes con textos que tengan contenido explicito, otra aplicación es reconocer valores dentro de un texto como vouchers de pago o números de recibos, etc.
Por ejemplo en la siguiente imagen se ha podido reconocer una serie de palabras a través de la API de rekognition.
Para utilizar la API de Rekognition usaremos el siguiente código:
rekognition = boto3.client('rekognition')
detectTextResponse = rekognition.detect_text(
Image={
'S3Object': {
'Bucket': bucketName,
'Name': imageName,
}
},
Filters={
'WordFilter': {
'MinConfidence': 90
}
}
)
En la variable detectTextResponse tendremos los textos encontrados con una confiabilidad superior al 90%.
6 Detección de equipo de protección personal
En muchas industrias el tema de la seguridad es importante, llevar el equipo de protección adecuado puede salvar vidas. Otro uso importante que se le dio a esta característica es llevar el equipo de protección necesario para evitar el contagio del COVID-19. Esto demuestra como la tecnología nos puede ayudar al cuidado y protección de la salud.
Aquí les muestro un ejemplo de la detección de equipos de protección:
Para usar la api utilizaremos el siguiente código:
detectPPEResponse = rekognition.detect_protective_equipment(
Image={
'S3Object': {
'Bucket': bucketName,
'Name': imageName
}
},
SummarizationAttributes={
'MinConfidence': 90,
'RequiredEquipmentTypes': [
'FACE_COVER',
'HEAD_COVER',
'HAND_COVER',
]
}
)
En la variable detectPPEResponse tendremos el resultado a la API, en la imagen se buscara si el rostro, cabeza y manos están cubiertas con un 90% de confiabilidad.
Conclusión
Amazon Rekognition permite acelerar el desarrollo de aplicaciones donde es necesario el uso de análisis sobre imágenes y videos. El uso de esta herramienta no requiere una curva de aprendizaje elevada, solamente requiere leer un poco de documentación y revisar algunos ejemplos. No hay necesidad de tener conocimientos en inteligencia artificial para su uso.
Este blog es parte de una serie: Ir al menu
Top comments (3)
Hola Max, ¡un saludo!... muy completo tu post :)
¿Sería posible que uno de los tags lo pases a
#spanish
para que la comunidad en español también lo pueda encontrar?.Gracias :)
Excelente, gracias muy buen detalle lo agregare!
Muchas gracias, así la comunidad en español tiene su pequeño nicho por acá y nos podemos leer más fácilmente =).
Saludos =)