Métodos

Esta seção detalha os métodos da API REST do Speech Server para o recurso de reconhecimento de fala (ASR), que sofreram alterações com a adição de parâmetros para uso de novas funcionalidades. Para verificar todos os detalhes da API, consulte a documentação do CPQD Reconhecimento de Fala.

RECOGNIZE

POST /v2/recognize

HTTP Headers (adicionais)

Infer-age-enabled

(Opcional) Habilita a classificação da idade do usuário. Valores válidos:

  • true

  • false (padrão)

Infer-gender-enabled

(Opcional) Habilita a classificação do gênero do usuário. Valores válidos:

  • true

  • false (padrão)

Infer-emotion-enabled

(Opcional) Habilita a classificação do tom emocional do usuário. Valores válidos:

  • true

  • false (padrão)

Content-Type

Indica o formato da mídia (áudio) a ser enviado. Valores: application/octet-stream – arquivo codificado num formato suportado audio/wav audio/raw – áudio PCM Linear sem cabeçalho

loggingTag

(Opcional) quando presente deve ser inserido nos logs para facilitar o rastreio de requisições.

license.manager.accountTag

(Opcional) define uma tag para geração de bilhetes multiusuário

Se os headers acima estiverem setados, os respectivos serviços serão acionados durante o reconhecimento de fala. A resposta dos serviços será combinada à resposta do ASR.

Resultado (HTTP status = 200)

Se a requisição HTTP retorna status code “200”, o corpo da resposta possui o resultado do reconhecimento com campos adicionais. Os campos adicionais são:

Campo

Descrição

Tipo do campo

age_scores:

Dicionário que contém o tipo de evento, a idade estipulada, a probabilidade por faixa etária e um índice de confiança.

{
    event:  <string>,
    age:    <int>,
    p:      <dict>
    {
        <0-10>: <float>,
        <10-20>: <float>,
        <20-30>: <float>,
        <30-40>: <float>,
        <40-50>: <float>,
        <50-60>: <float>,
        <60-70>: <float>,
        <70-80>: <float>,
        <80-90>: <float>,
        <90-100>: <float>
    },
    confidence: <string>
}

gender_scores:

Dicionário que contém o tipo de evento, a probabilidade e o gênero.

{
    event:  <string>,
    p:      <array[float]>,
    gender: <string>
}

emotion_scores:

Dicionário que contém a probabilidade e o tipo de emoção em um formato <K,V>.

{
    event:  <string>,
    emotion: <string>,
    group: <string>,
    p: <dict>
    {
        <enojado>: <float>,
        <frustrado>: <float>,
        <triste>: <float>,
        <ansioso>: <float>,
        <entusiasmado>: <float>,
        <feliz>: <float>,
        <surpreso>: <float>,
        <amedrontado>: <float>,
        <neutro>: <float>,
        <irritado>: <float>

    },
    p_groups: <dict>
    {
        <negativo_desativado>: <float>,
        <positivo>: <float>,
        <neutro>: <float>,
        <negativo_ativado>: <float>
    }
}

Exemplos

Chamada REST passando o modelo da língua via parameters de query:

curl --request POST \
--url https://speechd.cpqd.com.br/asr/rest/v2/recognize \
--header 'Authorization: <token>
--header 'Content-Type: application/octet-stream' \
--header 'Infer-age-enabled: true' \
--header 'Infer-emotion-enabled: true' \
--header 'Infer-gender-enabled: true' \
--header 'license.manager.accountTag: <valorA>' \
--header 'loggingTag: <valorA>' \
--data 'audio=@<path-to-file>/audio1.wav

Chamada REST passando o modelo da língua e audio via multipart:

curl -X POST \
--url https://speechd.cpqd.com.br/asr/rest/v2/recognize \
--header 'Authorization: <token>
--header 'accept: application/json' \
--header 'infer-age-enabled: true' \
--header 'infer-gender-enabled: true' \
--header 'infer-emotion-enabled: true' \
--header "decoder.maxSentences: 2" \
--header 'decoder.continuousMode: true' \
--form 'audio=@"/pizza-veg-8k.wav"' \
--form 'lm=@"/pizza.gram"'

Resultado:

