Para realizar uma checagem da padronização de imagem de face, usa-se o método check_icao, que avalia a qualidade da foto da face de acordo com o padrão ISO/IEC 19794-5, ICAO. Este padrão foi criado com o intuito de permitir que máquinas façam a análise de imagens de face de forma automática mais eficientemente, portanto, verificar se a foto que será enviada para o sistema está de acordo com este padrão aprimorará o seu uso do BioPass ID.

Para o corpo da requisição, será necessário enviar um texto em formato JSON contendo a string base64 da imagem que deseja checar. Um exemplo pode ser visto abaixo:

{
  "Check": {
    "Image": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAY"
  }
}

Já para o header, insira o tipo de conteúdo e sua chave de subscrição, substituindo <API-KEY>, conforme o exemplo abaixo:

{
  'Content-Type': 'application/json',
  'Ocp-Apim-Subscription-Key': '<API-KEY>'
}

Para a requisição, especifique que é um método de tipo POST, a URL https://api.biopassid.com/quality/check_icao , o header e o corpo conforme os exemplos dados. É possível verificar abaixo como ficaria uma requisição desse tipo, escrito em Python, mas que pode ser verificada em diversas outras linguagens de programação em nossa documentação:

import http.client
import json

conn = http.client.HTTPSConnection("hml-api.biopassid.com")
payload = json.dumps({
  "Check": {
    "Image": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAY"
  }
})
headers = {
  'Content-Type': 'application/json',
  'Ocp-Apim-Subscription-Key': '52ac87259c6e46e78525cb47e469c4ce'
}
conn.request("POST", "/quality/check_icao", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))

Caso receba a mensagem 200 (OK) em sua resposta, isso significa que a requisição foi concluída com sucesso. O conteúdo da resposta será um objeto ICAO que conterá com detalhes o resultado do exame.

Primeiramente, ele conterá uma variável FaceImageConformed, que conterá um código numérico que se refere ao posicionamento da face na foto. O significado de cada valor pode ser observado na tabela abaixo:

Código

Descrição

-1

Erro no processamento da imagem

0

Nenhum problema foi encontrado

1

Face não detectada

2

Nenhum landmark foi identificado

3

Face está deslocada à esquerda

4

Face está deslocada à direita

5

Face está deslocada para cima

6

Face está deslocada para baixo

7

Face está longe

Em seguida, a variável IsAllConformed conterá um valor booleano que indica se a foto está completamente de acordo com todos os requerimentos impostos pelo padrão ICAO.

Por fim, haverá um objeto Requirements que mostra para cada requerimento se ele foi cumprido (através da variável booleana IsConformed) e o nível de certeza (de 0 a 100, através da variável Confidence). Uma tabela com cada requerimento e o que ele significa pode ser vista abaixo:

Requisito

Descrição

Blurred

A foto não pode estar embaçada

LookingAway

O indivíduo tem que estar olhando diretamente para câmera

InkMarked

A foto não pode ter marcas de tinta

UnnaturalSkin

A foto deve mostrar o tom de pele natural do indivíduo

TooDarkLight

A foto deve possuir brilho adequado

WashedOut

A foto de deve possuir nível de contraste adequado

Pixelation

A foto não deve apresentar pixelização

HairAcrossEyes

Os olhos não podem ser obstruidos pelo cabelo do indivíduo

EyesClosed

Os olhos devem estar abertos

VariedBackground

A foto deve ser retirada com o fundo uniforme

Roll_Pitch_Yaw

A cabeça do indivíduo deve estar voltada para câmera e em posição frontal

FlashReflectionOnSkin

A foto não pode apresentar reflexos do flash na pele do indivíduo

RedEyes

A foto não pode apresentar olhos vermelhos

ShadowsBehindHead

A foto não pode apresentar sombras atrás do indivíduo

ShadowsAcrossFace

A foto não pode apresentar sombras na face do indivíduo

DarkTintedLenses

O indivíduo não pode estar usando óculos escuros

FlashReflectionOnLenses

A foto não pode apresentar reflexos nas lente do óculos do indivíduo

FramesTooHeavy

O indivíduo não pode estar usando óculos de armação pesada

FramesCoveringEyes

A armação dos óculos do indivíduo não pode cobrir os seus olhos

Hat_Cap

O indivíduo não pode utilizar chapéu ou boné na foto

VeilOverFace

Caso esteja vestindo véu, este não pode cobrir a face do indivíduo

MouthOpen

A boca do indivíduo deve estar fechada

OtherFaces

O indivíduo deve estar sozinho na foto

Por fim, um exemplo de como ficaria a resposta do sistema para a requisição feita no exemplo pode ser observada abaixo:

{
    "ICAO": {
        "FaceImageConformed": 0,
        "IsAllConformed": false,
        "Requirements": {
            "Blurred": {
                "IsConformed": true,
                "Confidence": 100.0
            },
            "LookingAway": {
                "IsConformed": true,
                "Confidence": 100.0
            },
            "InkMarked": {
                "IsConformed": true,
                "Confidence": 100.0
            },
            "UnnaturalSkin": {
                "IsConformed": true,
                "Confidence": 100.0
            },
            "TooDarkLight": {
                "IsConformed": false,
                "Confidence": 100.0
            },
            "WashedOut": {
                "IsConformed": true,
                "Confidence": 100.0
            },
            "Pixelation": {
                "IsConformed": true,
                "Confidence": 100.0
            },
            "HairAcrossEyes": {
                "IsConformed": true,
                "Confidence": 100.0
            },
            "EyesClosed": {
                "IsConformed": true,
                "Confidence": 98.0
            },
            "VariedBackground": {
                "IsConformed": true,
                "Confidence": 100.0
            },
            "Roll_Pitch_Yaw": {
                "IsConformed": false,
                "Confidence": 100.0
            },
            "FlashReflectionOnSkin": {
                "IsConformed": true,
                "Confidence": 100.0
            },
            "RedEyes": {
                "IsConformed": true,
                "Confidence": 100.0
            },
            "ShadowsBehindHead": {
                "IsConformed": true,
                "Confidence": 100.0
            },
            "ShadowsAcrossFace": {
                "IsConformed": true,
                "Confidence": 100.0
            },
            "DarkTintedLenses": {
                "IsConformed": true,
                "Confidence": 100.0
            },
            "FlashReflectionOnLenses": {
                "IsConformed": true,
                "Confidence": 100.0
            },
            "FramesTooHeavy": {
                "IsConformed": true,
                "Confidence": 100.0
            },
            "FramesCoveringEyes": {
                "IsConformed": false,
                "Confidence": 100.0
            },
            "Hat_Cap": {
                "IsConformed": true,
                "Confidence": 99.0
            },
            "VeilOverFace": {
                "IsConformed": true,
                "Confidence": 92.0
            },
            "MouthOpen": {
                "IsConformed": true,
                "Confidence": 100.0
            },
            "OtherFaces": {
                "IsConformed": true,
                "Confidence": 100.0
            }
        }
    }
}