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
1
a128
identificadores. 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
}
]
}