Amazon Rekognition: Guía rápida
Tags: aws, python, spanish, machinelearning
Published: 2022-07-05 18:17:44

## 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:

![Deteccion de objectos](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f5x0dily3ujcp1y3susv.jpg)

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


![Reconocimiento de celebridades](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/an4xzcdnxdxw10fils1b.png)

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_.

![Reconocimiento de rostros](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/691jm3qcyvowrg2pgj3a.jpg)

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](https://docs.aws.amazon.com/es_es/rekognition/latest/dg/API_IndexFaces.html)

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.

![Deteccion de texto](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o1mq3iaw88htm7k9gh9z.png)

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:

![Deteccion de equipos de proteccion](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8g6m93d26u9flphcc985.png)

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](https://dev.to/awsmllatam/machine-learning-para-desarrolladores-en-aws-4l59)