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>