Medidor de Similaridade Facial
Envie duas fotos e descubra com IA o quanto os rostos se parecem. Cálculo de similaridade facial 100% no navegador, com privacidade total.
Sobre o Medidor de Similaridade Facial
O Medidor de Similaridade Facial compara duas fotos e relata o quanto os rostos se parecem visualmente como porcentagem de 0% a 100%. Funciona inteiramente no seu navegador via @vladmandic/face-api (um fork mantido do face-api.js). Ambas as imagens são decodificadas localmente, rostos são detectados com um detector estilo MobileNet, cada rosto é codificado como descriptor de 128 dimensões por uma rede inspirada em FaceNet, e a distância cosseno entre os dois descriptors é convertida em porcentagem de similaridade. Nenhum byte de imagem sai do seu dispositivo — não há processamento server-side, nem upload, nem log.
Use para exploração casual: 'meus dois primos realmente se parecem?', 'aquela selfie de cinco anos atrás ainda parece comigo?', 'esses dois artistas de MPB não relacionados parecem similares?'. É divertido, rápido, te dá um número. Escolhemos intencionalmente um modo de operação permissivo (apenas o melhor rosto por imagem, sem checagem de vivacidade, sem filtragem de qualidade) para que fotos pequenas ou de baixa qualidade ainda produzam resultado em vez de erro. Isso torna a ferramenta amigável mas também significa que as porcentagens não são calibradas para autenticação biométrica. Trate o score como indicador relativo de similaridade visual, não como prova de identidade.
Os melhores resultados exigem fotos frontais, bem iluminadas, em resolução decente onde o rosto ocupa parte significativa do quadro. Fotos com óculos escuros, máscaras, maquiagem pesada, chapéus cobrindo as sobrancelhas, ângulos laterais ou baixa resolução vão distorcer o descriptor e baixar o score, mesmo quando a mesma pessoa está em ambas as fotos. Inversamente, gêmeos idênticos, pais e filhos, e até pessoas não relacionadas de idade, etnia e penteado similares podem produzir scores surpreendentemente altos. Cirurgia plástica, mudança significativa de peso, envelhecimento de dez ou mais anos, ou filtros fortes / software face-tune também importam — o modelo não foi treinado para ser invariante a esses.
Projetamos deliberadamente esta ferramenta como curiosidade e não como sistema de verificação. Não é adequada para verificação de identidade biométrica, KYC (know-your-customer), controle de fronteira, vigilância, triagem de empregos, verificação em apps de namoro, ou qualquer situação onde o resultado seja usado para permitir ou negar algo a uma pessoa. Para esses casos de uso você precisa de um sistema de fornecedor avaliado sob NIST FRVT 1:1, que suporte detecção de vivacidade (anti-spoofing), avaliação de equidade demográfica, inscrição segura e revogação. Uma demo gratuita no navegador não pode satisfazer esses requisitos operacionais, legais ou de auditoria.
A privacidade é por design. Os pesos do modelo são baixados ao seu navegador uma vez (cerca de 6 MB, cacheados para futuras visitas) e toda a comparação roda localmente como JavaScript. Não há etapa de upload, não há cache temporário do lado do servidor, não há chamada de API. A página usa analytics padrão apenas para contagem de tráfego. Fechar a aba limpa todo o estado. Não armazenamos, registramos, vendemos ou compartilhamos as fotos comparadas.
Como funciona a comparação
O pipeline tem três etapas — detecção, alinhamento + codificação, e pontuação por distância — e cada etapa usa uma rede neural open-source estabelecida. O detector é um SSD MobileNetV1 treinado em WIDER FACE. Retorna um ou mais bounding boxes por imagem com pontuações de confiança; mantemos o rosto mais confiável por foto para comparação. Para fluxo com múltiplos rostos, veja nosso Preditor de Idade e Gênero que itera sobre cada detecção.
Cada rosto detectado é então alinhado. Um detector de 68 landmarks (pequena ConvNet treinada no dataset iBUG 300-W) prediz coordenadas de landmarks: cantos externos e internos dos olhos, cavalete e ponta do nariz, cantos da boca e linha do queixo. O rosto é rotacionado e cortado para que os olhos fiquem horizontais e a distância interpupilar seja normalizada. Alinhamento importa: a rede de codificação foi treinada em rostos alinhados e produz descriptors inconsistentes em entrada não alinhada.
O recorte alinhado passa por uma rede de codificação facial — em face-api.js esta é uma arquitetura ResNet-34 inspirada em FaceNet (Schroff, Kalenichenko & Philbin, 2015) e treinada com triplet loss para produzir vetores unitários de 128 dimensões que se agrupem fortemente dentro da mesma identidade e se espalhem entre identidades. ArcFace (Deng et al., 2019) é uma melhoria mais recente que usa perda de margem angular aditiva; o fork do vladmandic suporta backbones mais novos estilo ArcFace para maior precisão quando necessário. Usamos o modelo ResNet-34 padrão para compatibilidade de navegador e tamanho.
Dois descriptors de 128 dimensões são comparados por distância cosseno: distance = 1 − (dot(a,b) / (|a||b|)). Distância menor = mais similar. O limiar padrão face-api.js para 'mesma pessoa' é aproximadamente 0,6 (distância 0,6 significa cerca de 70% de similaridade no nosso display). Mapeamos distância para porcentagem de similaridade usando uma curva suave: 0,0 → 100%, 0,4 → ~70%, 0,6 → ~50%, 1,0 → 0%. Esse mapeamento é empírico e amigável em vez de calibrado contra um padrão biométrico, então um score de 85% deve ser lido como 'muito similar' mas não como probabilidade de ser a mesma pessoa.
Todos os pesos são quantizados para float de 32 bits para o runtime TensorFlow.js no navegador; download total ~6 MB. A inferência roda em WebGL quando disponível (acelerado por GPU) e cai para CPU via WebAssembly. Comparação ponta-a-ponta de dois rostos tipicamente leva 200 ms a 1 s em laptop moderno, mais em celular. A UI mostra uma barra estilo confiança e uma de cinco faixas qualitativas (muito similar, similar, algo similar, não similar, muito diferente) escolhidas para amabilidade, não para rigor biométrico.
Precisão, limiares e onde esta ferramenta falha
No benchmark acadêmico LFW (Labelled Faces in the Wild), encoders faciais bem treinados de 128 dimensões alcançam ~99% de precisão de verificação em pares casados. Esse número não é a precisão que você deve esperar em fotos arbitrárias da internet. Pares LFW são pré-selecionados por qualidade de imagem e pose frontal; desempenho in-the-wild é muito mais ruidoso. NIST FRVT 1:1 — que avalia dezenas de fornecedores comerciais sobre centenas de milhares de fotos operacionais — mostra que mesmo sistemas líderes têm valores de FAR (False Acceptance Rate) e FRR (False Rejection Rate) que variam em uma ordem de magnitude com demografia, idade e qualidade de imagem. Nosso backbone open-source é mais antigo e menor que os líderes do FRVT.
Modos de falha concretos que você encontrará: gêmeos idênticos quase sempre pontuam acima de 80% — o encoder não consegue distingui-los confiavelmente. Pais e filhos adultos, irmãos, ou pessoas não relacionadas da mesma etnia e idade e penteado similares podem todos pontuar 70–85%. A mesma pessoa fotografada com dez anos de diferença pode cair para 50% se as características faciais mudaram. Filtros fortes (FaceTune, Snapchat, beauty filters) efetivamente editam um rosto diferente na foto e baixam o score significativamente. Óculos, máscaras, barbas, hijabs, chapéus e oclusão parcial reduzem a precisão porque escondem landmarks informativos.
Equidade demográfica é uma limitação conhecida. Buolamwini & Gebru (2018), NIST FRVT (2019, 2024) e muitas outras auditorias mostraram que modelos de reconhecimento facial treinados predominantemente em sujeitos de pele mais clara produzem taxas de erro maiores para rostos de pele mais escura, mulheres e crianças. O descriptor face-api.js usado aqui herda esses vieses. Trate qualquer comparação individual com cautela, especialmente quando um ou ambos os sujeitos sejam de grupos sub-representados em sets de treinamento públicos padrão.
Não use esta ferramenta como autenticador biométrico, sistema de prova de identidade, checagem antifraude, correspondência de vigilância, filtro de triagem de emprego ou verificador de app de namoro. Para esses usos você precisa de um sistema comercial auditado com detecção de vivacidade (para que foto impressa ou vídeo deepfake não passe), pipeline de revogação e avaliação de viés documentada. Não temos essas garantias e dizemos explicitamente para você não implantar isto em produção. É uma ferramenta de curiosidade, e o score é um guia, não veredito.
- Gêmeos idênticos tipicamente pontuam 85–95% — o modelo não consegue distingui-los confiavelmente.
- A mesma pessoa com 10+ anos de diferença pode cair para 50–70% de similaridade por envelhecimento natural.
- Óculos escuros, máscaras, barbas, chapéus ou outras oclusões bloqueiam landmarks e reduzem o score.
- Filtros fortes (FaceTune, beauty filters, lentes Snapchat) editam efetivamente o rosto e distorcem o descriptor.
- Equidade demográfica é desigual: tons de pele escuros, mulheres e crianças têm taxas de erro maiores por desbalanço do set de treinamento.
- A ferramenta reporta o melhor rosto por imagem; fotos em grupo devem ser cortadas para um único rosto primeiro.
- Sem detecção de vivacidade — uma foto impressa de um rosto produz o mesmo descriptor que captura ao vivo.
- Não adequado para verificação de identidade biométrica, KYC, controle de fronteira, emprego ou checagens de segurança em apps de namoro.
- Mapeamento de distância cosseno para porcentagem é amigável e não calibrado contra padrão biométrico.
Glossário
- Embedding facial (descriptor)
- Vetor numérico de comprimento fixo — aqui, 128 números float — produzido por uma rede neural que codifica a identidade visual de um rosto. Fotos da mesma pessoa devem ter embeddings similares; de pessoas diferentes, embeddings diferentes.
- Similaridade cosseno / distância cosseno
- Medida geométrica de quão alinhados estão dois vetores. Similaridade cosseno = dot(a,b) / (|a||b|), faixa [-1, 1]; distância cosseno = 1 − similaridade cosseno. Usada porque descriptors vivem em uma hiperesfera de alta dimensão.
- Limiar (threshold)
- A distância cosseno abaixo da qual dois descriptors são declarados como casamento. face-api.js usa ~0,6 como padrão; corresponde a aproximadamente 50% na nossa escala UI amigável. Baixá-lo torna a ferramenta mais rigorosa (menos falsos casamentos, mais perdidos).
- FAR (False Acceptance Rate)
- Taxa em que um casador facial diz incorretamente que duas pessoas diferentes são a mesma. Crítica para sistemas de segurança — FAR alto significa que impostores passam.
- FRR (False Rejection Rate)
- Taxa em que um casador facial diz incorretamente que fotos da mesma pessoa são diferentes. FRR alto significa que usuários genuínos são incomodados.
- FaceNet
- Paper marco de 2015 de Schroff, Kalenichenko & Philbin (Google) que introduziu o esquema de treinamento por triplet loss para produzir embeddings faciais de 128 dimensões em uma hiperesfera unitária.
- ArcFace
- Função de perda para reconhecimento facial de 2019 (Deng et al., InsightFace) que usa margem angular aditiva para empurrar classes de descriptors mais distantes na hiperesfera. Estado da arte em benchmarks acadêmicos como LFW e IJB-B.
- LFW / NIST FRVT
- Benchmarks acadêmicos e governamentais para sistemas de reconhecimento facial. LFW (Labelled Faces in the Wild, 2007) é pequeno e de alta qualidade. NIST FRVT (Face Recognition Vendor Test) é a avaliação governamental padrão-ouro, com centenas de milhares de fotos operacionais e publicação contínua.
Perguntas Frequentes
Como a IA compara dois rostos?
Detecta um rosto por imagem, alinha cada um usando 68 landmarks faciais, codifica cada rosto alinhado como vetor de 128 dimensões com ResNet estilo FaceNet, e calcula distância cosseno entre os dois vetores. Distância cosseno é mapeada para score amigável de 0–100% de similaridade. Toda a inferência é JavaScript no seu navegador via @vladmandic/face-api sobre TensorFlow.js.
O que a porcentagem realmente significa?
É um mapeamento suave de distância cosseno para escala 0–100. Em termos gerais: 90–100% = visualmente quase idênticos (mesma pessoa, gêmeos ou sósia extremo); 70–90% = mesma pessoa provável, ou parentes próximos; 50–70% = algumas características compartilhadas mas não necessariamente a mesma pessoa; abaixo de 50% = pessoas diferentes. NÃO é probabilidade e NÃO é resultado de verificação biométrica.
Por que pessoas não relacionadas pontuam 60%?
Porque o descriptor codifica a forma geral do rosto — espaçamento dos olhos, largura do nariz, ângulo da mandíbula, etnia, idade — e muitas pessoas não relacionadas compartilham o suficiente dessas características para cair em região similar do espaço de embeddings. É propriedade fundamental dos descriptors faciais de 128 dimensões, não bug.
Por que minha própria foto pontuou só 75% contra outra foto minha?
Causas comuns: (1) iluminação ou ângulo de câmera diferentes; (2) idade diferente (mais que poucos anos pode mover descriptors significativamente); (3) óculos ou pelos faciais em apenas uma das fotos; (4) filtros fortes ou FaceTune em uma foto; (5) uma foto está em resolução muito menor; (6) você está com maquiagem em uma e sem em outra. Tente outro par de fotos com condições similares.
Minhas fotos são enviadas?
Não. Toda detecção, codificação e comparação facial acontece localmente no seu navegador via TensorFlow.js. Os pesos do modelo são baixados uma vez (cerca de 6 MB, cacheados) e a inferência roda nos JPEGs que você seleciona. Bytes das fotos nunca deixam o dispositivo. Não armazenamos, registramos ou compartilhamos fotos.
Posso usar para verificação de identidade?
Não. Não use esta ferramenta para verificar identidade de alguém, controlar acesso a serviço, prevenir fraude, ou triar funcionários / namoros. Não tem detecção de vivacidade, não tem limiar calibrado, não tem auditoria de equidade demográfica e usa modelo open-source menor que sistemas comerciais. Para verificação de identidade você precisa de fornecedor avaliado sob NIST FRVT com FAR/FRR documentados e garantias operacionais.
Por que gêmeos idênticos não são distinguíveis?
O descriptor facial é treinado para ser invariante a iluminação, expressão e pose, mas não foi projetado para capturar microcaracterísticas que mesmo humanos usam para distinguir gêmeos (pinta pequena, leve assimetria). Discriminação de gêmeos é área de pesquisa ativa; encoders faciais padrão geralmente falham nela.
Distingue pais e filhos?
Frequentemente, mas nem sempre. Pais e filhos adultos compartilham muitas características faciais genéticas e podem pontuar 60–80%. O modelo é treinado para aproximar a mesma identidade, mas não tem noção de 'parecença familiar' versus 'identidade', então scores altos entre parentes são comuns e esperados.
Suporta múltiplos rostos em uma foto?
Atualmente pega o melhor rosto por imagem e compara esses dois. Se suas fotos são em grupo, corte cada uma para um único rosto primeiro. Para fluxos com múltiplos rostos temos um Preditor de Idade e Gênero dedicado que itera sobre cada rosto detectado em uma imagem.
E se nenhum rosto for detectado?
A ferramenta reporta 'nenhum rosto detectado' para essa imagem. Causas comuns: rosto pequeno demais (abaixo do tamanho mínimo do detector), rosto em ângulo extremo, iluminação muito escura ou clara, imagem muito borrada ou imagem que não é realmente foto de rosto. Tente foto mais clara, maior, frontal.
Referências e fontes acadêmicas
- Schroff, F., Kalenichenko, D., & Philbin, J.. (2015). FaceNet: A Unified Embedding for Face Recognition and Clustering IEEE CVPR.
- Deng, J., Guo, J., Xue, N., & Zafeiriou, S.. (2019). ArcFace: Additive Angular Margin Loss for Deep Face Recognition IEEE CVPR (projeto InsightFace).
- Huang, G. B., Ramesh, M., Berg, T., & Learned-Miller, E.. (2007). Labeled Faces in the Wild: A Database for Studying Face Recognition in Unconstrained Environments Universidade de Massachusetts Amherst Technical Report.
- Grother, P., Ngan, M., & Hanaoka, K.. (2024). NIST Face Recognition Vendor Test (FRVT) Instituto Nacional de Padrões e Tecnologia dos EUA.
- Buolamwini, J., & Gebru, T.. (2018). Gender Shades: Disparidades de precisão interseccional em classificação comercial de gênero Proceedings of Machine Learning Research.
- Mandic, V.. (2024). @vladmandic/face-api — fork TypeScript mantido do face-api.js Projeto open-source, licença MIT.
Last reviewed: · Reviewed by Equipe de Ética e Engenharia de IA WuTools
