Visión Artificial y Reconocimiento de Imágenes | AWS/Java

Explica: Luis Francisco Gutierrez, Expert Tech Lead

Zenta Group
4 min readNov 27, 2023

Amazon Rekognition es un servicio de AWS basado en tecnología Deep Learning, con la capacidad de reconocimiento de rostros, etiquetas, objetos, lugares, etc, a partir del análisis de imágenes y videos.

Con Amazon Rekognition puedes:

  • Diferenciar un usuario real de un boot o una suplantación
  • Buscar y comparar rostros en una imagen o video
  • Analizar y extraer los atributos de un rostro en particular (gafas, ojos abiertos, etc.)
  • Determinar si una imagen presenta contenido inapropiado (desnudez, armas, etc)
  • Buscar logos y marcas en una imagen
  • Extraer texto de una imagen
  • Analizar videos

Amazon Rekognition nos proporciona una API para hacer uso de estos servicios.

En el siguiente ejercicio utilizamos el SDK 2.x de AWS para Java, reconocemos un rostro y lo comparamos con otro.

FLUJO DE LA APLICACIÓN

La aplicación recibe dos imágenes, primero se asegurara que hay un rostro en cada una de ellas, sino levantará una excepción y terminará, en caso contrario procede a comparar los rostros y mostrar el resultado en consola.

  • Para la detección de rostros, usaremos el servicio DetectFaces de nuestro cliente Rekognition, este recibe como parámetro una imagen y devuelve un arreglo con los rostros que detecte en la imagen.
  • Para la comparación de rostros, utilizaremos CompareFaces, recibe como parámetros dos imágenes y nos devuelve una respuesta probabilística entre 0.0 y 100.

“Es nuestra decisión qué umbral de incertidumbre aceptar”

IMPLEMENTACIÓN

Escribí un componente utilitario que alberga los métodos que nos permiten conectarnos con nuestras credenciales de AWS, y crea un cliente Rekognition.

NOTA: Este tipo de conexión solo es recomendada en ejercicios de prueba, en una aplicación productiva utilice roles y políticas de AWS.

La clase que hace el procesamiento crea un cliente Rekognition, recibe dos nombres de imágenes que están disponibles en la carpeta de recursos (src/main/resources), valida la presencia de rostros en cada una de ellas y realiza la comparación.

En esta prueba, elegí dos imágenes de la misma persona con una diferencia de 60 años para mostrar cómo, a pesar de que lucen diferentes por el paso del tiempo, el algoritmo de biometría facial puede determinar que es la misma persona.

El algoritmo utiliza decenas de medidas para generar la huella biométrica de un rostro, algunas de ellas son:

  • Distancia entre los ojos
  • Distancia de la frente a la barbilla
  • Distancia entre la nariz y la boca
  • Profundidad de las cuencas oculares
  • Forma de los pómulos
  • Contorno de los labios, las orejas y la barbilla

Este método determina si hay un rostro en la imagen usando el servicio DetectFaces de Recognition.

Estos dos métodos, leen una imagen de la carpeta de recursos y la transforman en un objeto de tipo rekognition.model.Image.

La clase Main de la aplicación

La salida por consola, noten que el resultado de cualquier servicio de Machine Learning no es determinístico, (true/false) es probabilístico.

El resultado anterior nos dice que los rostros son similares en un 95.32099% un umbral sobre 90% es aceptable, sin embargo en entornos donde el riesgo de suplantación de identidad y fraude es alto, se recomienda no permitir valores por debajo del 99%.

El código fuente está disponible aquí: GitHub

¿Te gustó este artículo? Comparte y deja tu comentario

--

--