La API de FaceID está diseñada para establecer una infraestructura de backend para la autenticación del usuario a través del reconocimiento facial. Esta API funciona al recibir un vector de representación facial (FRV) de un cliente remoto, y luego verificar si esto proporcionó FRV corresponde a uno existente almacenado en la base de datos. Según esta verificación, el acceso se otorga o se niega al cliente.
Se puede acceder a la API de FaceID a cualquier cliente capaz de enviar una solicitud HTTP. Desarrollado con Golang y siguiendo la arquitectura REST, la API ofrece flexibilidad en términos de implementación del cliente. Los clientes se pueden desarrollar en cualquier lenguaje de programación y pueden originarse en varias plataformas, como la web, el móvil o el escritorio. Esta capacidad de integración perfecta permite la incorporación de la funcionalidad de reconocimiento facial en una amplia gama de aplicaciones. En particular, el proceso de obtención del FRV del cliente cae fuera del alcance de las responsabilidades de la API de FaceID.
La documentación de API está disponible en http://faceid.orressoft.site/reference
Nota: Puede usar los vectores ubicados en File vectors.json en el directorio raíz de este proyecto para probar la API. Estos vectores ya están almacenados en la base de datos.
El reconocimiento facial es una tecnología que implica identificar y verificar a las personas analizando y comparando sus características faciales. Es un subconjunto de identificación biométrica, y tiene varias aplicaciones, incluidos los sistemas de seguridad, la autenticación y el control de acceso al usuario. Aquí hay una visión general simplificada de cómo funciona el reconocimiento facial:
Detección de la cara: el primer paso es localizar y extraer caras de una imagen o marco de video. Esto se realiza utilizando algoritmos de detección de cara, que identifican regiones de cara potencial en los datos de entrada.
Alineación de la cara: una vez que se detecta una cara, el algoritmo puede realizar una alineación facial, asegurando que la cara esté en una posición estandarizada. Esto ayuda a normalizar las características para una comparación precisa.
Extracción de características: este es un paso crucial donde se extraen características distintivas de la cara y se convierten en una representación numérica. Estas características pueden incluir las distancias entre los puntos de referencia faciales clave, los ángulos entre ciertos puntos y otros datos que pueden diferenciar una cara de otra. Las técnicas populares para la extracción de características incluyen patrones binarios locales (LBP), histograma de gradientes orientados (HOG) y más recientemente, métodos basados en el aprendizaje profundo.
Codificación de características: las características extraídas se convierten en una representación compacta que se puede comparar fácilmente con otras representaciones faciales. Esto a menudo implica reducir la dimensionalidad de las características al tiempo que preserva su información discriminatoria.
Base de datos facial: en su escenario, tendría una base de datos que contiene las representaciones faciales (o incrustaciones) de los usuarios autorizados. Esta base de datos podría crearse coleccionando y procesando un conjunto de imágenes de cada usuario durante la inscripción.
Matricidad de la cara: cuando un usuario intenta obtener acceso, su cara enviada se procesa a través de la misma tubería: detección, alineación, extracción de características y codificación. La representación facial resultante se compara con las representaciones en la base de datos de su cara utilizando una métrica de distancia como la distancia euclidiana o la similitud de coseno. La idea es encontrar el partido más cercano.
Umbral: la comparación produce una puntuación de similitud. Establecería un valor umbral por encima del cual la cara enviada se considera una coincidencia con una cara en la base de datos. El umbral ayuda a equilibrar falsos positivos y falsos negativos.
Toma de decisiones: según el puntaje de similitud y el umbral, se toma una decisión de otorgar acceso o no. Si el puntaje está por encima del umbral y dentro de un rango aceptable, se otorga acceso. De lo contrario, se niega el acceso.
Aprendizaje continuo: para mejorar la precisión del reconocimiento con el tiempo, algunos sistemas implementan el aprendizaje continuo. Esto implica actualizar periódicamente las representaciones faciales en la base de datos utilizando nuevas imágenes de usuarios. Esto puede ayudar a explicar cambios en la apariencia debido a factores como el envejecimiento o el vello facial.
El FRV es un vector que representa la cara de una persona. Es una representación numérica de la cara, y se usa para comparar caras. El FRV es generado por un algoritmo de reconocimiento facial implementado por una biblioteca utilizada en el lado del cliente. El lado del cliente puede ser cualquier plataforma (web, móvil, escritorio, etc.). Echemos un vistazo a la estructura de FRV:
[
0.123, -0.456, 0.789, 0.234, 0.567, 0.123, 0.678, -0.345,
-0.987, 0.876, -0.123, -0.456, 0.789, -0.234, -0.567, 0.123,
0.678, 0.345, -0.987, -0.876, 0.123, 0.456, -0.789, 0.234,
0.567, -0.123, 0.678, 0.345, 0.987, -0.876, -0.123, 0.456,
-0.789, 0.234, -0.567, -0.123, -0.678, 0.345, 0.987, 0.876,
0.123, -0.456, 0.789, -0.234, 0.567, -0.123, -0.678, -0.345,
0.987, -0.876, 0.123, 0.456, -0.789, -0.234, -0.567, -0.123,
0.678, -0.345, -0.987, 0.876, -0.123, -0.456, 0.789, -0.234,
-0.567, 0.123, 0.678, 0.345, -0.987, -0.876, 0.123, 0.456,
-0.789, 0.234, -0.567, -0.123, -0.678, 0.345, 0.987, 0.876,
0.123, -0.456, 0.789, -0.234, 0.567, -0.123, -0.678, -0.345,
0.987, -0.876, 0.123, 0.456, -0.789, -0.234, -0.567, -0.123,
0.678, -0.345, -0.987, 0.876, -0.123, -0.456, 0.789, -0.234,
0.123, -0.456, 0.789, -0.234, 0.567, -0.123, -0.678, -0.345,
0.987, -0.876, 0.123, 0.456, -0.789, -0.234, -0.567, -0.123,
0.678, -0.345, -0.987, 0.876, -0.123, -0.456, 0.789, -0.234
]
Arriba tenemos un FRV de 128 dimensiones (vector de representación facial) de una representación numérica de la cara de alguien. Diferentes bibliotecas pueden generar diferentes FRV de dimensiones, que pueden ser 256, 512 o incluso más dimensiones de largo. Podemos pensar este FRV como un sello Numérico UNIC de la cara de alguien. Como nadie tiene la misma cara, nadie tiene el mismo FRV. Por lo tanto, se puede usar un FRV para identificar a alguien en una base de datos de FRV.
Esta API de FaceID utiliza un FRV enviado por el cliente para identificar si el FRV dado coincide con cualquier FRV en la base de datos. Si el FRV dado coincide con cualquier FRV en la base de datos, la API otorga acceso al cliente. De lo contrario, la API niega el acceso al cliente.
Una base de datos vectorial es algo nuevo en el mundo de las bases de datos, y su uso está creciendo rápidamente. En nuestro caso, estamos utilizando Qdrant (https://qdrant.tech), una base de datos vectorial que es de código abierto y de forma gratuita. Recuerde que los vectores de representación facial son básicamente una variedad de números de flotación que pueden ser de gran tamaño. En esta API FaceID estamos usando un FRV de 128 dimensiones, pero puede ser 256, 512 o incluso más dimensiones de largo. Por lo tanto, necesitamos una base de datos que pueda almacenar esta gran cantidad de datos y que pueda realizar búsquedas rápidas en él.
Las bases de datos tradicionales de SQL y NoSQL se pueden usar para almacenar FRV, pero no están optimizadas para este tipo de datos. Las bases de datos vectoriales están optimizadas para almacenar y buscar vectores. También están optimizados para búsquedas rápidas y pueden realizar búsquedas en millones de vectores en unos pocos milisegundos. Esto significa que se puede identificar una cara en unos pocos milisegundos, lo cual es excelente para aplicaciones en tiempo real.
Este proyecto es una implementación simple de una API de reconocimiento facial. Es una API simple que se puede usar para integrar el reconocimiento facial en cualquier aplicación. La API está escrita en Golang y usa la arquitectura REST. El cliente se puede escribir en cualquier idioma y puede provenir de cualquier plataforma (web, móvil, escritorio, etc.). Si desea implementar el reconocimiento facial en su aplicación, puede usar la API FaceID como punto de partida. Por favor, no dude en ponerse en contacto conmigo en [email protected] si tiene alguna pregunta o sugerencia. ¡Gracias!