Exemplos com a API REST¶
Cadastro de voiceprint¶
Requisição enviando múltiplos arquivos de áudio:
curl --request POST \
  --url https://<speech_server>/rest/v2/enroll \
  --header 'Content-Type: multipart/form-data; boundary=---011000010111000001101001' \
  --form 'enroll={
      "repository_uri": "https://<repository>",
      "id": "<voiceprint_id>"
      }' \
 --form audio=@<path-to-file>/audio1.wav \
 --form audio=@<path-to-file>/audio2.wav \
 --form audio=@<path-to-file>/audio3.wav
Resposta:
{
  "transaction_id": "bmt-enroll-53fee1e0-c123-4844-8a04-a897dce73095",
  "voiceprint": {
      "id": "<voiceprint_id>",
      "adapted": false
  },
  "audio_info": [
      {
          "audio_duration": 7253,
          "speech_duration": 4910
      },
      {
          "audio_duration": 4260,
          "speech_duration": 4130
      },
      {
          "audio_duration": 7253,
          "speech_duration": 4910
      }
  ]
}
Verificação¶
Requisição:
curl --request POST \
  --url https://<speech_server>/rest/v2/verify \
  --header 'Content-Type: multipart/form-data; boundary=---011000010111000001101001' \
  --form 'verify={
      "repository_uri": "https:<repository>",
      "min_verification_score": "0.5",
      "min_verification_audio": "1000",
      "id": "<voiceprint_id>"
      }' \
   --form audio=@<path-to-file>/audio1.wav \
   --form audio=@<path-to-file>/audio2.wav \
   --form audio=@<path-to-file>/audio3.wav
Resposta:
{
  "transaction_id": "bmt-verify-6d6b8a4a-93d3-40e9-9fbe-da9f1c61e64f",
  "voiceprint": [
      {
          "id": "<voiceprint_id>",
          "verification": {
              "score": 0.6369487047195435,
              "decision": "ACCEPTED"
          },
          "error": null
      }
  ],
  "audio_info": [
      {
          "audio_duration": 2859,
          "speech_duration": 2790
      },
      {
          "audio_duration": 3640,
          "speech_duration": 3580
      },
      {
          "audio_duration": 7548,
          "speech_duration": 5370
      }
  ]
}
Atualização de voiceprint¶
Um voiceprint pode ser atualizado com novos arquivos de áudio. A requisição é a mesma do momento da criação, mas internamente, o voiceprint existente será atualizado com os novos áudios. Para treinar um voiceprint do zero, sem considerar os áudios iniciais, é necessário remover o voiceprint e criá-lo novamente.
curl --request POST \
  --url https://<speech_server>/rest/v2/enroll \
  --header 'Content-Type: multipart/form-data; boundary=---011000010111000001101001' \
  --form 'enroll={
      "repository_uri": "https://<repository>",
      "id": "<voiceprint_id>"
      }' \
 --form audio=@<path-to-file>/audio1.wav \
 --form audio=@<path-to-file>/audio2.wav \
 --form audio=@<path-to-file>/audio3.wav
Resposta:
{
  "transaction_id": "bmt-enroll-b3b00b6b-03ca-4a71-82c7-afb5f91730b3",
  "voiceprint": {
      "id": "<voiceprint_id>",
      "adapted": true
  },
  "audio_info": [
      {
          "audio_duration": 7253,
          "speech_duration": 4910
      },
      {
          "audio_duration": 4260,
          "speech_duration": 4130
      },
      {
          "audio_duration": 7253,
          "speech_duration": 4910
      }
  ]
}
Remoção de voiceprint¶
Um voiceprint pode ser removido diretamente no repositório. Todos os dados relacionados ao voiceprint são removidos. Para remover o voiceprint é necessário inicialmente obter o bloqueio do registro, para evitar concorrência com outros processos de escrita.
Para obter o bloqueio do registro, execute o comando e recupere o valor do identificador do bloqueio.
curl --request PUT \
  --url https://<repository>/restv2/user/<voiceprint_id>/lock
Utilize o identificador no método na sequência.
curl --request DELETE \
  --url https://<repository>/rest/v2/user/<voiceprint_id>?lock_id=<lock_id>'
Consulta de metadados do voiceprint¶
A aplicação pode definir um conjunto de metadados durante a criação de um voiceprint. A requisição a seguir permite recuperar as informações.
curl --request GET \
  --url https://<repository>/rest/v2/user/<voiceprint_id>/metainfo
Resposta:
{
  "<somedata_1>": "<a_value>",
  "<somedata_2>": "<b_value>"
}
Atualização de metadados do voiceprint¶
Os metadados de um voiceprint podem ser atualizados. Para alterar o valor de um metadado basta enviar o novo valor. Para remover o metadado, o valor informado deve ser nulo. Antes de alterar um metadado, é necessário bloquear o registro do voiceprint para evitar inconsistências.
Utilize o valor do identificador do bloqueio (lock_id) na operação de atualização dos metadados. No exemplo abaixo, o dado1 será removido e o dado2 alterado:
curl --request PUT \
  --url https://<repository>/rest/v2/user/<voiceprint_id>?lock_id=<lock_id> \
  --header "Content-Type: application/json" \
  --data '{"data1":null, "data2": "new_value"}'
Consulta de detalhes sobre os áudios¶
A requisição a seguir permite recuperar as informações sobre o histórico dos áudios armazenados durante as operações de cadastro e verificação. A resposta indica a lista de áudios, permitindo o download a partir do identificador de cada arquivo.
curl --request GET \
  --url https://<repository>/rest/v2/user/<voiceprint_id>/audio
Resposta:
{
  "entries":[
    {
      "uuid":"f40ca0fd-2f37-4a99-9d79-ef15c8d058cd",
      "session_id":"4a8f01b8-78be-42ab-8641-c3143139d7cb",
      "format":"pcm/16000/16/1",
      "original":true,
      "time":"2021-10-07T13:55:13.777457-03:00",
      "operation":"enroll",
      "score":0.0,
      "tags":null
    },
    {
      "uuid":"5a3b8a33-47be-4df2-ab15-668e5a77dce9",
      "session_id":"4a8f01b8-78be-42ab-8641-c3143139d7cb",
      "format":"pcm/16000/16/1",
      "original":true,
      "time":"2021-10-07T14:42:44.042919-03:00",
      "operation":"verify",
      "score":0.7048876881599426,
      "tags":null
    }
  ],
  "Count":2
}
Download de arquivo de áudio¶
Com base no identificador uuid do arquivo, a requisição abaixo permite baixar o mesmo.
curl --request GET \
  --url https://<repository>/rest/v2/user/<voiceprint_id>/audio/<uuid>/data
Resposta: o download do arquivo deve iniciar.
Remoção de arquivo de áudio¶
Com base no identificador uuid do arquivo, a requisição abaixo permite apagar do histórico.
curl --request DELETE \
  --url https://<repository>/rest/v2/user/<voiceprint_id>/audio/<uuid>