Liveness para Android

Empezando


Para proceder, es indispensable generar una clave API con un tiempo de expiración definido.

Este proceso puede completarse fácilmente mediante el panel de administrado. Esto garantiza un acceso seguro y gestionado a los recursos necesarios durante el tiempo estipulado.

Para más detalles, consulta la documentación específica de cada método disponible a través de los siguientes enlaces:

Guía Rápida para Usar Liveness

Paso 1: Capturar el Video

  • Abre la cámara del usuario y graba un video. Asegúrate de que el video cumpla con los siguientes criterios:

  • Duración: El video debe tener una duración mínima de 3 segundos y máxima de 8 segundos.

  • Visibilidad: El video debe mostrar claramente el rostro. Si no se detecta ningún rostro, el servicio devolverá un error.

  • Iluminación y Calidad: Asegura una buena iluminación y una captura de video de alta calidad. El rostro debe estar lo suficientemente cerca de la cámara para permitir una visibilidad y análisis claros.

Paso 2: Enviar el Video

  • Codifica el video en formato base64 y envíalo al endpoint /api/v1/liveness/verify-and-bestframe. Este proceso analizará el video y devolverá una foto de la persona (bestFrame) junto con una puntuación que indica el nivel de confianza de la detección de liveness. Para mas información sobre que es el formato Base64 ve a Base64.

Para más detalles visita la referencia de la API aquí.

Paso 3: Revisar los Resultados

  • Examina el bestFrame devuelto y la puntuación de liveness. Esta puntuación ayuda a determinar la probabilidad de que el video haya sido de una persona viva presente en el momento de la grabación en lugar de un video pregrabado o un intento de engaño.

Requisitos


  • Debes tener un video de un rostro que cumpla con los requisitos de duración, visibilidad, iluminación y calidad en Base64.
  • Asegúrate de que el video esté disponible en el dispositivo desde el cual se realizará la prueba.
    Necesitas una clave API válida de una empresa activa y configurarla como Bearer Token en el encabezado de tu solicitud. Para más información sobre el uso del Bearer Token consulta aquí.

Verify


POST basePath/api/v1/liveness/verify

Este endpoint realiza la validación de vida del video base64.

Descripción de la Solicitud

Petición

@POST("api/v1/liveness/verify")
suspend fun livenessVerify(@Header("Authorization") auth: String,
@Header("Request-Id") requestId: String, @Body request: LivenessVerifyRequest): Response<LivenessVerifyResponse>
data class LivenessVerifyRequest(
@SerializedName("video") val video: String, //base64
)

Agrega localización

Si deseas agregar localización a la ejecución del evento agrega las cabeceras Longitude y Latitude con los valores numericos de la ubicación de la cual se esta ejecutando tu petición.

@POST("api/v1/liveness/verify")
suspend fun livenessVerify(@Header("Authorization") auth: String,@Header("Latitude") latitude: String,
@Header("Longitude") longitude: String,@Header("Request-Id") requestId: String,
@Body request: LivenessVerifyRequest): Response<LivenessVerifyResponse>

Descripción de los parámetros

ParámetroDescripción
videoVideo codificado en Base64 .

Respuesta

{
  "eventId": "string",
  "requestId": "string",
  "processTime": "long",
  "score": "double",
  "state": {
  "isRealPerson": "boolean",
  "message": "string"
}
}
data class LivenessVerifyResponse(
@SerializedName("eventId") val eventId: String,
@SerializedName("requestId") val requestId: String,
@SerializedName("processTime") val processTime: Long,
@SerializedName("score") val score: Double,
@SerializedName("state") val state: LivenessState
)

data class LivenessState(
@SerializedName("isRealPerson") val isRealPerson: Boolean,
@SerializedName("message") val message: String
)

Parámetros de Respuesta

ParámetroDescripción
eventIdIdentificador único del evento de verificación de liveness.
processTimeTiempo en milisegundos que tomó procesar la solicitud de verificación.
requestIdIdentificador único de la solicitud de verificación enviada al servicio de Liveness.
scorePuntuación que indica el nivel de confianza en la detección de liveness. Un valor más alto indica mayor confianza.
Ejemplos de Solicitudes
{
  "video": "GkXfo59ChoEBQveBAULygQRC84EIQoKEd2Vib -- videoBase64"
}
{
  "eventId": "73e8babe-8d41-491a-8b88-a3719522f64f",
  "requestId": "73e8babe-8d41-491a-8b88-a3719522f64f",
  "processTime": 2588,
  "score": 0.73340136,
  "state": {
  "isRealPerson": true,
  "message": ""
}
}

Verify and best frame


POST basePath/api/v1/liveness/verify-and-bestframe

Este endpoint realiza la validación de vida del video base64 y obtiene el mejor fotograma del video para el análisis facial.

Descripción de la Solicitud

Petición

@POST("api/v1/liveness/verify-and-bestframe")
suspend fun livenessVerifyBestframe(@Header("Authorization") auth: String, @Header("Request-Id") requestId: String,
@Body request: LivenessVerifyBestframeRequest): Response<LivenessVerifyBestframeResponse>
data class LivenessVerifyBestframeRequest(
@SerializedName("video") val video: String, //base64
)

Agrega localización

Si deseas agregar localización a la ejecución del evento agrega las cabeceras Longitude y Latitude con los valores numericos de la ubicación de la cual se esta ejecutando tu petición.

@POST("api/v1/liveness/verify-and-bestframe")
suspend fun livenessVerifyBestframe(@Header("Authorization") auth: String,@Header("Latitude") latitude: String,
@Header("Longitude") longitude: String,@Header("Request-Id") requestId: String,
@Body request: LivenessVerifyBestframeRequest): Response<LivenessVerifyBestframeResponse>

Descripción de los parámetros

ParámetroDescripción
videoVideo codificado en Base64 .

Respuesta

{
  "eventId": "string",
  "requestId": "string",
  "processTime": "long",
  "score": "double",
  "bestFrame": "string", //base64
  "state": {
    "isRealPerson": "boolean",
    "message": "string",
  }
}
  data class LivenessVerifyResponse(
  @SerializedName("eventId") val eventId: String,
  @SerializedName("requestId") val requestId: String,
  @SerializedName("processTime") val processTime: Long,
  @SerializedName("score") val score: Double,
  @SerializedName("bestFrame") val bestFrame: String,  // base64 encoded string
  @SerializedName("state") val state: LivenessState
  )

  data class LivenessState(
  @SerializedName("isRealPerson") val isRealPerson: Boolean,
  @SerializedName("message") val message: String
  )

Parámetros de Respuesta

ParámetroDescripción
bestFrameMejor fotograma base64 capturado del video para análisis facial.
eventIdIdentificador único del evento de verificación de Liveness.
processTimeTiempo en milisegundos que tomó procesar la solicitud de verificación.
requestIdIdentificador único de la solicitud de verificación enviada al servicio de Liveness.
scorePuntuación que indica el nivel de confianza en la detección de liveness. Un valor más alto indica mayor confianza.
stateSe utiliza para verificar si el rostro capturado corresponde a una persona real durante el proceso de autenticación o verificación en tiempo real.
Ejemplos de Solicitudes
    {
      "video": "GkXfo59ChoEBQveBAULygQRC84EIQoKEd2Vib -- videoBase64"
    }
    {
      "eventId": "8707c205-1ea3-4481-b888-c472582b3e33",
      "requestId": "8707c205-1ea3-4481-b888-c472582b3e33",
      "processTime": 1717,
      "score": 0.9520403,
      "bestFrame": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgI="
    }