POST rest/v3/verify¶
Efetua uma verificação biométrica com um ou mais áudios fornecidos.
A função permite efetuar a verificação com vários usuários, caso em que o áudio de entrada será comparado com o voiceprint de todos os usuários fornecidos, e resultados individuais serão retornados. Erros específicos dos usuários são reportados no resultado para o usuário correspondente e a função em si continua retornando sucesso. A função retornará erro apenas em caso de falhas gerais, como problemas com os áudios, parâmetros inválidos ou indisponibilidade do sistema.
Requisição¶
A requisição deve estar estruturada como multipart (Content-Type definido como multipart/form-data). O primeiro boundary, denominado verify, deve conter um objeto JSON (application/json) com os seguintes campos:
- repository_uri
 string - URL do repositório biométrico. Campo obrigatório.
- scenario
 string - identificador único do cenário, incluindo o modelo. Campo obrigatório. Deve seguir os critérios definidos em Cenário.
- user_ids
 uint64 - Lista de identificadores de usuário que devem ser verificados com os áudios fornecidos pela aplicação. Devem ser informados como valores decimais positivos de até 63-bits. Podem ser indicados de
1a128identificadores. Serão retornados resultados individuais para cada um destes usuários. Campo obrigatório.- media_type
 string - Formato do áudio fornecido. O valor padrão é
auto. Saiba mais sobre os formatos aceitos em Formatos de áudio- verification_threshold
 float - Limiar de aceitação. Se o score da verificação for maior ou igual a este limiar, a decisão será
ACCEPTED, caso contrário seráREJECTED. Caso não seja informado, a decisão permaneceUNDECIDED.- configuration
 BiometricConfig - Parâmetros de configuração da verificação.
Os demais boundaries devem conter, cada um deles, um áudio a ser utilizado na operação biométrica. São permitidos o envio de até 10 áudios, cada qual com tamanho de até 5MiB. O formato dos áudios depende do valor indicado em media_type, no primeiro boundary. Não é permitido misturar áudios PCM Linear com áudios contendo cabeçalho.
Em caso de erro na validação dos argumentos de entrada ou na verificação biométrica, o endpoint deve retornar HTTP 400 com um objeto ErrorInfo descrevendo o problema.
Resposta¶
A resposta é um objeto JSON contendo os seguintes campos:
- transaction_id
 uint64 - Identificador único da transação. Contém um valor decimal positivo de 63-bits.
- results
 ResultInfo - Lista de objetos contendo os resultados das verificações biométricas. Haverá uma entrada para cada usuário indicado na requisição.
- utterances
 UtteranceInfo - Lista de objetos contendo as informações sobre os enunciados nos áudios fornecidos. Este campo pode estar vazio ou ser omitido caso nenhum áudio tenha sido processado.
Exemplo¶
Chamada REST enviando o audio via multipart:
curl --request POST \
  --url http://10.245.15.2/bmt/rest/v3/verify \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: multipart/form-data' \
  --header 'User-Agent: insomnia/8.6.0' \
  --form 'verify={ "repository_uri": "http://service-repository-teste:9090",
  "scenario": "demo",
  "verification_threshold": 0.5,
  "user_ids": ["490499949419563008","490490457298569216"],
  "configuration":
                {
                        "logging_tag": "TESTES_LOG_TAG",
                        "max_constraint_behavior": "TRIM",
                        "min_speech": 1000,
                        "max_speech": 120000,
                        "end_silence": 500,
                        "min_utterances": 1,
                        "max_utterances": 20,
                        "end_silence": 1000
                }
        }' \
--form audio=@<path-to-file>/claudia_enroll.wav
Resultado JSON:
{
    "transaction_id": "490499983603138560",
    "results": [
        {
            "user_id": "490499949419563008",
            "score": 0.838265,
            "decision": "ACCEPTED",
            "detail": {
                "biometric_decision": "ACCEPTED",
                "antispoofing_decision": "ACCEPTED"
            }
        },
        {
            "user_id": "490490457298569216",
            "score": 0.838265,
            "decision": "REJECTED",
            "detail": {
                "biometric_decision": "ACCEPTED",
                "antispoofing_decision": "UNDECIDED"
            }
        }
    ],
    "utterances": [
        {
            "audio_counter": 0,
            "utterance_counter": 0,
            "utterance_duration": 3410,
            "ignored": false,
            "start_time": 770,
            "end_time": 4870
        },
        {
            "audio_counter": 0,
            "utterance_counter": 1,
            "utterance_duration": 3750,
            "ignored": false,
            "start_time": 7950,
            "end_time": 12440
        },
        {
            "audio_counter": 0,
            "utterance_counter": 2,
            "utterance_duration": 4430,
            "ignored": false,
            "start_time": 15340,
            "end_time": 20480
        },
        {
            "audio_counter": 0,
            "utterance_counter": 3,
            "utterance_duration": 3580,
            "ignored": false,
            "start_time": 22340,
            "end_time": 26610
        },
        {
            "audio_counter": 0,
            "utterance_counter": 4,
            "utterance_duration": 4500,
            "ignored": false,
            "start_time": 28440,
            "end_time": 33340
        }
    ]
}