ValidFace

Reconhecimento Facial aplicado a prevenção de fraudes

O Trabalho de Conclusão de Curso de Engenharia de Computação da Escola Politécnica da USP, no qual se propõe a criação de uma ferramenta para comprovar a titularidade de documentos com foto através do uso de tecnologias de reconhecimento facial.

Autores: Caio Augusto Silva Pires, Felipe Fernandes de Lima, Matheus de Almeida Orsi e Silva

Orientador: Jorge Luis Risco Becerra

Co-orientadores: Infosimples

Propósito

O sistema desenvolvido soluciona a validação de identidade por reconhecimento facial de baixo custo e integrável a outras plataformas digitais. Valida-se a identidade pela similaridade entre a fotografia e o documento, além de analisar os quadros em busca de vitalidade.

O projeto

Introdução

Vários sistemas necessitam validar dados cadastrais dos usuários recolhendo algum documento com foto, como é o caso de instituições financeiras, prestadores de serviços como energia, telefonia, internet. Contudo, pessoas mal intencionadas tentam burlar esses sistemas cometendo o crime de falsa identidade. Assim, com o intuito de reduzir esses casos de fraudes, o projeto propõe a validação de documentos através de reconhecimento facial e prova de vida.

O projeto tem como objetivo fornecer uma solução barata, eficiente utilizando ferramentas open source, constrastando com o que há disponível no mercado: ferramentas de alto custo e código fechado, caixas pretas. sem explicabilidade de resultados.

Aplicativo para verificação de documentos

Afim de testar o sistema desenvolvido, uma aplicação Android foi feita. O aplicativo fornece instruções de como posicionar a câmera e ajustar o ambiente para melhorar a acertividade do sistema.

O protótipo simula uma aplicação de casos de usos reais, nos quais os usuários, ao realizar um cadastro, precisam gravar seu rosto e mandar foto de um documento com foto.

Aplicação dos modelos de Machine Learning e cálculos

Nessa figura podemos ver o Front-end capturando as mídias, a gravação e a foto do documento, passando-as para o back-end.

Em seguida o modelo MTCNN encontra as faces nos quadros.

O OpenCV recebe os quadros da gravação e analisa o piscar de olhos e passa-se para o cálculo final da prova de vida.

No quadro vermelho, o FaceNet realiza a criação dos embeddings e, então, o cálculo da similaridade é feito pela distância euclidiana.

Por fim, os cálculos são retornados para o Front-end.

Desenvolvimento e Estratégias

  1. Para o reconhecimento facial, selecionou-se uma rede neural de código aberto para avaliação. A rede FaceNet, mantida pela Google;

  2. Essa rede realiza a transformação de faces em vetores chamados embeddings, cujo tamanho é de 128 elementos;

  3. A verificação entre duas faces é realizada pela similaridade, podendo ser feita de três maneiras, todas calculando a distância vetorial;

    1. Distância Euclidiana;

    2. Produto escalar;

    3. Cosseno.

  4. Podemos ver em seguida algumas métricas de Distâncias Euclidianas entre embeddings de um data-set, CelebA, constituído de faces de famosos;

  5. Dada a distribuição e a função probabilidade da função de similaridade entre as faces, escolhe-se um limite para o valor da Distância Euclidiana aceitável.

Histograma da distribuição das distâncias entre vetores de 4736 rostos 2 a dois, dentro das linhas em vermelho as distâncias dentro do desvio padrão
Função Densidade Probabilidade da confiabilidade da distância, oposto da PDF do histograma. Em vermelho o limite escolhido (12.48; 99,377%)
Verdadeiros Positivos da rede FaceNet
Falsos Positivos da rede FaceNet resolvidos no sistema






Os falsos positivos podem ser causados por luminosidade baixa, ângulo da face, cabelo afrente do rosto e acessórios como óculos e chapéus.

Para evitar isso, a estratégia tomada é o teste de similaridade da face avaliada contra uma base de testes. Caso haja similaridade com alguém da base, a face é um falso positivo, que é similar a qualquer face comparada.














Com o fluxograma funcional do projeto, podemos entender melhor a relação entre usuário, aplicativo e backend separados em camadas.








O projeto é de fácil aplicação em estrutura cloud. Na Figura se propõe uma infraestrutura servless onde o backend pode ser hospedado em um ambiente isolado pelo container Docker.