# BioDoc Liveness
# Liveness 1.0
# Como aplicar
Para aplicar o Liveness 1.0, basta ativar o parâmetro correspondente no menu "Empresas" da empresa ou do local de captura desejado. Nenhuma configuração adicional é necessária para ativação.
# Como funciona
O Liveness 1.0 realiza uma série de verificações automáticas para garantir que a imagem capturada seja de uma pessoa real e que o processo de captura foi realizado de forma adequada. Veja abaixo o fluxo detalhado:
Validação Inicial Após receber o JSON da imagem em formato Base64, o sistema faz uma verificação inicial para garantir que não haja erros, como:
- Ausência de dados obrigatórios;
- Inserção incorreta de Base64;
- Problemas na requisição.
Pré-Análise (Opcional) Por padrão, o sistema realiza uma pré-análise da imagem. Se essa opção estiver ativada, o sistema gera:
- Uma imagem sem fundo (background removido);
- Uma imagem com os rostos detectados.
Verificação de Rostos A primeira análise busca confirmar a presença de rostos na imagem. Se nenhum rosto for detectado, o sistema retornará um erro, informando a ausência de faces.
Verificação dos Olhos A segunda análise avalia se os olhos do usuário estão visíveis ou bloqueados de alguma forma.
Detecção de Foto de Foto O sistema verifica se um celular está presente na captura. Se for detectado o uso de um celular na foto (tentativa de "foto de foto"), um erro é retornado.
Verificação de Iluminação A imagem é analisada quanto à quantidade de iluminação, comparando com um limite mínimo pré-definido com base em testes. Se a iluminação for insuficiente, o sistema retornará um erro.
Verificação de Distância O sistema calcula a distância do usuário até a câmera, levando em consideração as dimensões da imagem. Diferentes tipos de câmeras (como de celular) possuem distâncias focais distintas, por isso um limite é ajustado conforme o tipo de dispositivo detectado.
Verificação de Liveness Por fim, o sistema realiza a verificação de liveness. A imagem é processada por um modelo de machine learning treinado para detectar se a face capturada é real ou uma tentativa de fraude.
- Se a verificação for bem-sucedida, o sistema retorna um JSON com o resultado "real" e a pontuação de confiança (0 a 100).
- Caso contrário, o sistema retornará a mensagem "FACE VIVA NÃO DETECTADA. Por favor, centralize o rosto na câmera", junto com a pontuação de confiança do modelo.
Se o parâmetro de pré-análise estiver desativado, as cinco etapas anteriores são ignoradas, e o sistema faz apenas a análise de liveness diretamente.
# Como ele trabalha
O Liveness 1.0 funciona recebendo uma imagem em formato Base64 via JSON. A imagem passa por várias etapas de verificação, que incluem desde a análise da presença de rostos até a validação de condições de iluminação e distância. O ponto final é a verificação de liveness, que utiliza um modelo treinado para confirmar se a face capturada pertence a uma pessoa viva.
Este processo garante que a imagem capturada esteja livre de fraudes, como o uso de fotos ou vídeos falsos, e que o usuário está fisicamente presente no momento da verificação.
# Liveness 2.0
O BioDoc Liveness 2.0 oferece uma verificação facial avançada, confirmando que o usuário está presente fisicamente em frente à câmera e prevenindo tentativas de fraude, como o uso de fotos ou vídeos falsos. Essa solução realiza uma análise em tempo real por meio de um vídeo selfie e fornece uma pontuação de confiança (de 0 a 100), além de gerar uma imagem de referência para comparações faciais futuras.
# Especificações mínimas recomendadas
# Dispositivos
- O dispositivo deve ter uma câmera frontal.
- Taxa de atualização mínima da tela do dispositivo: 60 Hz.
- Tamanho mínimo da tela: 4 polegadas.
- O dispositivo não deve estar com jailbreak ou root.
# Especificações da câmera
- Câmera colorida: a câmera frontal deve ser capaz de gravar em cores.
- Não é permitido o uso de câmera virtual ou software de câmera.
- Capacidade mínima de gravação: 15 quadros por segundo.
- Resolução mínima de gravação de vídeo: 320x240px.
- Ao usar uma webcam em um desktop para a verificação do Liveness 2.0, é importante montar a webcam no topo da mesma tela onde o processo de verificação será iniciado.
# Integrando Liveness 2.0
Quando a resposta do endpoint /card/integration/mainimage tiver com os seguintes dados:
{
"livenessActive": true,
"livenessVersion": "2.0"
}
Você deve seguir os seguintes passos:
# 1. Integração via URL (web)
- Importar a URL
[link do ambiente]/#/integration/liveness
dentro de um iframe na aplicação.
Sandbox
https://web.sandbox.biodoc.com.br/#/integration/liveness?
Produção
https://web.biodoc.com.br/#/integration/liveness?
# Parâmetros de querystring para URL Padrão
Os parâmetros necessários deverão ser enviados através de querystring junto a URL de Integração.
Parâmetro | Descrição | Formato |
---|---|---|
token | Token de integração da empresa que está realizando o atendimento. | string |
card | Número do cartão do beneficiário. | string |
name | Nome do beneficiário. | string |
autoStart | Define se a verificação liveness irá iniciar automáticamente ou se será necessário ativá-lo manualmente com o botão "realizar captura" | boolean |
url | URL de retorno da resposta do BioDoc para seu sistema autorizador. Você pode incluir parâmetros necessários para identificação do atendimento no retorno da API. Exemplo: "https://autorizador/123456", onde o parâmetro 123456 pode ser o cartão do beneficiário. | string |
operation | Define o tipo de interação que será executada pelo Liveness | string |
message | Permite que o usuário adicione uma justificativa obrigatória para a operação de troca de imagem ("IMAGE_UPDATE"). | string |
details | Campo livre para enviar informações pertinentes que queira salvar junto aos dados do atendimento. Esperamos um JSON com chave/valor. | string |
ENUM DE OPERATION
VERIFICATION = Verificação de biometria (default);
IMAGE_UPDATE = Atualização de imagem principal;
REGISTRATION = Cadastro de biometria;
# Exemplo de Integração via URL Padrão através de um iFrame
Atente a um detalhe importante: é necessário inserir o atributo "allow='camera" para que o navegador permita o uso do dispositivo na janela de iFrame.
<!-- Exemplo da integração via URL Padrão através de um iFrame -->
<iframe
src="https://web.sandbox.biodoc.com.br/#/integration/liveness?token=SEUTOKEN&card=1234567891234567&name=TESTE USUÁRIO&autoStart=true&url=https://autorizador/1234567891234567/&operation=VERIFICATION"
allow="camera"
></iframe>
# Retorno
O BioDoc irá retornar as informações da verificação redirecionando a página para a URL de retorno informada com os parâmetros via querystring.
// Redirecionamento da página para a URL de Retorno com os parâmetros de retorno
window.location.href(
"https://autorizador/123456?date=DATA DA VERIFICAÇÃO&response=CÓDIGO DA RESPOSTA&message=MENSAGEM DE RETORNO&card=CARTÃO DO BENEFICIÁRIO"
);
# Parâmetros de Retorno
Parâmetro | Descrição | Formato |
---|---|---|
confidence | Resultado de 0 a 100 avaliando a probabilidade da imagem ser uma foto de uma face viva | string |
date | Data da Operação | timestamp / string |
response | Código de Resultado da Operação | number |
message | Mensagem de Retorno da Operação | string |
card | Cartão do cartão do beneficiário do atendimento | string |
Os Códigos de Resultado da Verificação são:
Código de Resposta | Descrição |
---|---|
200 | Face Reconhecida - Autorizado |
201 | Face Cadastrada |
Caso não seja aprovada a operação, não será feito o redirecionamento para a URL de callback.
# 2. Integração via web-view (mobile - React Native)
- Importar a URL
[link do ambiente]/#/integration/liveness
dentro de um web-view na aplicação.
Sandbox
https://web.sandbox.biodoc.com.br/#/integration/liveness?
Produção
https://web.biodoc.com.br/#/integration/liveness?
# Parâmetros de querystring para URL Padrão
Os parâmetros necessários deverão ser enviados através de querystring junto a URL de Integração.
Parâmetro | Descrição | Formato |
---|---|---|
token | Token de integração da empresa que está realizando o atendimento. | string |
card | Número do cartão do beneficiário. | string |
name | Nome do beneficiário. | string |
autoStart | Define se a verificação liveness irá iniciar automáticamente ou se será necessário ativá-lo manualmente com o botão "realizar captura" | boolean |
url | URL de retorno da resposta do BioDoc para seu sistema autorizador. Você pode incluir parâmetros necessários para identificação do atendimento no retorno da API. Exemplo: "https://autorizador/123456", onde o parâmetro 123456 pode ser o cartão do beneficiário. | string |
operation | Define o tipo de interação que será executada pelo Liveness | string |
message | Permite que o usuário adicione uma justificativa obrigatória para a operação de troca de imagem ("IMAGE_UPDATE"). | string |
details | Campo livre para enviar informações pertinentes que queira salvar junto aos dados do atendimento. Esperamos um JSON com chave/valor. | string |
ENUM DE OPERATION
VERIFICATION = Verificação de biometria (default);
IMAGE_UPDATE = Atualização de imagem principal;
REGISTRATION = Cadastro de biometria;
- Para Expo, importar as seguintes bibliotecas:
expo-camera
react-native-webview
// Exemplo da integração via EXPO
import { useState, useEffect } from "react";
import { SafeAreaView, Text } from "react-native";
// ... outros imports
import { useRouter } from "expo-router";
import * as Linking from "expo-linking";
import { WebView } from "react-native-webview";
const RenderedComponent = () => {
const router = useRouter();
const [deepLink, setDeepLink] = useState<string | null>(null);
useEffect(() => {
// permitir o uso da camera aqui.
const handleDeepLink = async () => {
const url = await Linking.createURL("path-inside-app", {});
setDeepLink(url);
};
if (deepLink) return;
handleDeepLink();
const subscription = Linking.addEventListener("url", (event) => {
const { searchParams } = new URL(event.url);
/*
* Observação: Aqui é implementada a navegabilidade em acordo ao suportado na documentação.
* Também é totalmente moldável a critério do desenvolvedor, em caso queria usar como trigger para outra ação.
*/
router.push({
pathname: "/path-inside-app",
params: Object.fromEntries(searchParams),
});
});
return () => subscription.remove();
}, []);
if (!deepLink) return <Text>Problemas ao rederizar o deeplink.</Text>;
return (
<SafeAreaView>
<WebView
allowsInlineMediaPlayback // IOS camera permission
javaScriptEnabled // Android camera permission
mediaPlaybackRequiresUserAction={false} // Bypass para acesso à camera (via browser)
onShouldStartLoadWithRequest={(request) => {
if (!request.url.startsWith(deepLink.split("//")[0])) return true;
/*
* Observação: O redirecionamento de telas pode ser implementado aqui, conforme a regra de negócio.
* Contudo recomenda-se usar um event-listener da lib "expo-linking" para melhor distribuição de responsabilidades (para uso de boas práticas como custom-hooks).
*
* Observação: Para deeplink é necessário o uso desse interceptor uma vez que o browser incapsulado não necessariamente roda em ambiente local.
* Para maior embasamento técnico e redução de exploits, podemos acompanhar o artigo: https://medium.com/@justmobilesec/deep-links-webviews-exploitations-part-ii-5c0b118ec6f1
*
* -> As politicas nessa função expressas podem ser alteradas a depender da regra de negócio da atual aplicação.
*/
Linking.openURL(request.url).then(); // **Obs.: aqui o uso de miro-promisse pode ser trabalhado de outra forma.
return false;
}}
source={{
uri:
"http://web.sandbox.biodoc.com.br/#/integration/liveness?token=SEUTOKEN&cardId=1234567891234567&cardName=TESTE USUÁRIO&autoStart=true&url=https://autorizador/1234567891234567/&operation=VERIFICATION",
}}
/>
</SafeAreaView>
);
};
export default RenderedComponent;
- Liberar permissões de acesso à câmera do autorizador ao renderizar o iframe:
- Liberar o acesso na raiz do projeto no arquivo app.json.
- Para fazer o redirect interno na aplicação, deve-se configurar o
scheme
. Recomendamos que o nome seja único, evitando duplicações dentro do sistema operacional. Exemplo:myuniqueschemebiodocintegration
. - Para Android, a permissão de acesso à câmera deve ser adicionada no campo
"permissions"
. - Para iOS, a permissão de acesso à câmera deve ser adicionada no campo
"infoPlist"
.
- Para fazer o redirect interno na aplicação, deve-se configurar o
- Liberar o acesso na raiz do projeto no arquivo app.json.
# Parâmetros de Retorno
Parâmetro | Descrição | Formato |
---|---|---|
confidence | Resultado de 0 a 100 avaliando a probabilidade da imagem ser uma foto de uma face viva | string |
date | Data da Operação | timestamp / string |
response | Código de Resultado da Operação | number |
message | Mensagem de Retorno da Operação | string |
card | Cartão do cartão do beneficiário do atendimento | string |
Os Códigos de Resultado da Verificação são:
Código de Resposta | Descrição |
---|---|
200 | Face Reconhecida - Autorizado |
201 | Face Cadastrada |
Caso não seja aprovada a operação, não será feito o redirecionamento para a URL de callback.