Tutorial: Detección de vivacidad en caras

La detección de la vivacidad de la cara puede usarse para determinar si una cara en un flujo de vídeo de entrada es real (en directo) o falsa (suplantación). Se trata de un bloque de creación crucial en un sistema de autenticación biométrica para evitar ataques de suplantación de identidad por parte de impostores que intentan obtener 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 viva físicamente presente en el momento de la autenticación. Estos sistemas se han vuelto 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 defiende con éxito contra varios tipos de falsificación que van desde impresiones en papel, máscaras 2D/3D y presentaciones falsas en teléfonos y ordenadores 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 con el paso del tiempo. Las mejoras continuas se implementarán 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.

Requisitos previos

  • 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. En una sección posterior de este mismo inicio rápido, pegará la clave y el punto de conexión en el código.
    • 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 móviles (IOS y Android). 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.

Realización de la detección de vivacidad

La integración de la solución de vivacidad implica dos componentes diferentes: una aplicación móvil y un servidor u orquestador de aplicaciones.

Integración de vivacidad en una aplicación móvil

Una vez que tenga acceso al SDK, siga las instrucciones del repositorio de GitHub azure-ai-vision-sdk para integrar la interfaz de usuario y el código en la aplicación móvil nativa. El SDK de vivacidad admite Java/Kotlin para Android y Swift para aplicaciones móviles de iOS:

Una vez que haya agregado el código a su aplicación, el SDK se encargará de iniciar la cámara, guiar al usuario final para que ajuste su posición, componer la carga útil de vivacidad y llamar al servicio en la nube Face de Azure AI para que procese la carga útil de vivacidad.

Orquestación de la solución de vivacidad

A continuación se ilustran los pasos de nivel general que intervienen en la orquestación de la vivacidad:

Diagram of the liveness workflow in Azure AI Face.

  1. La aplicación móvil inicia la comprobación de vivacidad y lo notifica al servidor de aplicaciones.

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

    Request:
    curl --location '<insert-api-endpoint>/face/v1.1-preview.1/detectliveness/singlemodal/sessions' \
    --header 'Ocp-Apim-Subscription-Key:<insert-api-key>
    --header 'Content-Type: application/json' \
    --data '{
      "livenessOperationMode": "passive",
      "deviceCorrelationId": "723d6d03-ef33-40a8-9682-23a1feb7bccd",
      "sendResultsToClient": "false"
    }'
     
    Response:
    {
        "sessionId": "a6e7193e-b638-42e9-903f-eaf60d2b40a5",
        "authToken": <session-authorization-token>
    }
    
  3. El servidor de aplicaciones devuelve el token de autorización de sesión a la aplicación móvil.

  4. La aplicación móvil proporciona el token de autorización de sesión durante la inicialización del SDK de Visión de Azure AI.

    mServiceOptions?.setTokenCredential(com.azure.android.core.credential.TokenCredential { _, callback ->
        callback.onSuccess(com.azure.android.core.credential.AccessToken("<INSERT_TOKEN_HERE>", org.threeten.bp.OffsetDateTime.MAX))
    })
    
    serviceOptions?.authorizationToken = "<INSERT_TOKEN_HERE>"
    
  5. A continuación, el SDK inicia la cámara, guía al usuario para que se posicione correctamente y después prepara la carga útil para llamar al punto de conexión del servicio de detección de vivacidad.

  6. 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 responda, el SDK notificará a la aplicación móvil que se ha completado la comprobación de vivacidad.

  7. La aplicación móvil retransmite la finalización de la comprobación de vivacidad al servidor de aplicaciones.

  8. El servidor de aplicaciones ahora puede consultar el resultado de la detección de vivacidad del servicio Face de Visión de Azure AI.

    Request:
    curl --location '<insert-api-endpoint>/face/v1.1-preview.1/detectliveness/singlemodal/sessions/a3dc62a3-49d5-45a1-886c-36e7df97499a' \
    --header 'Ocp-Apim-Subscription-Key: <insert-api-key>
    
    Response:
    {
        "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": "video.webp",
                        "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
    }
    
    

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:

  1. Seleccione una buena imagen de referencia.
  2. Configure la orquestación de la vivacidad con verificación.

Diagram of the liveness-with-verify workflow of Azure AI Face.

Selección de una buena 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:

  1. Proporcione 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.

      Request:
      curl --location '<insert-api-endpoint>/face/v1.1-preview.1/detectlivenesswithverify/singlemodal/sessions' \
      --header 'Ocp-Apim-Subscription-Key: <api_key>' \
      --form 'Parameters="{
        \"livenessOperationMode\": \"passive\",
        \"deviceCorrelationId\": \"723d6d03-ef33-40a8-9682-23a1feb7bccd\"
      }"' \
      --form 'VerifyImage=@"test.png"'
      
      Response:
      {
          "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 móvil proporciona la imagen de referencia al inicializar el SDK.

      val singleFaceImageSource = VisionSource.fromFile("/path/to/image.jpg")
      mFaceAnalysisOptions?.setRecognitionMode(RecognitionMode.valueOfVerifyingMatchToFaceInSingleFaceImage(singleFaceImageSource))
      
      if let path = Bundle.main.path(forResource: "<IMAGE_RESOURCE_NAME>", ofType: "<IMAGE_RESOURCE_TYPE>"),
         let image = UIImage(contentsOfFile: path),
         let singleFaceImageSource = try? VisionSource(uiImage: image) {
          try methodOptions.setRecognitionMode(.verifyMatchToFaceIn(singleFaceImage: singleFaceImageSource))
      }
      
  2. El servidor de aplicaciones ahora puede consultar el resultado de la verificación además del resultado de vivacidad.

    Request:
    curl --location '<insert-api-endpoint>/face/v1.1-preview.1/detectlivenesswithverify/singlemodal/sessions/3847ffd3-4657-4e6c-870c-8e20de52f567' \
    --header 'Content-Type: multipart/form-data' \
    --header 'apim-recognition-model-preview-1904: true' \
    --header 'Authorization: Bearer.<session-authorization-token> \
    --form 'Content=@"video.webp"' \
    --form 'Metadata="<insert-metadata>"
    
    Response:
    {
        "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": "video.webp",
                        "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
    }
    

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.

Pasos siguientes

Consulte la referencia del SDK de Azure AI Vision para obtener información acerca de otras opciones en las API de ejecución.

Consulte la referencia de la API REST de sesión para obtener más información sobre las características disponibles para orquestar la solución de ejecución.