A API FACEID foi projetada para estabelecer uma infraestrutura de back -end para a autenticação do usuário por meio do reconhecimento de rosto. Essa API funciona recebendo um vetor de representação de rosto (FRV) de um cliente remoto e verificando se isso forneceu FRV corresponde a um existente armazenado no banco de dados. Com base nessa verificação, o acesso é concedido ou negado ao cliente.
A API FACEID é acessível a qualquer cliente capaz de enviar uma solicitação HTTP. Desenvolvido usando Golang e seguindo a arquitetura restante, a API oferece flexibilidade em termos de implementação do cliente. Os clientes podem ser desenvolvidos em qualquer linguagem de programação e podem se originar de várias plataformas, como Web, Mobile ou Desktop. Esse recurso de integração contínuo permite a incorporação da funcionalidade de reconhecimento de rosto em uma variedade diversificada de aplicações. Notavelmente, o processo de obtenção do FRV do cliente fica fora do escopo das responsabilidades da API do FACEID.
A documentação da API está disponível em http://faceid.orionioft.site/reference
NOTA: Você pode usar os vetores localizados no arquivo vectors.json no diretório raiz deste projeto para testar a API. Esses vetores já estão armazenados no banco de dados.
O reconhecimento de rosto é uma tecnologia que envolve identificar e verificar indivíduos analisando e comparando suas características faciais. É um subconjunto de identificação biométrica e possui vários aplicativos, incluindo sistemas de segurança, autenticação e controle de acesso ao usuário. Aqui está uma visão geral simplificada de como o reconhecimento de rosto funciona:
Detecção de rosto: A primeira etapa é localizar e extrair faces de uma imagem ou quadro de vídeo. Isso é feito usando algoritmos de detecção de rosto, que identificam potenciais regiões de face nos dados de entrada.
Alinhamento de rosto: Uma vez detectado uma face, o algoritmo pode executar o alinhamento da face, garantindo que a face esteja em uma posição padronizada. Isso ajuda a normalizar os recursos para uma comparação precisa.
Extração de recursos: Esta é uma etapa crucial, onde as características distintas da face são extraídas e transformadas em uma representação numérica. Esses recursos podem incluir as distâncias entre os principais marcos faciais, os ângulos entre certos pontos e outros dados que podem diferenciar um rosto de outro. As técnicas populares para extração de recursos incluem padrões binários locais (LBP), histograma de gradientes orientados (HOG) e, mais recentemente, métodos profundos baseados em aprendizado.
Codificação de recursos: Os recursos extraídos são então convertidos em uma representação compacta que pode ser facilmente comparada com outras representações de rosto. Isso geralmente envolve reduzir a dimensionalidade dos recursos, preservando suas informações discriminatórias.
Banco de dados FACE: No seu cenário, você teria um banco de dados contendo as representações de rosto (ou incorporações) de usuários autorizados. Esse banco de dados pode ser criado coletando e processando um conjunto de imagens de cada usuário durante a inscrição.
Combinação de rosto: quando um usuário tenta obter acesso, sua face enviada é processada através do mesmo pipeline: detecção, alinhamento, extração de recursos e codificação. A representação de face resultante é então comparada com as representações em seu banco de dados de rosto usando uma métrica de distância, como distância euclidiana ou similaridade de cosseno. A idéia é encontrar a partida mais próxima.
Limiar: a comparação produz uma pontuação de similaridade. Você definiria um valor limite acima do qual a face enviada é considerada uma correspondência com uma face no banco de dados. O limiar ajuda a equilibrar falsos positivos e falsos negativos.
Tomada de decisão: Com base na pontuação de similaridade e no limite, é tomada uma decisão se deve conceder acesso ou não. Se a pontuação estiver acima do limite e dentro de um intervalo aceitável, o acesso será concedido. Caso contrário, o acesso é negado.
Aprendizagem contínua: para melhorar a precisão do reconhecimento ao longo do tempo, alguns sistemas implementam o aprendizado contínuo. Isso envolve atualizar periodicamente as representações de rosto no banco de dados usando novas imagens de usuários. Isso pode ajudar a explicar mudanças na aparência devido a fatores como envelhecimento ou pêlos faciais.
O FRV é um vetor que representa a face de uma pessoa. É uma representação numérica da face e é usada para comparar faces. O FRV é gerado por um algoritmo de reconhecimento de rosto implementado por uma biblioteca usada no lado do cliente. O lado do cliente pode ser qualquer plataforma (web, celular, desktop, etc). Vamos dar uma olhada na estrutura FRV:
[
0.123, -0.456, 0.789, 0.234, 0.567, 0.123, 0.678, -0.345,
-0.987, 0.876, -0.123, -0.456, 0.789, -0.234, -0.567, 0.123,
0.678, 0.345, -0.987, -0.876, 0.123, 0.456, -0.789, 0.234,
0.567, -0.123, 0.678, 0.345, 0.987, -0.876, -0.123, 0.456,
-0.789, 0.234, -0.567, -0.123, -0.678, 0.345, 0.987, 0.876,
0.123, -0.456, 0.789, -0.234, 0.567, -0.123, -0.678, -0.345,
0.987, -0.876, 0.123, 0.456, -0.789, -0.234, -0.567, -0.123,
0.678, -0.345, -0.987, 0.876, -0.123, -0.456, 0.789, -0.234,
-0.567, 0.123, 0.678, 0.345, -0.987, -0.876, 0.123, 0.456,
-0.789, 0.234, -0.567, -0.123, -0.678, 0.345, 0.987, 0.876,
0.123, -0.456, 0.789, -0.234, 0.567, -0.123, -0.678, -0.345,
0.987, -0.876, 0.123, 0.456, -0.789, -0.234, -0.567, -0.123,
0.678, -0.345, -0.987, 0.876, -0.123, -0.456, 0.789, -0.234,
0.123, -0.456, 0.789, -0.234, 0.567, -0.123, -0.678, -0.345,
0.987, -0.876, 0.123, 0.456, -0.789, -0.234, -0.567, -0.123,
0.678, -0.345, -0.987, 0.876, -0.123, -0.456, 0.789, -0.234
]
Acima, temos um FRV de 128 dimensões (vetor de representação de rosto) de uma representação numérica do rosto de alguém. Diferentes bibliotecas podem gerar diferentes FRVs de dimensão, que podem ter 256, 512 ou ainda mais dimensões. Podemos pensar que esse FRV como um selo unic numérico do rosto de alguém. Como ninguém tem o mesmo rosto, ninguém tem o mesmo FRV. Portanto, um FRV pode ser usado para identificar alguém em um banco de dados de FRVs.
Esta API FACEID utiliza um FRV enviado pelo cliente para identificar se o FRV fornecido corresponde a algum FRV no banco de dados. Se o FRV fornecido corresponder a algum FRV no banco de dados, a API concede acesso ao cliente. Caso contrário, a API nega o acesso ao cliente.
Um banco de dados vetorial é algo novo no mundo dos bancos de dados, e seu uso está crescendo rapidamente. No nosso caso, estamos usando o QDRANT (https://qdrant.tech), um banco de dados vetorial que é de código aberto e gratuito para usar. Lembre -se de que os vetores de representação de rosto são basicamente uma variedade de números de flutuação que podem ser enormes em tamanho. Nesta API FACEID, estamos usando uma FRV de 128 dimensões, mas pode ter 256, 512 ou ainda mais dimensões. Portanto, precisamos de um banco de dados que possa armazenar essa enorme quantidade de dados e pode executar pesquisas rápidas.
Os bancos de dados SQL e NOSQL tradicionais podem ser usados para armazenar FRVs, mas não são otimizados para esse tipo de dados. Os bancos de dados de vetores são otimizados para armazenar e pesquisar vetores. Eles também são otimizados para pesquisas rápidas e podem executar pesquisas em milhões de vetores em alguns milissegundos. Isso significa que um rosto pode ser identificado em alguns milissegundos, o que é ótimo para aplicações em tempo real.
Este projeto é uma implementação simples de uma API de reconhecimento de rosto. É uma API simples que pode ser usada para integrar o reconhecimento de rosto em qualquer aplicativo. A API é escrita em Golang e usa a arquitetura restante. O cliente pode ser escrito em qualquer idioma e pode vir de qualquer plataforma (web, celular, desktop, etc). Se você deseja implementar o reconhecimento de face em seu aplicativo, pode usar a API FACEID como ponto de partida. Por favor, não hesite em entrar em contato comigo em [email protected] se tiver alguma dúvida ou sugestão. Obrigado!