POST rest/v3/enroll¶
Efetua um cadastro biométrico com um ou mais áudios do mesmo locutor.
Requisição¶
A requisição deve estar estruturada como multipart (Content-Type definido como multipart/form-data
). O primeiro boundary, denominado enroll, deve conter um objeto JSON (application/json) com os seguintes campos:
- repository_uri
string - URL do repositório biométrico.
- scenario
string - Identificador único do cenário, incluindo o modelo. Campo obrigatório. Deve seguir os critérios definidos em Cenário.
- user_id
uint64 - Identificador único de usuário. Deve ser informado para atualizar um voiceprint existente. Se fornecido, mas nenhum voiceprint existir no cenário indicado, um erro será retornado. Se omitido, um novo voiceprint será criado.
- media_type
string - Formato do áudio fornecido. O valor padrão é
auto
. Saiba mais sobre os formatos aceitos em Formatos de áudio- enrollment_threshold
float - Limiar de aceitação ao comparar os áudios fornecidos no cadastro. Se o score calculado durante o cadastro for maior ou igual a este limiar, o voiceprint do usuário será criado ou atualizado. Caso contrário a operação de cadastro resultará em erro. Se nenhum limiar for especificado, o cadastro sempre será efetuado
Para mais informações, consulte o campo
score
da resposta da requisição.- configuration
BiometricConfig - Parâmetros de configuração do cadastro.
Os demais boundaries devem conter, cada um deles, um áudio a ser utilizado na operação biométrica. A requisição pode conter até 10 áudios, cada qual com tamanho de até 5MiB. Se o limite for excedido, o endpoint deve retornar HTTP 400 com um objeto ErrorInfo descrevendo problema.
Em caso de erro na validação dos argumentos de entrada ou no cadastro biométrico, o endpoint deve retornar HTTP 400 com um objeto ErrorInfo descrevendo problema.
Não é permitido misturar áudios PCM Linear com áudios contendo cabeçalho.
Resposta¶
Refere-se ao resultado de um cadastro biométrico. 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.
- user_id
uint64 - Identificador único do usuário criado pelo serviço. Contém um valor decimal positivo de 63-bits. Se a operação foi de atualização, este identificador será igual ao informado no campo homônimo da requisição.
- user_status
string - Indica o estado de modificação do usuário. ModificationStatus
- voiceprint_status
string - Indica o estado de modificação do voiceprint. ModificationStatus
- score
float Score de cadastro, resultante da comparação entre os áudios fornecidos no cadastro. No caso de uma atualização, também considera o voiceprint anterior. Este valor pode ser utilizado para detectar casos onde áudios de diferentes locutores são fornecidos. Para mais informações, consulte o campo
enrollment_threshold
da requisição de cadastro.- utterances
UtteranceInfo Lista de objetos contendo as informações sobre cada enunciado processado.
- decision
string Refere-se a decisão do cadastro biométrico resultante da validação do
enrollment_threshold
fornecido e o score da verificação ocorrida entre os áudios fornecidos no cadastro. Se o limiar não foi informado ou ocorreu algum erro, será preenchido comUNDECIDED
.ACCEPTED - O score obtido na verificação é maior ou igual ao limiar e não foi detectada fraude.
REJECTED - O score obtido na verificação é menor que o limiar ou foi detectada fraude.
UNDECIDED - Não foi definido um limiar de aceitação ou ocorreu erro.
- detail
ResultDetail - Detalhes sobre os resultados parciais que compõem a decisão final.
Exemplo 1¶
Chamada REST enviando o audio via multipart:
curl --request POST \
--url http://10.245.15.2/bmt/rest/v3/enroll \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: multipart/form-data' \
--header 'User-Agent: insomnia/8.6.0' \
--form 'enroll={
"repository_uri": "http://service-repository-teste:9090",
"scenario": "demo",
"media_type": "auto",
"enrollment_threshold": 0.0,
"configuration": {
"max_constraint_behavior": "trim",
"min_speech": 1000,
"max_speech": 120000,
"min_utterances": 1,
"max_utterances": 20,
"end_silence": 200,
"logging_tag": "exemplo_ENROLL",
"account_tag": "ACCOUNT_exemplo_ENROLL"
}
}' \
--form audio=@<path-to-file>/claudia_enroll.wav
Exemplo de resposta - 1:
{
"transaction_id": "490490449149034496",
"user_id": "490490457298569216",
"user_status": false,
"voiceprint_status": false,
"score": 0.53105104,
"utterances": [
{
"audio_counter": 0,
"utterance_counter": 0,
"utterance_duration": 4520,
"ignored": false,
"start_time": 550,
"end_time": 5410
},
{
"audio_counter": 0,
"utterance_counter": 1,
"utterance_duration": 2390,
"ignored": false,
"start_time": 6980,
"end_time": 9400
},
{
"audio_counter": 0,
"utterance_counter": 2,
"utterance_duration": 2380,
"ignored": false,
"start_time": 9880,
"end_time": 12440
},
{
"audio_counter": 0,
"utterance_counter": 3,
"utterance_duration": 5170,
"ignored": false,
"start_time": 16120,
"end_time": 21860
},
{
"audio_counter": 0,
"utterance_counter": 4,
"utterance_duration": 3440,
"ignored": false,
"start_time": 23570,
"end_time": 27010
},
{
"audio_counter": 0,
"utterance_counter": 5,
"utterance_duration": 4080,
"ignored": false,
"start_time": 27590,
"end_time": 34180
},
{
"audio_counter": 0,
"utterance_counter": 6,
"utterance_duration": 2790,
"ignored": false,
"start_time": 34900,
"end_time": 38020
}
],
"decision": "ACCEPTED"
}