Argus Face API
Reconhecimento facial com a mesma API do Amazon Rekognition: os mesmos nomes de operação, os mesmos campos e as mesmas respostas. Se você já usa o Rekognition, troque o endereço e a credencial e o seu código continua funcionando.
{{BASE}}
Início rápido
- Crie sua conta em Criar conta grátis. O plano gratuito já libera a API para testes.
- Gere uma chave de API no portal, em Chaves de API. Ela tem o formato
agk_xxxx.yyyye só aparece uma vez: guarde em local seguro. - Crie uma coleção, indexe um rosto e busque, como abaixo.
Autenticação
Toda requisição leva a sua chave no header X-Api-Key:
X-Api-Key: agk_7f3a9c21.Qm9kZS1zZWNyZXQtZXhhbXBsZQ
- Cada chave pertence à sua conta, e você só enxerga as suas coleções. Duas contas podem ter coleções com o mesmo nome sem conflito.
- O número de chaves ativas depende do plano. Revogue uma chave no portal a qualquer momento: ela para de funcionar na hora.
- Não coloque a chave em apps, sites ou código que roda no aparelho do usuário. Chame a API a partir do seu servidor.
- Chave inválida, revogada ou de assinatura inativa recebe
401 UnrecognizedClientException.
Formato das requisições
A API segue o protocolo JSON 1.1 da AWS. Todas as operações usam POST com corpo JSON e campos em PascalCase, iguais aos da documentação do Rekognition. Há duas formas equivalentes de chamar uma operação:
Formato dos SDKs da AWS
POST /
X-Amz-Target: RekognitionService.DetectFaces
Content-Type: application/x-amz-json-1.1
X-Api-Key: agk_...
Atalho (curl, Postman)
POST /DetectFaces
Content-Type: application/json
X-Api-Key: agk_...
A resposta é sempre JSON (application/x-amz-json-1.1). Campos sem valor são omitidos, como na AWS. Operações que listam itens são paginadas com MaxResults e NextToken: repita a chamada com o NextToken recebido até ele não vir mais.
Usando os SDKs da AWS
Use o cliente oficial do Rekognition de qualquer linguagem. Basta apontar o endpoint para o Argus Face e adicionar o header X-Api-Key. O SDK exige credenciais AWS, mas elas não são usadas: informe qualquer valor. A região também é indiferente.
Depois de configurar o cliente, chame as operações exatamente como faria na AWS (index_faces, IndexFacesCommand, IndexFacesAsync...). Nos SDKs, Image.Bytes recebe os bytes do arquivo: o SDK converte para base64.
Imagens
- Envie a imagem em
Image.Bytes, codificada em base64 no JSON. Formatos: JPEG, PNG e WebP. A orientação EXIF é aplicada automaticamente. - Tamanho máximo da requisição: 40 MB.
Image.S3Objectnão é suportado: a imagem precisa ir no corpo (InvalidS3ObjectException).- São detectados até 100 rostos por imagem. Para identificar pessoas, use fotos em que o rosto tenha pelo menos uns 40 pixels de largura.
- O reconhecimento funciona com máscara, óculos, debaixo d'água, em movimento e com iluminação ruim. Fotos melhores ainda dão resultados melhores.
QualityFilter
Nas operações que recebem imagem, QualityFilter controla quais rostos são aceitos: NONE (todos), AUTO (padrão), LOW, MEDIUM ou HIGH (só rostos grandes e nítidos). Em IndexFaces, os rostos descartados aparecem em UnindexedFaces com o motivo.
Similaridade e limiares
Similarity vai de 0 a 100, na mesma escala do Rekognition. Quanto maior, mais parecidos os rostos. Os limiares (FaceMatchThreshold, SimilarityThreshold, UserMatchThreshold) usam a mesma escala.
| Uso | Limiar sugerido |
|---|---|
| Busca ampla (ex.: encontrar fotos de uma pessoa em um evento) | 70–80 |
| Uso geral (padrão da API) | 80 |
| Verificação de identidade, controle de acesso | 90–99 |
Limiar mais baixo traz mais resultados e mais falsos positivos. Limiar mais alto traz menos resultados e mais certeza. Ajuste com as suas próprias fotos.
Fluxos comuns
Busca em fotos de eventos
Indexe cada foto do evento com IndexFaces, usando o nome do arquivo em ExternalImageId. O participante envia uma selfie e você chama SearchFacesByImage: os ExternalImageId retornados são as fotos em que ele aparece.
Identificar pessoas cadastradas
Indexe algumas fotos de cada pessoa, crie um usuário com CreateUser e junte as faces com AssociateFaces. Depois, SearchUsersByImage devolve o UserId de quem está na imagem. Com várias fotos por pessoa, o resultado é mais estável.
Verificação 1:1
Para conferir se duas fotos são da mesma pessoa (selfie × documento, por exemplo), use CompareFaces. Não precisa de coleção.
Reindexar e apagar
Indexar de novo o mesmo ExternalImageId substitui os rostos daquela imagem. Para remover rostos, use DeleteFaces com os FaceId. Para remover tudo, use DeleteCollection.
Face Liveness
Confere se há uma pessoa real diante da câmera, e não uma foto, uma tela ou um vídeo gravado. O usuário vê o próprio rosto num oval, a tela pisca uma sequência de cores sorteada pelo servidor e ele olha para a esquerda, a direita, para cima e para baixo, em ordem sorteada. Setas e uma barra de progresso guiam cada movimento, e o próximo passo só começa quando o servidor confirma que a pessoa fez o anterior. A análise combina a detecção de fraude do motor Argus (foto impressa, tela) com o reflexo das cores no rosto, o movimento e a confirmação de que é a mesma pessoa do começo ao fim.
- Seu servidor chama CreateFaceLivenessSession com a chave de API e entrega o
SessionIdà página. - A página carrega
argus-liveness.jse chamaArgusLiveness.start({ sessionId }). O componente abre a câmera, conduz o desafio e envia a captura para StartFaceLivenessSession. Não use a chave de API no navegador: oSessionIdé a credencial, vale uma vez e expira em 5 minutos. - Seu servidor chama GetFaceLivenessSessionResults e decide pelo
Confidence. A nota nunca passa pelo navegador.
Confidencevai de 0 a 100. Sugerimos aceitar a partir de 80. Abaixo disso, peça uma nova tentativa ou siga um fluxo de revisão.ReferenceImageé um quadro frontal da captura: use com CompareFaces ou SearchFacesByImage para saber quem é a pessoa (por exemplo, selfie × documento). Até 4AuditImagesficam disponíveis para auditoria.- Os resultados ficam guardados por 24 horas. As imagens voltam em
Bytes(S3 não é suportado). - Para testar sem escrever código, entre no portal e abra Testar Face Liveness.
- Diferenças da AWS: a captura usa o nosso componente (
argus-liveness.js), não oFaceLivenessDetectordo Amplify, e não há certificação iBeta. Para decisões de alto risco, combine o liveness com outras verificações.
Erros
Erros seguem o formato da AWS: status HTTP, o código no header x-amzn-ErrorType e um corpo JSON com __type e a mensagem. Os SDKs da AWS transformam esse corpo na exceção correspondente (por exemplo, ResourceNotFoundException). Trate os erros pelo código: o texto de Message é para pessoas e pode mudar.
HTTP/1.1 400 Bad Request
x-amzn-ErrorType: ResourceNotFoundException
{ "__type": "ResourceNotFoundException", "Code": "ResourceNotFoundException", "Message": "Coleção faces não encontrada." }
| HTTP | Código | Quando acontece |
|---|---|---|
| 400 | InvalidParameterException | Parâmetro ausente ou inválido. Também quando a imagem não tem nenhum rosto em operações que exigem um (busca, comparação). |
| 400 | InvalidImageFormatException | A imagem não é JPEG, PNG ou WebP, ou está corrompida. |
| 400 | InvalidS3ObjectException | Foi enviado Image.S3Object. Envie Image.Bytes. |
| 400 | ResourceNotFoundException | Coleção, face ou usuário não existe. |
| 400 | ResourceAlreadyExistsException | Já existe uma coleção com esse CollectionId. |
| 400 | ConflictException | Já existe um usuário com esse UserId. |
| 400 | ServiceQuotaExceededException | O plano não permite mais coleções ou faces, ou o usuário já tem 100 faces. |
| 400 | SessionNotFoundException | Sessão de Face Liveness inexistente, já usada ou expirada. |
| 400 | SerializationException | O corpo não é um JSON válido. |
| 401 | UnrecognizedClientException | Chave ausente, inválida ou revogada, ou assinatura inativa. |
| 403 | AccessDeniedException | Operação inexistente ou não disponível (veja não suportadas). |
| 429 | LimitExceededException | A cota mensal de imagens do plano acabou. Faça upgrade no portal ou aguarde o próximo ciclo. |
| 5xx | — | Falha temporária. Repita com espera crescente (1 s, 2 s, 4 s...). |
Limites e cotas
| Item | Limite |
|---|---|
| Imagens por mês, coleções, faces armazenadas e chaves ativas | Conforme o plano (veja no portal, em Planos) |
CollectionId | Letras, números, _ . -, até 100 caracteres |
ExternalImageId | Até 1.024 caracteres |
| Rostos detectados por imagem | 100 |
| Faces por usuário | 100 |
MaxResults em ListFaces | até 4.096 (padrão 1.000) |
MaxResults em ListUsers, MaxUsers nas buscas de usuário | até 500 |
| Tamanho da requisição | 40 MB |
O consumo do mês aparece no portal, em Relatórios, com o total de imagens, rostos indexados e imagens sem rosto.
Cobrança
A cobrança é por imagem processada, como na AWS, em dólar (US$). Cada chamada abaixo conta 1 imagem na cota do plano ou na fatura do plano Livre:
IndexFaces SearchFacesByImage SearchFaces DetectFaces CompareFaces SearchUsers SearchUsersByImage
- Imagens sem rosto também são cobradas, porque a imagem foi processada. Isso vale mesmo quando a operação responde com erro por não encontrar rosto.
- Imagens corrompidas ou em formato inválido (
InvalidImageFormatException) não são cobradas. - Operações de gerenciamento são gratuitas: criar, listar, descrever e apagar coleções, faces e usuários, além de associar e desassociar faces.
- No plano Livre, as faces armazenadas também entram na fatura, por face por mês.
- Face Liveness é cobrado por verificação concluída (a captura enviada e analisada). Nos planos com cota, cada verificação consome 15 imagens, a mesma proporção de custo da AWS. No plano Livre, tem tabela própria, com o mesmo desconto sobre o preço da AWS.
Valores e planos em Preços.
Operações
São 21 operações compatíveis com o Amazon Rekognition. Os campos marcados com obrigatório precisam ser enviados.
Operações não suportadas
Estas operações existem no Rekognition, mas não fazem parte do Argus Face, que é especializado em rostos: DetectLabels, DetectText, DetectModerationLabels, DetectProtectiveEquipment, RecognizeCelebrities, DetectCustomLabels, operações de vídeo e de jobs em lote. Chamadas a elas recebem AccessDeniedException.