[
  {
    "alternatives": [
      {
        "text": "boa noite",
        "words": [
          {
            "text": "boa",
            "score": 100,
            "start_time": 1.31,
            "end_time": 1.64
          },
          {
            "text": "noite",
            "score": 100,
            "start_time": 1.64,
            "end_time": 2.1499999
          }
        ],
        "score": 100,
        "lm": "builtin:slm/general"
      }
    ],
    "segment_index": 0,
    "last_segment": true,
    "final_result": true,
    "start_time": 1.16,
    "end_time": 2.23,
    "result_status": "RECOGNIZED"
  },
  {
    "age_scores": {
      "event": "AGE RESULT",
      "age": 46,
      "p": {
        "0-10": 6.418202899121052e-07,
        "10-20": 0.015974009871477613,
        "20-30": 0.04174115835109025,
        "30-40": 0.07696848183742766,
        "40-50": 0.10564251137743308,
        "50-60": 0.7548041620187447,
        "60-70": 0.004869034450940512,
        "70-80": 2.113791160785148e-10,
        "80-90": 5.957488708518843e-11,
        "90-100": 1.6421073156355875e-12
      },
      "confidence": "mid"
    }
  },
  {
    "gender_scores": {
      "event": "GENDER RESULT",
      "p": [
        0.034807813443786806,
        0.9651921865562132
      ],
      "gender": "F"
    }
  },
  {
    "emotion_scores": {
      "event": "EMOTION RESULT",
      "emotion": "irritado",
      "p": {
        "enojado": 0.04954051971435547,
        "frustrado": 0.015936316922307014,
        "triste": 0.011620878241956234,
        "ansioso": 0.05386947840452194,
        "entusiasmado": 0.18894456326961517,
        "feliz": 0.019370414316654205,
        "surpreso": 0.02057667449116707,
        "amedrontado": 0.016010118648409843,
        "neutro": 0.10917621850967407,
        "irritado": 0.5149547457695007
      },
      "p_groups": {
        "negativo_desativado": 0.07709771487861872,
        "positivo": 0.2827611304819584,
        "neutro": 0.12518633715808392,
        "negativo_ativado": 0.5149547457695007
      }
    }
  }
]

Chamada REST com resultado XML:

curl --request POST \
--url https://speechd.cpqd.com.br/asr/rest/v2/recognize \
--header 'Authorization: <token>
--header 'Content-Type: application/octet-stream' \
--header 'Infer-age-enabled: true' \
--header 'Infer-emotion-enabled: true' \
--header 'Infer-gender-enabled: true' \
--header 'license.manager.accountTag: <valorA>' \
--header 'loggingTag: <valorA>' \
--data 'audio=@<path-to-file>/audio1.wav

Resultado:

<?xml version="1.0" encoding="UTF-8" ?>
<root>
  <row>
    <alternatives>
      <text>boa noite</text>
      <words>
        <text>boa</text>
        <score>100</score>
        <start_time>1.31</start_time>
        <end_time>1.64</end_time>
      </words>
      <words>
        <text>noite</text>
        <score>100</score>
        <start_time>1.64</start_time>
        <end_time>2.1499999</end_time>
      </words>
      <score>100</score>
      <lm>builtin:slm/general</lm>
    </alternatives>
    <segment_index>0</segment_index>
    <last_segment>true</last_segment>
    <final_result>true</final_result>
    <start_time>1.16</start_time>
    <end_time>2.23</end_time>
    <result_status>RECOGNIZED</result_status>
  </row>
  <row>
    <age_scores>
      <event>AGE RESULT</event>
      <age>46</age>
      <p>
        <0-10>6.418034716483139e-7</0-10>
        <10-20>0.01597406112128007</10-20>
        <20-30>0.04174127593512805</20-30>
        <30-40>0.07696772756802672</30-40>
        <40-50>0.10564146609203325</40-50>
        <50-60>0.7548058434682504</50-60>
        <60-70>0.004868983739218365</60-70>
        <70-80>2.1137580010615486e-10</70-80>
        <80-90>5.957360086676001e-11</80-90>
        <90-100>1.6421091518404713e-12</90-100>
      </p>
      <confidence>mid</confidence>
    </age_scores>
  </row>
  <row>
    <gender_scores>
      <event>GENDER RESULT</event>
      <p>0.03480776210803915</p>
      <p>0.9651922378919608</p>
      <gender>F</gender>
    </gender_scores>
  </row>
  <row>
    <emotion_scores>
      <event>EMOTION RESULT</event>
      <emotion>irritado</emotion>
      <group>negativo_ativado</group>
      <p>
        <enojado>0.04954055696725845</enojado>
        <frustrado>0.01593632809817791</frustrado>
        <triste>0.011620882898569107</triste>
        <ansioso>0.05386950448155403</ansioso>
        <entusiasmado>0.18894460797309875</entusiasmado>
        <feliz>0.0193704254925251</feliz>
        <surpreso>0.02057669498026371</surpreso>
        <amedrontado>0.01601012982428074</amedrontado>
        <neutro>0.10917627066373825</neutro>
        <irritado>0.5149546265602112</irritado>
      </p>
      <p_groups>
        <negativo_desativado>0.07709776796400547</negativo_desativado>
        <positivo>0.2827612329274416</positivo>
        <neutro>0.125186400488019</neutro>
        <negativo_ativado>0.5149546265602112</negativo_ativado>
      </p_groups>
    </emotion_scores>
  </row>
</root>