En diversas industrias, como las de servicios financieros, telecomunicaciones y atención médica, los clientes utilizan un proceso de identidad digital, que generalmente implica varios pasos para verificar a los usuarios finales durante la incorporación en línea o la autenticación intensificada. Un ejemplo de un paso que se puede utilizar es la búsqueda de rostros, que puede ayudar a determinar si el rostro de un nuevo usuario final coincide con los asociados con una cuenta existente.
La creación de un sistema de búsqueda de rostros preciso implica varios pasos. El sistema debe poder detectar rostros humanos en imágenes, extraer los rostros en representaciones vectoriales, almacenar vectores de rostros en una base de datos y comparar rostros nuevos con entradas existentes. amazon Rekognition hace que esto sea sencillo al brindarle modelos previamente entrenados que se invocan mediante simples llamadas API.
amazon Rekognition le permite lograr una precisión de búsqueda de rostros muy alta con una sola imagen de rostro. En algunos casos, puedes utilizar varias imágenes del rostro de la misma persona para crear vectores de usuario y mejorar aún más la precisión. Esto es especialmente útil cuando las imágenes tienen variaciones en iluminación, poses y apariencias.
En esta publicación, demostramos cómo utilizar las API de búsqueda facial de amazon Rekognition con vectores de usuario para aumentar la puntuación de similitud para coincidencias verdaderas y disminuir la puntuación de similitud para coincidencias verdaderas.
Comparamos los resultados de realizar coincidencias de rostros con y sin vectores de usuario.
Coincidencia de rostros de amazon Rekognition
La coincidencia de rostros de amazon Rekognition permite medir la similitud de un vector de rostro extraído de una imagen con un vector de rostro extraído de otra imagen. Se dice que un par de imágenes de caras son una verdadero partido si ambas imágenes contienen el rostro de la misma persona, y una verdadera no coincidencia de lo contrario. amazon Rekognition devuelve una puntuación por la similitud de las caras de origen y de destino. La puntuación mínima de similitud es 0, lo que implica muy poca similitud, y la máxima es 100.
Para comparar una cara de origen con una colección de caras de destino (coincidencia 1:N), amazon Rekognition le permite crear un objeto de colección y completarlo con caras de imágenes mediante llamadas API.
Al agregar una cara a una colección, amazon Rekognition no almacena la imagen real de la cara, sino el vector de la cara, una representación matemática de la cara. Con la API SearchFaces, puedes comparar una cara de origen con una o varias colecciones de caras de destino.
En junio de 2023, AWS lanzó vectores de usuario, una nueva capacidad que mejora significativamente la precisión de la búsqueda de rostros mediante el uso de múltiples imágenes de rostros de un usuario. Ahora puede crear vectores de usuario, que agregan múltiples vectores de caras del mismo usuario. Los vectores de usuario ofrecen una mayor precisión de búsqueda de rostros con representaciones más sólidas, porque contienen distintos grados de iluminación, nitidez, pose, apariencia y más. Esto mejora la precisión en comparación con la búsqueda en vectores de caras individuales.
En las siguientes secciones, describimos el proceso de uso de vectores de usuario de amazon Rekognition. Lo guiamos a través de la creación de una colección, el almacenamiento de vectores faciales en esa colección, la agregación de esos vectores faciales en vectores de usuario y luego la comparación de los resultados de la búsqueda con esos vectores faciales individuales y vectores de usuario.
Descripción general de la solución
Para esta solución, utilizamos una colección de usuarios de amazon Rekognition, cada uno con sus vectores de rostros indexados asociados de varias imágenes diferentes de rostros para cada usuario.
Veamos el flujo de trabajo para crear una colección con usuarios y caras:
- Cree una colección de amazon Rekognition.
- Para cada usuario, cree un usuario en la colección.
- Para cada imagen del usuario, agregue la cara a la colección (IndexFaces, que devuelve la identificación de la cara correspondiente a cada vector de cara).
- Asocie todos los ID de rostro indexados con el usuario (esto es necesario para los vectores de usuario).
Luego, compararemos los siguientes flujos de trabajo:
Búsqueda con una nueva imagen de entrada determinada frente a vectores de caras individuales en nuestra colección:
- Obtenga todas las caras de una imagen (DetectFaces).
- Para cada rostro, compárelo con rostros individuales de nuestra colección (SearchFacesByImage).
Búsqueda con una nueva imagen de entrada determinada frente a vectores de usuario en nuestra colección:
- Obtenga todas las caras de una imagen (DetectFaces).
- Para cada cara, compárelo con el vector del usuario (SearchUsersByImage).
Ahora describamos la solución en detalle.
Requisitos previos
Agregue la siguiente política a su usuario o rol de AWS Identity and Access Management (IAM). La política le otorga permiso a las API de amazon Rekognition relevantes y le permite acceder a un depósito de amazon Simple Storage Service (amazon S3) para almacenar las imágenes:
Cree una colección de amazon Rekognition y agregue usuarios y rostros
Primero, creamos un depósito S3 para almacenar las imágenes de los usuarios. Organizamos el depósito creando una carpeta para cada usuario que contiene sus imágenes personales. Nuestro carpeta de imágenes se parece a la siguiente estructura:
Nuestro depósito S3 tiene un directorio para cada usuario que almacena sus imágenes. Actualmente hay dos carpetas y cada una contiene varias imágenes. Puede agregar más carpetas para sus usuarios, cada una de las cuales contiene una o más imágenes para indexar.
A continuación, creamos nuestra colección de amazon Rekognition. hemos suministrado ayudantes.pyque contiene diferentes métodos que utilizamos:
- crear_colección – Crear una nueva colección
- eliminar_colección – Eliminar una colección
- crear usuario – Crear un nuevo usuario en una colección.
- agregar_caras_a_la_colección – Agregar caras a la colección
- caras_asociadas – Asociar face_ids a un usuario en una colección
- get_subdirs – Obtener todos los subdirectorios bajo el prefijo S3
- obtener_archivos – Obtener todos los archivos bajo el prefijo S3
El siguiente es un método de ejemplo para crear una colección de amazon Rekognition:
Crea la colección con el siguiente código:
A continuación, agreguemos los vectores de caras a nuestra colección y agreguemoslos en vectores de usuario.
Para cada usuario en el directorio S3, creamos un vector de usuario en la colección. Luego indexamos las imágenes de rostros de cada usuario en la colección como vectores de rostros individuales, lo que genera identificaciones de rostros. Por último, asociamos los ID de rostro al vector de usuario apropiado.
Esto crea dos tipos de vectores en nuestra colección:
- Vectores de caras individuales
- Vectores de usuario, que se crean en función de los ID de vectores faciales proporcionados mediante el método
associate_faces
Vea el siguiente código:
Utilizamos los siguientes métodos:
- get_subdirs – Devuelve una lista de todos los directorios de los usuarios. En nuestro ejemplo, el valor es (Swami,Werner).
- obtener_archivos – Devuelve todos los archivos de imágenes bajo el prefijo S3 para el usuario.
- face_ids – Esta es una lista que contiene todos los ID de rostro que pertenecen a un usuario. Usamos esta lista cuando llamamos a la API AssociateFaces.
Como se explicó anteriormente, puede agregar más usuarios agregando carpetas para ellos (la carpeta dicta la ID del usuario) y agregar sus imágenes en esa carpeta (no es necesario ordenar los archivos).
Ahora que nuestro entorno está configurado y tenemos vectores de caras individuales y vectores de usuario, comparemos nuestra calidad de búsqueda con cada uno de ellos. Para hacer eso, usamos una nueva foto con varias personas e intentamos hacer coincidir sus rostros con nuestra colección, primero con los vectores de rostros individuales y luego con los vectores de usuario.
Búsqueda de rostros de imágenes frente a una colección de vectores de rostros individuales
Para buscar en nuestros vectores de rostros individuales, utilizamos la API SearchFacesByImage de amazon Rekognition. Esta función utiliza una imagen de rostro de origen para buscar vectores de rostros individuales en nuestra colección y devuelve rostros que coinciden con nuestro umbral de puntuación de similitud definido.
Una consideración importante es que la SearchFacesByImage
La API solo funcionará en la cara más grande detectada en la imagen. Si hay varias caras, debe recortar cada cara individual y pasarla por separado al método de identificación.
Para extraer detalles de caras de una imagen (como su ubicación en la imagen), utilizamos la API DetectFaces de amazon Rekognition.
La siguiente detectar_caras_en_imagen El método detecta caras en una imagen. Para cada cara realiza las siguientes acciones:
- Imprima la ubicación del cuadro delimitador
- Recorte la cara de la imagen y verifique si dicha cara existe en la colección e imprima el usuario o 'Desconocido'
- Imprimir la puntuación de similitud
El código Python de ejemplo utiliza el Almohada Biblioteca para realizar manipulaciones de imágenes (como imprimir, dibujar y recortar).
Utilizamos un umbral de puntuación de similitud del 99 %, que es una configuración común para los casos de uso de verificación de identidad.
Ejecute el siguiente código:
file_key
es la clave del objeto S3 que queremos comparar con nuestra colección. Hemos proporcionado una imagen de ejemplo (photo.jpeg
) en la carpeta de imágenes.
La siguiente imagen muestra nuestros resultados.
Utilizando un umbral del 99%, sólo se identificó a una persona. El Dr. Werner Vogels fue marcado como Desconocido. Si ejecutamos el mismo código usando un umbral inferior de 90 (umbral establecido = 90), obtenemos los siguientes resultados.
Ahora vemos que el rostro del Dr. Werner Vogel tiene una puntuación de similitud del 96,86%. A continuación, verifiquemos si podemos obtener una puntuación de similitud por encima de nuestro umbral definido utilizando vectores de usuario.
Búsqueda facial de imágenes frente a una colección de vectores de usuario
Para buscar en nuestros vectores de usuario, utilizamos la API SearchUsersByImage de amazon Rekognition. Esta función utiliza una imagen facial de origen para buscar vectores de usuarios en nuestra colección y devuelve usuarios que coinciden con nuestro umbral de puntuación de similitud definido.
La misma consideración es relevante aquí: la SearchUsersByImage
La API solo funcionará en la cara más grande detectada en la imagen. Si hay varias caras presentes, debe recortar cada cara individual y pasarla por separado al método de identificación.
Para extraer detalles de caras de una imagen (como su ubicación en la imagen), utilizamos la API DetectFaces de amazon Rekognition.
La siguiente detectar_usuarios_en_imagen El método detecta rostros en una imagen. Para cada cara realiza las siguientes acciones:
- Imprima la ubicación del cuadro delimitador
- Recorte la cara de la imagen y verifique si dicha cara de usuario existe en nuestra colección e imprima el usuario o 'Desconocido'
- Imprimir la puntuación de similitud
Vea el siguiente código:
La función devuelve una imagen modificada con los resultados que se pueden guardar en amazon S3 o imprimir. La función también genera estadísticas sobre las edades estimadas de las caras en el terminal.
Ejecute el siguiente código:
La siguiente imagen muestra nuestros resultados.
Los usuarios que existen en nuestra colección fueron identificados correctamente con alta similitud (más del 99%).
Pudimos aumentar la puntuación de similitud utilizando tres vectores de caras por vector de usuario. A medida que aumentamos la cantidad de vectores faciales utilizados, esperamos que también aumente la puntuación de similitud para coincidencias verdaderas. Puede utilizar hasta 100 vectores de caras por vector de usuario.
Puede encontrar un código de ejemplo de un extremo a otro en el repositorio de GitHub. Incluye un detallado cuaderno jupyter que puede ejecutar en amazon SageMaker Studio (u otras alternativas).
Limpiar
Para eliminar la colección, utilice el siguiente código:
Conclusión
En esta publicación, presentamos cómo utilizar los vectores de usuario de amazon Rekognition para implementar la búsqueda de rostros en una colección de rostros de usuarios. Demostramos cómo mejorar la precisión de la búsqueda de rostros mediante el uso de múltiples imágenes de rostros por usuario y las comparamos con vectores de rostros individuales. Además, describimos cómo puede utilizar las diferentes API de amazon Rekognition para detectar rostros. El código de ejemplo proporcionado sirve como una base sólida para construir un sistema de búsqueda de rostros funcional.
Para obtener más información sobre los vectores de usuario de amazon Rekognition, consulte Búsqueda de caras en una colección. Si es nuevo en amazon Rekognition, puede utilizar nuestra capa gratuita, que tiene una duración de 12 meses e incluye el procesamiento de 5000 imágenes por mes y el almacenamiento de 1000 objetos vectoriales de usuario por mes.
Sobre los autores
Arik Porat es arquitecto senior de soluciones de startups en amazon Web Services. Trabaja con nuevas empresas para ayudarlas a construir y diseñar sus soluciones en la nube y le apasiona el aprendizaje automático y las soluciones basadas en contenedores. En su tiempo libre, a Arik le gusta jugar al ajedrez y a los videojuegos.
Sale Efron es arquitecto de soluciones de startups en amazon Web Services. Eliran es un entusiasta de los datos y la informática y ayuda a las empresas emergentes a diseñar sus arquitecturas de sistemas. En su tiempo libre, a Eliran le gusta construir y correr autos en carreras Touring y construir dispositivos IoT.