Exemplos com a API REST

Cadastro de voiceprint

Requisição enviando múltiplos arquivos de áudio:

 curl --request POST \
   url https://speechd.cpqd.com.br/bio/rest/v2/enroll \
   --header 'Authorization: Bearer <token>' \' \
   --header 'Content-Type: multipart/form-data' \
   --form 'enroll={
       "repository_uri": "https://speechd.cpqd.com.br/user",
       "id": "<voiceprint_id>"
       }' \
  --form audio=@<path-to-file>/audio1.wav

Exemplo de resposta:
{
  "transaction_id": "bmt-enroll-9dc21c7c-09ca-42b6-a283-847a753c6659",
  "voiceprint": {
    "id": "a7ed3408-2d7b-46ef-807f-2b30f2da606f",
    "adapted": false
  },
  "audio_info": [
    {
      "audio_duration": 119955,
      "speech_duration": 73425,
      "zeroed_removed": false,
      "dtmf_removed": false,
      "power": -21.889084415047883,
      "dc_level": 0.00021456846700536808,
      "clipping_rate": 0,
      "dynamic_range": [
        -0.3715332732614632,
        0.39319953718807443
      ],
      "effective_bits": 15,
      "effective_bandwidth": 4181.4,
      "amplitude_factor": 1.017295195362025,
      "lzc_rate": 0.0889537307211338,
      "active_lzc_rate": 0.010254272613588996,
      "active_clipping_rate": 0,
      "snr": 22.145335662468202,
      "rejected": false
    }
  ]
}

Verificação

Requisição:

curl --request POST \
  --url https://speechd.cpqd.com.br/bio/rest/v2/verify \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: multipart/form-data' \
  --form 'verify={
      "repository_uri": "https://speechd.cpqd.com.br/user",
      "min_verification_score": "0.5",

      "id": "<voiceprint_id>"
      }' \
   --form audio=@<path-to-file>/audio1.wav

Exemplo de Resposta:

{
  "transaction_id": "bmt-verify-703be44d-e63f-443f-8124-1e18a2174845",
  "voiceprint": [
    {
      "id": "c409358f-38f1-4389-8b58-78bd971a7487",
      "verification": {
        "score": 0.9834442734718323,
        "decision": "ACCEPTED"
      }
    }
  ],
  "audio_info": [
    {
      "audio_duration": 7691,
      "speech_duration": 7271,
      "zeroed_removed": false,
      "dtmf_removed": false,
      "power": -17.628903725058496,
      "dc_level": -0.0000349099313034973,
      "clipping_rate": 0,
      "dynamic_range": [
        -0.6654517077022912,
        0.8049605973607294
      ],
      "effective_bits": 16,
      "effective_bandwidth": 3734.0700414398307,
      "amplitude_factor": 0.4969187328069262,
      "lzc_rate": 0.009102730819245773,
      "active_lzc_rate": 0.009102730819245773,
      "active_clipping_rate": 0,
      "snr": 32.0740550380507,
      "rejected": false
    }
  ]
}

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://speechd.cpqd.com.br/bio/rest/v2/enroll \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: multipart/form-data; boundary=---011000010111000001101001' \
  --form 'enroll={
      "repository_uri": "https://speechd.cpqd.com.br/user",
      "id": "<voiceprint_id>"
      }' \
 --form audio=@<path-to-file>/audio1.wav

Exemplo de Resposta:

{
  "transaction_id": "bmt-enroll-a9a6b242-11c9-4a61-99cc-dbb91c04a71d",
  "voiceprint": {
    "id": "<voiceprint_id>",
    "adapted": true
  },
  "audio_info": [
    {
      "audio_duration": 7253,
      "speech_duration": 4360,
      "zeroed_removed": false,
      "dtmf_removed": false,
      "power": -20.966483141015924,
      "dc_level": 5.496035018598288e-8,
      "clipping_rate": 0,
      "dynamic_range": [
        -0.46653650931991925,
        0.671681820096872
      ],
      "effective_bits": 16,
      "effective_bandwidth": 8000,
      "amplitude_factor": 0.5955200632679187,
      "lzc_rate": 0,
      "active_lzc_rate": 0,
      "active_clipping_rate": 0,
      "snr": 41.49616696357043,
      "rejected": false
    }
  ]
}

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 DELETE \
  --url https://speechd.cpqd.com.br/user/rest/v2/user/<id>?lock_id=<id>' \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: multipart/form-data' \

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://speechd.cpqd.com.br/user/rest/v2/user/<voiceprint_id>/metainfo \
  --header 'Authorization: Bearer <token>' \

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://speechd.cpqd.com.br/user/rest/v2/user/<voiceprint_id>?lock_id=<lock_id> \
  --header 'Authorization: Bearer <token>' \
  --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://speechd.cpqd.com.br/user/rest/v2/user/<voiceprint_id>/audio
  --header 'Authorization: Bearer <token>' \

Resposta:

{
  "entries": [
    {
      "uuid": "3e6bbe0d-8051-466b-83b5-07cfd82a7ee6",
      "time": "2022-08-11T13:27:01.738764-03:00",
      "session_id": "e1806589-8a56-4b6e-9f62-94b62d2adaaf",
      "original_format": "audio/raw",
      "format": "pcm/16000/16/1",
      "operation": "enroll",
      "biometric_model": "bmt-a1-v1.0",
      "audio_info": {
        "audio_duration": 7253,
        "speech_duration": 4360,
        "zeroed_removed": false,
        "dtmf_removed": false,
        "power": -20.966483141015924,
        "dc_level": 5.496035018598288e-8,
        "clipping_rate": 0,
        "dynamic_range": [
          -0.46653650931991925,
          0.671681820096872
        ],
        "effective_bits": 16,
        "effective_bandwidth": 8000,
        "amplitude_factor": 0.5955200632679187,
        "lzc_rate": 0,
        "active_lzc_rate": 0,
        "active_clipping_rate": 0,
        "snr": 41.49616696357043
      }
    }
  ],
  "count": 1
}

Retorna o estado do bloqueio criado para o usuário identificado por id

A requisição a seguir permite obter o estado do bloqueio criado para o usuário identificado por id.

curl --request GET \
  --url https://speechd.cpqd.com.br/user/rest/v2/user/<voiceprint_id>/lock \
  --header 'Authorization: Bearer <token> \
  --header 'Content-Type: multipart/form-data'

Resposta:

{
  "write": true,
  "lock_id": <id>
}

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://speechd.cpqd.com.br/user/rest/v2/user/<voiceprint_id>/audio/<uuid>/data
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: multipart/form-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://speechd.cpqd.com.br/user/rest/v2/user/<voiceprint_id>/audio/<uuid>
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: multipart/form-data'

Resposta: The audio was successfully deleted.