Tutorial: Detección de vivacidad en caras
La detección de Face Liveness se usa para determinar si una cara de una secuencia de vídeo de entrada es real (en directo) o falsa (suplantada). Es un bloque de creación importante en un sistema de autenticación biométrica para evitar que los impostores obtengan acceso al sistema mediante una fotografía, vídeo, máscara u otros medios para suplantar a otra persona.
El objetivo de la detección de la vivacidad es asegurarse de que el sistema esté interactuando con una persona en directo físicamente presente en el momento de la autenticación. Estos sistemas son cada vez más importantes con el aumento de las finanzas digitales, el control de acceso remoto y los procesos de verificación de identidad en línea.
La solución de detección de vivacidad de Azure AI Face defiende con éxito contra varios tipos de falsificaciones, desde impresiones en papel, máscaras 2D/3D y presentaciones falsas en teléfonos y portátiles. La detección de la vivacidad es un área de investigación activa, en la que se realizan mejoras continuas para contrarrestar los ataques de suplantación de identidad cada vez más sofisticados. Las mejoras continuas se implementan en el cliente y los componentes de servicio a lo largo del tiempo, ya que la solución general se vuelve más sólida para los nuevos tipos de ataques.
Importante
Los SDK de cliente de Face para la vivacidad son una característica cerrada. Debe solicitar el acceso a la característica de vivacidad rellenando el formulario de acceso de reconocimiento facial. Cuando su suscripción a Azure tenga acceso, podrá descargar el SDK de vivacidad de Face.
Introducción
La integración de la solución de vivacidad implica dos componentes distintos: una aplicación móvil o web de frontend y un servidor de aplicaciones o orquestador.
- Aplicación Frontend: la aplicación de frontend recibe autorización del servidor de aplicaciones para iniciar la detección de vivacidad. Su objetivo principal es activar la cámara y guiar a los usuarios finales con precisión a través del proceso de detección de vivacidad.
- Servidor de aplicaciones: el servidor de aplicaciones actúa como servidor backend para crear sesiones de detección de vivacidad y obtener un token de autorización del servicio Face para una sesión determinada. Este token autoriza a la aplicación de frontend a realizar la detección de ejecución. Los objetivos del servidor de aplicaciones son administrar las sesiones, conceder autorización para la aplicación de frontend y ver los resultados del proceso de detección de ejecución.
Además, combinamos la verificación facial con la detección de vida para comprobar si la persona es la persona específica que ha designado. En la tabla siguiente se describen los detalles de las características de detección de vivacidad:
Característica | Descripción |
---|---|
Detección de vivacidad | Determine que una entrada es real o falsa, y solo el servidor de aplicaciones tiene la autoridad para iniciar la comprobación de ejecución y consultar el resultado. |
Detección de vivacidad con comprobación facial | Determine que una entrada es real o falsa y comprueba la identidad de la persona en función de una imagen de referencia proporcionada. El servidor de aplicaciones o la aplicación de frontend pueden proporcionar una imagen de referencia. Solo el servidor de aplicaciones tiene la autoridad para inicializar la comprobación de vida y consultar el resultado. |
En este tutorial se muestra cómo operar una aplicación de frontend y un servidor de aplicaciones para realizar laDetección de vivacidad y Detección de vivacidad con la verificación facial en varios SDK de lenguaje.
Requisitos previos
- Una suscripción a Azure: cree una cuenta gratuita
- La cuenta de Azure debe tener asignado un rol de colaborador de Cognitive Services a fin de que pueda aceptar los términos de IA responsable y crear un recurso. Para asignar este rol a su cuenta, siga los pasos descritos en la documentación Asignación de roles o póngase en contacto con el administrador.
- Una vez que tenga la suscripción de Azure, cree un recurso de Face en Azure Portal para obtener la clave y el punto de conexión. Tras su implementación, seleccione Ir al recurso.
- Necesita la clave y el punto de conexión del recurso que cree para conectar la aplicación al servicio Face.
- Puede usar el plan de tarifa gratis (
F0
) para probar el servicio y actualizarlo más adelante a un plan de pago para producción.
- Acceso al SDK de cliente de Face de Visión de Azure AI para dispositivos móviles (IOS y Android) y web. Para empezar, debe solicitar las Características de acceso limitado al reconocimiento facial para obtener acceso al SDK. Para más información, consulte la página de Acceso limitado a Face.
Configuración de aplicaciones de front-end y servidores de aplicaciones para realizar la detección de ejecución
Proporcionamos SDK en diferentes lenguajes para aplicaciones front-end y servidores de aplicaciones. Consulte las instrucciones siguientes para configurar las aplicaciones front-end y los servidores de aplicaciones.
Descarga del SDK para la aplicación de front-end
Una vez que tenga acceso al SDK, siga las instrucciones del repositorio azure-ai-vision-sdk GitHub para integrar la interfaz de usuario y el código en la aplicación móvil nativa. El SDK de liveness admite Java/Kotlin para aplicaciones móviles Android, Swift para aplicaciones móviles de iOS y JavaScript para aplicaciones web:
- Para Swift iOS, siga las instrucciones del ejemplo de iOS
- Para Kotlin/Java Android, siga las instrucciones del ejemplo de Android
- Para JavaScript web, siga las instrucciones del ejemplo web
Una vez que haya agregado el código a la aplicación, el SDK controla el inicio de la cámara, lo que guía al usuario final para ajustar su posición, componer la carga útil de ejecución y llamar al servicio en la nube de Azure AI Face para procesar la carga útil de ejecución.
Descarga de la biblioteca cliente de Azure AI Face para el servidor de aplicaciones
El servidor o orquestador de aplicaciones es responsable de controlar el ciclo de vida de una sesión de ejecución. El servidor de aplicaciones tiene que crear una sesión antes de realizar la detección de ejecución y, a continuación, puede consultar el resultado y eliminar la sesión cuando finalice la comprobación de ejecución. Ofrecemos una biblioteca en varios idiomas para implementar fácilmente el servidor de aplicaciones. Siga estos pasos para instalar el paquete que desea:
- Para C#, siga las instrucciones del archivo dotnet readme.
- Para Java, siga las instrucciones del archivo Léame de Java
- Para Python, siga las instrucciones del archivo Léame de Python.
- Para JavaScript, siga las instrucciones del archivo Léame de JavaScript
Creación de variables de entorno
En este ejemplo, escriba las credenciales en variables de entorno del equipo local que ejecuta la aplicación.
Vaya a Azure Portal. Si el recurso que ha creado en la sección Requisitos previos se ha implementado correctamente, seleccione Ir al recurso en Pasos siguientes. Puede encontrar su clave y punto de conexión en Administración de recursos dentro de la página Claves y puntos de conexión. La clave de recurso no es la misma que el id. de suscripción de Azure.
Para establecer la variable de entorno para la clave y el punto de conexión, abra una ventana de consola y siga las instrucciones correspondientes a su sistema operativo y su entorno de desarrollo.
- Para establecer la variable de entorno
FACE_APIKEY
, reemplace<your_key>
por una de las claves del recurso. - Para establecer la variable de entorno
FACE_ENDPOINT
, reemplace<your_endpoint>
por el punto de conexión del recurso.
Importante
Si usa una clave de API, almacénela de forma segura en otro lugar, como en Azure Key Vault. No incluya la clave de API directamente en el código ni la exponga nunca públicamente.
Para más información acerca de la seguridad de los servicios de AI, consulte Autenticación de solicitudes a los servicios de Azure AI.
setx FACE_APIKEY <your_key>
setx FACE_ENDPOINT <your_endpoint>
Después de agregar las variables de entorno, puede que tenga que reiniciar todos los programas en ejecución que leerán la variable de entorno, incluida la ventana de consola.
Realización de la detección de vivacidad
A continuación se ilustran los pasos de nivel general que intervienen en la orquestación de la vivacidad:
La aplicación frontend inicia la comprobación de liveness y lo notifica al servidor de aplicaciones.
El servidor de la aplicación crea una nueva sesión de vivacidad con el servicio Face de Azure AI. El servicio crea una sesión de vivacidad y responde con un token de autorización de sesión. Para más información sobre cada uno de los parámetros de solicitud que intervienen en la creación de una sesión liveness, consulte Operación de creación de sesión liveness.
var endpoint = new Uri(System.Environment.GetEnvironmentVariable("FACE_ENDPOINT")); var credential = new AzureKeyCredential(System.Environment.GetEnvironmentVariable("FACE_APIKEY")); var sessionClient = new FaceSessionClient(endpoint, credential); var createContent = new CreateLivenessSessionContent(LivenessOperationMode.Passive) { DeviceCorrelationId = "723d6d03-ef33-40a8-9682-23a1feb7bccd", SendResultsToClient = false, }; var createResponse = await sessionClient.CreateLivenessSessionAsync(createContent); var sessionId = createResponse.Value.SessionId; Console.WriteLine($"Session created."); Console.WriteLine($"Session id: {sessionId}"); Console.WriteLine($"Auth token: {createResponse.Value.AuthToken}");
Ejemplo del cuerpo de la respuesta:
{ "sessionId": "a6e7193e-b638-42e9-903f-eaf60d2b40a5", "authToken": "<session-authorization-token>" }
El servidor de aplicaciones devuelve el token de autorización de sesión a la aplicación frontend.
La aplicación frontend proporciona el token de autorización de sesión durante la inicialización del SDK de Visión de Azure AI.
A continuación, el SDK inicia la cámara, guía al usuario para que se coloque correctamente y, a continuación, prepara la carga útil para llamar al punto de conexión del servicio de detección de vida.
El SDK llama al servicio Face de Visión de Azure AI para realizar la detección de la vivacidad. Una vez que el servicio responde, el SDK notifica a la aplicación de front-end que se ha completado la comprobación de ejecución.
La aplicación frontend transmite la finalización de la comprobación de actividad al servidor de aplicaciones.
El servidor de aplicaciones ahora puede consultar el resultado de la detección de vivacidad del servicio Face de Visión de Azure AI.
var getResultResponse = await sessionClient.GetLivenessSessionResultAsync(sessionId); var sessionResult = getResultResponse.Value; Console.WriteLine($"Session id: {sessionResult.Id}"); Console.WriteLine($"Session status: {sessionResult.Status}"); Console.WriteLine($"Liveness detection request id: {sessionResult.Result?.RequestId}"); Console.WriteLine($"Liveness detection received datetime: {sessionResult.Result?.ReceivedDateTime}"); Console.WriteLine($"Liveness detection decision: {sessionResult.Result?.Response.Body.LivenessDecision}"); Console.WriteLine($"Session created datetime: {sessionResult.CreatedDateTime}"); Console.WriteLine($"Auth token TTL (seconds): {sessionResult.AuthTokenTimeToLiveInSeconds}"); Console.WriteLine($"Session expired: {sessionResult.SessionExpired}"); Console.WriteLine($"Device correlation id: {sessionResult.DeviceCorrelationId}");
Ejemplo del cuerpo de la respuesta:
{ "status": "ResultAvailable", "result": { "id": 1, "sessionId": "a3dc62a3-49d5-45a1-886c-36e7df97499a", "requestId": "cb2b47dc-b2dd-49e8-bdf9-9b854c7ba843", "receivedDateTime": "2023-10-31T16:50:15.6311565+00:00", "request": { "url": "/face/v1.1-preview.1/detectliveness/singlemodal", "method": "POST", "contentLength": 352568, "contentType": "multipart/form-data; boundary=--------------------------482763481579020783621915", "userAgent": "" }, "response": { "body": { "livenessDecision": "realface", "target": { "faceRectangle": { "top": 59, "left": 121, "width": 409, "height": 395 }, "fileName": "content.bin", "timeOffsetWithinFile": 0, "imageType": "Color" }, "modelVersionUsed": "2022-10-15-preview.04" }, "statusCode": 200, "latencyInMilliseconds": 1098 }, "digest": "537F5CFCD8D0A7C7C909C1E0F0906BF27375C8E1B5B58A6914991C101E0B6BFC" }, "id": "a3dc62a3-49d5-45a1-886c-36e7df97499a", "createdDateTime": "2023-10-31T16:49:33.6534925+00:00", "authTokenTimeToLiveInSeconds": 600, "deviceCorrelationId": "723d6d03-ef33-40a8-9682-23a1feb7bccd", "sessionExpired": false }
El servidor de aplicaciones puede eliminar la sesión si ya no consulta su resultado.
await sessionClient.DeleteLivenessSessionAsync(sessionId); Console.WriteLine($"The session {sessionId} is deleted.");
Realización de la detección de vivacidad con verificación facial
La combinación de la verificación facial con detección de vivacidad permite la verificación biométrica de una persona determinada de interés con una garantía agregada de que la persona está físicamente presente en el sistema. Hay dos partes para integrar la vivacidad con la comprobación:
- Seleccione una buena imagen de referencia.
- Configure la orquestación de la vivacidad con verificación.
Seleccione una imagen de referencia
Utilice las siguientes sugerencias para asegurarse de que las imágenes de entrada proporcionan los resultados de reconocimiento más precisos.
Requisitos técnicos
- Los formatos de imagen de entrada admitidos son JPEG, PNG, GIF(el primer fotograma) y BMP.
- El tamaño del archivo de imagen no debe ser superior a 6 MB.
- Puede utilizar el atributo
qualityForRecognition
en la operación de detección de caras al usar los modelos de detección aplicables como guía general de si es probable que la imagen tenga una calidad suficiente para intentar el reconocimiento facial. Solo se recomiendan imágenes de calidad"high"
para la inscripción de personas, y de una calidad"medium"
o superior en escenarios de identificación.
Requisitos de composición
- La foto es clara y nítida, no está borrosa, pixelada, distorsionada o dañada.
- La foto no está alterada para eliminar las manchas de la cara o el aspecto de la cara.
- La foto debe tener un formato de color RGB compatible (JPEG, PNG, WEBP, BMP). El tamaño de cara recomendado es de 200 píxeles x 200 píxeles. Los tamaños de cara mayores de 200 píxeles x 200 píxeles no darán lugar a una mejor calidad de IA y no podrán superar los 6 MB de tamaño.
- El usuario no lleva gafas, máscaras, sombreros, auriculares ni coberturas para la cabeza o la cara. La cara debe estar libre de obstrucciones.
- Se permite la joyería facial siempre que no oculte la cara.
- Solo debe estar visible una cara en la foto.
- La cara debe estar en posición frontal neutra con ambos ojos abiertos, boca cerrada, sin expresiones faciales extremas o inclinación de la cabeza.
- La cara debe estar libre de sombras u ojos rojos. Vuelva a tomar la foto si se produce cualquiera de estos casos.
- El fondo debe ser uniforme y sin sombras.
- La cara debe centrarse dentro de la imagen y rellenar al menos el 50 % de la imagen.
Configure la orquestación de la vivacidad con verificación.
A continuación se muestran los pasos de nivel general implicados en la orquestación de la vivacidad con verificación:
Proporcionar la imagen de referencia de verificación mediante cualquiera de los dos métodos siguientes:
El servidor de aplicaciones proporciona la imagen de referencia al crear la sesión de vivacidad. Para más información sobre cada uno de los parámetros de solicitud que intervienen en la creación de una sesión de liveness con verificación, consulte Operación de creación de sesión de Liveness con verificación.
var endpoint = new Uri(System.Environment.GetEnvironmentVariable("FACE_ENDPOINT")); var credential = new AzureKeyCredential(System.Environment.GetEnvironmentVariable("FACE_APIKEY")); var sessionClient = new FaceSessionClient(endpoint, credential); var createContent = new CreateLivenessWithVerifySessionContent(LivenessOperationMode.Passive) { DeviceCorrelationId = "723d6d03-ef33-40a8-9682-23a1feb7bccd" }; using var fileStream = new FileStream("test.png", FileMode.Open, FileAccess.Read); var createResponse = await sessionClient.CreateLivenessWithVerifySessionAsync(createContent, fileStream); var sessionId = createResponse.Value.SessionId; Console.WriteLine("Session created."); Console.WriteLine($"Session id: {sessionId}"); Console.WriteLine($"Auth token: {createResponse.Value.AuthToken}"); Console.WriteLine("The reference image:"); Console.WriteLine($" Face rectangle: {createResponse.Value.VerifyImage.FaceRectangle.Top}, {createResponse.Value.VerifyImage.FaceRectangle.Left}, {createResponse.Value.VerifyImage.FaceRectangle.Width}, {createResponse.Value.VerifyImage.FaceRectangle.Height}"); Console.WriteLine($" The quality for recognition: {createResponse.Value.VerifyImage.QualityForRecognition}");
Ejemplo del cuerpo de la respuesta:
{ "verifyImage": { "faceRectangle": { "top": 506, "left": 51, "width": 680, "height": 475 }, "qualityForRecognition": "high" }, "sessionId": "3847ffd3-4657-4e6c-870c-8e20de52f567", "authToken": "<session-authorization-token>" }
La aplicación de frontend proporciona la imagen de referencia al inicializar el SDK. Este escenario no se admite en la solución web.
El servidor de aplicaciones ahora puede consultar el resultado de la verificación además del resultado de vivacidad.
var getResultResponse = await sessionClient.GetLivenessWithVerifySessionResultAsync(sessionId); var sessionResult = getResultResponse.Value; Console.WriteLine($"Session id: {sessionResult.Id}"); Console.WriteLine($"Session status: {sessionResult.Status}"); Console.WriteLine($"Liveness detection request id: {sessionResult.Result?.RequestId}"); Console.WriteLine($"Liveness detection received datetime: {sessionResult.Result?.ReceivedDateTime}"); Console.WriteLine($"Liveness detection decision: {sessionResult.Result?.Response.Body.LivenessDecision}"); Console.WriteLine($"Verification result: {sessionResult.Result?.Response.Body.VerifyResult.IsIdentical}"); Console.WriteLine($"Verification confidence: {sessionResult.Result?.Response.Body.VerifyResult.MatchConfidence}"); Console.WriteLine($"Session created datetime: {sessionResult.CreatedDateTime}"); Console.WriteLine($"Auth token TTL (seconds): {sessionResult.AuthTokenTimeToLiveInSeconds}"); Console.WriteLine($"Session expired: {sessionResult.SessionExpired}"); Console.WriteLine($"Device correlation id: {sessionResult.DeviceCorrelationId}");
Ejemplo del cuerpo de la respuesta:
{ "status": "ResultAvailable", "result": { "id": 1, "sessionId": "3847ffd3-4657-4e6c-870c-8e20de52f567", "requestId": "f71b855f-5bba-48f3-a441-5dbce35df291", "receivedDateTime": "2023-10-31T17:03:51.5859307+00:00", "request": { "url": "/face/v1.1-preview.1/detectlivenesswithverify/singlemodal", "method": "POST", "contentLength": 352568, "contentType": "multipart/form-data; boundary=--------------------------590588908656854647226496", "userAgent": "" }, "response": { "body": { "livenessDecision": "realface", "target": { "faceRectangle": { "top": 59, "left": 121, "width": 409, "height": 395 }, "fileName": "content.bin", "timeOffsetWithinFile": 0, "imageType": "Color" }, "modelVersionUsed": "2022-10-15-preview.04", "verifyResult": { "matchConfidence": 0.9304124, "isIdentical": true } }, "statusCode": 200, "latencyInMilliseconds": 1306 }, "digest": "2B39F2E0EFDFDBFB9B079908498A583545EBED38D8ACA800FF0B8E770799F3BF" }, "id": "3847ffd3-4657-4e6c-870c-8e20de52f567", "createdDateTime": "2023-10-31T16:58:19.8942961+00:00", "authTokenTimeToLiveInSeconds": 600, "deviceCorrelationId": "723d6d03-ef33-40a8-9682-23a1feb7bccd", "sessionExpired": true }
El servidor de aplicaciones puede eliminar la sesión si ya no consulta su resultado.
await sessionClient.DeleteLivenessWithVerifySessionAsync(sessionId); Console.WriteLine($"The session {sessionId} is deleted.");
Limpieza de recursos
Si quiere limpiar y eliminar una suscripción de servicios de Azure AI, puede eliminar el recurso o el grupo de recursos. Al eliminar el grupo de recursos, también se elimina cualquier otro recurso que esté asociado a él.
Contenido relacionado
Para más información sobre otras opciones en las API de vivacidad, consulte la referencia del SDK de Azure AI Vision.
Para más información acerca de las características disponibles para orquestar la solución de ejecución, consulte la referencia de la API de REST de sesión.