Métodos

RECOGNIZE

Realiza o reconhecimento de fala de um áudio enviado para o serviço. O conteúdo do áudio deve ser enviado no corpo da mensagem HTTP. O reconhecimento é realizado de forma síncrona e o resultado vem na resposta HTTP.

Requisição

POST /asr-server/rest/recognize/{audio.rate}

HTTP Headers

Accept

(Opcional) Tipo de conteúdo do resultado do reconhecimento. Valores válidos:

  • application/xml
  • application/json

Valor padrão: application/json.

User-Agent Identificação do dispositivo e/ou aplicação que está gerando o áudio. Útil para fins de log de aplicação.
Content-Length Indica o número de bytes do conteúdo
Content-Type

Indica o formato do áudio enviado. Formatos válidos:

  • audio/wav – arquivos no formato WAV
  • audio/raw – áudio puro sem cabeçalho
  • application/octet-stream – áudio puro sem cabeçalho
  • application/x-www-form-urlencode

O reconhecimento de fala pode ser configurado para se adaptar às características específicas da aplicação. A configuração é feita através de parâmetros definidos como headers da requisição HTTP. A lista dos parâmetros é encontrada em Parâmetros de reconhecimento

Parâmetros da requisição

audio.rate

indica a taxa do áudio que se está enviando. Permite que o serviço utilize o modelo acústico adequado para o reconhecimento. Valores possíveis:

  • 8k - áudio de 8kHz
  • 16k - áudio de 16kHz
lm

URI do modelo de língua. Caso não seja informada, será retornado um erro. A URI deve possuir um dos prefixos abaixo:

Resultado

O resultado do reconhecimento é um objeto que possui a seguinte estrutura:

recognition_result

  • alternatives
  • result_status

alternatives: lista com os resultados prováveis do reconhecimento

  • index: índice da alternativa de resultado
  • text: texto reconhecimento
  • score: pontuação ou índice de confiança
  • interpretations: lista com os resultados da interpretação, conforme definido na gramática. Em caso de modelo de língua de fala livre, essa lista é vazia.

result_status: estado do reconhecimento. Pode ser um dos valores abaixo:

result_status Descrição
RECOGNIZED reconhecimento realizado com sucesso
NO_MATCH reconhecimento realizado com sucesso mas sem correspondência na gramática
NO_INPUT_TIMEOUT o reconhecimento não detectou o início de fala antes do vencimento do temporizador
EARLY_SPEECH o áudio recebido não possui trecho de silêncio inicial (a fala começou antes do início do reconhecimento)
MAX_SPEECH o servidor recebeu uma quantidade de áudio maior do que a capacidade de processamento
RECOGNITION_TIMEOUT não foi possível gerar um resultado final antes do vencimento do temporizador
NO_SPEECH não foi possível detectar fala no áudio enviado
CANCELED o reconhecimento foi cancelado
FAILURE falha não específica no servidor

Exemplos

Chamada REST:

curl -X POST \
  --user username:passwd \
  --header "Content-Type: audio/wav" \
  --data-binary '@bank-transfira-8k.wav' \
  https://speech.cpqd.com.br/asr/rest/v1/recognize/8k?lm=builtin:grammar/samples/bank

Resultado JSON:

{
  "alternatives":[
    {
      "text":"transfira seis mil novecentos e trinta e sete reais para a conta corrente",
      "interpretations":[{
        "action":"TRANSFERENCIA",
        "money":6937,
        "to_account_type":"CONTA_CORRENTE"
      }],
      "words":[
        {"text":"transfira","score":100,"start_time":2.26,"end_time":3.0099998},
        {"text":"seis","score":100,"start_time":3.0099998,"end_time":3.37},
        {"text":"mil","score":100,"start_time":3.37,"end_time":3.61},
        {"text":"novecentos","score":100,"start_time":3.61,"end_time":4.33},
        {"text":"e","score":100,"start_time":4.33,"end_time":4.39},
        {"text":"trinta","score":100,"start_time":4.39,"end_time":4.7499404},
        {"text":"e","score":99,"start_time":4.7499404,"end_time":4.810059},
        {"text":"sete","score":100,"start_time":4.810059,"end_time":5.2},
        {"text":"reais","score":100,"start_time":5.2,"end_time":5.709542},
        {"text":"para","score":90,"start_time":5.71106,"end_time":5.988702},
        {"text":"a","score":45,"start_time":5.990944,"end_time":6.0397873},
        {"text":"conta","score":100,"start_time":6.0425696,"end_time":6.4599996},
        {"text":"corrente","score":100,"start_time":6.4599996,"end_time":7.1797533}
      ],
      "score":95,
      "lm":"file:///opt/cpqd/asr/tools/grammar/samples/ptbr/bank.gram",
      "interpretation_scores":[94]
    },
    {
      "text":"transfira seis mil novecentos e trinta e sete reais para conta corrente",
      "interpretations":[{
        "action":"TRANSFERENCIA",
        "money":6937,
        "to_account_type":"CONTA_CORRENTE"
      }],
      "words":[
        {"text":"transfira","score":100,"start_time":2.26,"end_time":3.0099998},
        {"text":"seis","score":100,"start_time":3.0099998,"end_time":3.37},
        {"text":"mil","score":100,"start_time":3.37,"end_time":3.61},
        {"text":"novecentos","score":100,"start_time":3.61,"end_time":4.33},
        {"text":"e","score":100,"start_time":4.33,"end_time":4.39},
        {"text":"trinta","score":100,"start_time":4.39,"end_time":4.7499404},
        {"text":"e","score":99,"start_time":4.7499404,"end_time":4.810059},
        {"text":"sete","score":100,"start_time":4.810059,"end_time":5.2},
        {"text":"reais","score":100,"start_time":5.2,"end_time":5.709542},
        {"text":"para","score":90,"start_time":5.7138157,"end_time":6.011838},
        {"text":"conta","score":100,"start_time":6.0425696,"end_time":6.4599996},
        {"text":"corrente","score":100,"start_time":6.4599996,"end_time":7.1797533}
      ],
      "score":95,
      "lm":"file:///opt/cpqd/asr/tools/grammar/samples/ptbr/bank.gram",
      "interpretation_scores":[99]
    },
    {
      "text":"transfira seis mil novecentos e trinta e sete reais pra conta corrente",
      "interpretations":[{
        "action":"TRANSFERENCIA",
        "money":6937,
        "to_account_type":"CONTA_CORRENTE"
      }],
      "words":[
        {"text":"transfira","score":100,"start_time":2.26,"end_time":3.0099998},
        {"text":"seis","score":100,"start_time":3.0099998,"end_time":3.37},
        {"text":"mil","score":100,"start_time":3.37,"end_time":3.61},
        {"text":"novecentos","score":100,"start_time":3.61,"end_time":4.33},
        {"text":"e","score":100,"start_time":4.33,"end_time":4.39},
        {"text":"trinta","score":100,"start_time":4.39,"end_time":4.7499404},
        {"text":"e","score":99,"start_time":4.7499404,"end_time":4.810059},
        {"text":"sete","score":100,"start_time":4.810059,"end_time":5.2},
        {"text":"reais","score":100,"start_time":5.2,"end_time":5.709542},
        {"text":"pra","score":9,"start_time":5.7180476,"end_time":6.012299},
        {"text":"conta","score":100,"start_time":6.0425696,"end_time":6.4599996},
        {"text":"corrente","score":100,"start_time":6.4599996,"end_time":7.1797533}
      ],
      "score":92,
      "lm":"file:///opt/cpqd/asr/tools/grammar/samples/ptbr/bank.gram",
      "interpretation_scores":[92]}
  ],
  "segment_index":0,
  "last_segment":true,
  "final_result":true,
  "start_time":1.93,
  "end_time":7.38,
  "result_status":"RECOGNIZED"
}

Resultado XML:

<?xml version="1.0" encoding="UTF-8"?>
<recognition_result>
  <segment_index>0</segment_index>
  <last_segment>true</last_segment>
  <final_result>true</final_result>
  <start_time>1.93</start_time>
  <end_time>7.38</end_time>
  <result_status>RECOGNIZED</result_status>
  <alternatives>
    <alternative>
      <text>transfira seis mil novecentos e trinta e sete reais para a conta corrente</text>
      <score>95</score>
      <lm>file:///opt/cpqd/asr/tools/grammar/samples/ptbr/bank.gram</lm>
      <interpretations>
        <interpretation>
          <action>TRANSFERENCIA</action>
          <money>6937</money>
          <to_account_type>CONTA_CORRENTE</to_account_type>
        </interpretation>
      </interpretations>
      <interpretation_scores>
        <interpretation_score>94</interpretation_score>
      </interpretation_scores>
      <words>
        <word><text>transfira</text><score>100</score><start_time>2.26</start_time><end_time>3.0099998</end_time></word>
        <word><text>seis</text><score>100</score><start_time>3.0099998</start_time><end_time>3.37</end_time></word>
        <word><text>mil</text><score>100</score><start_time>3.37</start_time><end_time>3.61</end_time></word>
        <word><text>novecentos</text><score>100</score><start_time>3.61</start_time><end_time>4.33</end_time></word>
        <word><text>e</text><score>100</score><start_time>4.33</start_time><end_time>4.39</end_time></word>
        <word><text>trinta</text><score>100</score><start_time>4.39</start_time><end_time>4.749938</end_time></word>
        <word><text>e</text><score>99</score><start_time>4.749938</start_time><end_time>4.8100615</end_time></word>
        <word><text>sete</text><score>100</score><start_time>4.8100615</start_time><end_time>5.2</end_time></word>
        <word><text>reais</text><score>100</score><start_time>5.2</start_time><end_time>5.7095466</end_time></word>
        <word><text>para</text><score>90</score><start_time>5.711042</start_time><end_time>5.9897656</end_time></word>
        <word><text>a</text><score>45</score><start_time>5.991897</start_time><end_time>6.039843</end_time></word>
        <word><text>conta</text><score>100</score><start_time>6.0425854</start_time><end_time>6.4599996</end_time></word>
        <word><text>corrente</text><score>100</score><start_time>6.4599996</start_time><end_time>7.179733</end_time></word>
      </words>
    </alternative>
    <alternative>
      <text>transfira seis mil novecentos e trinta e sete reais para conta corrente</text>
      <score>95</score>
      <lm>file:///opt/cpqd/asr/tools/grammar/samples/ptbr/bank.gram</lm>
      <interpretations>
        <interpretation>
          <action>TRANSFERENCIA</action>
          <money>6937</money>
          <to_account_type>CONTA_CORRENTE</to_account_type>
        </interpretation>
      </interpretations>
      <interpretation_scores>
        <interpretation_score>99</interpretation_score>
      </interpretation_scores>
      <words>
        <word><text>transfira</text><score>100</score><start_time>2.26</start_time><end_time>3.0099998</end_time></word>
        <word><text>seis</text><score>100</score><start_time>3.0099998</start_time><end_time>3.37</end_time></word>
        <word><text>mil</text><score>100</score><start_time>3.37</start_time><end_time>3.61</end_time></word>
        <word><text>novecentos</text><score>100</score><start_time>3.61</start_time><end_time>4.33</end_time></word>
        <word><text>e</text><score>100</score><start_time>4.33</start_time><end_time>4.39</end_time></word>
        <word><text>trinta</text><score>100</score><start_time>4.39</start_time><end_time>4.749938</end_time></word>
        <word><text>e</text><score>99</score><start_time>4.749938</start_time><end_time>4.8100615</end_time></word>
        <word><text>sete</text><score>100</score><start_time>4.8100615</start_time><end_time>5.2</end_time></word>
        <word><text>reais</text><score>100</score><start_time>5.2</start_time><end_time>5.7095466</end_time></word>
        <word><text>para</text><score>91</score><start_time>5.713287</start_time><end_time>6.0115943</end_time></word>
        <word><text>conta</text><score>100</score><start_time>6.0425854</start_time><end_time>6.4599996</end_time></word>
        <word><text>corrente</text><score>100</score><start_time>6.4599996</start_time><end_time>7.179733</end_time></word>
      </words>
    </alternative>
    <alternative>
      <text>transfira seis mil novecentos e trinta e sete reais pra conta corrente</text>
      <score>92</score>
      <lm>file:///opt/cpqd/asr/tools/grammar/samples/ptbr/bank.gram</lm>
      <interpretations>
        <interpretation>
          <action>TRANSFERENCIA</action>
          <money>6937</money>
          <to_account_type>CONTA_CORRENTE</to_account_type>
        </interpretation>
      </interpretations>
      <interpretation_scores>
        <interpretation_score>92</interpretation_score>
      </interpretation_scores>
      <words>
        <word><text>transfira</text><score>100</score><start_time>2.26</start_time><end_time>3.0099998</end_time></word>
        <word><text>seis</text><score>100</score><start_time>3.0099998</start_time><end_time>3.37</end_time></word>
        <word><text>mil</text><score>100</score><start_time>3.37</start_time><end_time>3.61</end_time></word>
        <word><text>novecentos</text><score>100</score><start_time>3.61</start_time><end_time>4.33</end_time></word>
        <word><text>e</text><score>100</score><start_time>4.33</start_time><end_time>4.39</end_time></word>
        <word><text>trinta</text><score>100</score><start_time>4.39</start_time><end_time>4.749938</end_time></word>
        <word><text>e</text><score>99</score><start_time>4.749938</start_time><end_time>4.8100615</end_time></word>
        <word><text>sete</text><score>100</score><start_time>4.8100615</start_time><end_time>5.2</end_time></word>
        <word><text>reais</text><score>100</score><start_time>5.2</start_time><end_time>5.7095466</end_time></word>
        <word><text>pra</text><score>8</score><start_time>5.7179365</start_time><end_time>6.0120983</end_time></word>
        <word><text>conta</text><score>100</score><start_time>6.0425854</start_time><end_time>6.4599996</end_time></word>
        <word><text>corrente</text><score>100</score><start_time>6.4599996</start_time><end_time>7.179733</end_time></word>
      </words>
    </alternative>
  </alternatives>
</recognition_result>

INTERPRET

Realiza a interpretação semântica de um texto fornecido pelo cliente, usando a gramática indicada, de forma similar a RECOGNIZE. O texto deve ser enviado no corpo da mensagem HTTP. O reconhecimento é realizado de forma síncrona e o resultado vem na resposta HTTP.

Requisição

POST /asr-server/rest/interpret

HTTP Headers

Accept

(Opcional) Tipo de conteúdo do resultado do reconhecimento. Valores válidos:

  • application/xml
  • application/json

Valor padrão: application/json.

User-Agent Identificação do dispositivo e/ou aplicação que está gerando o áudio. Útil para fins de log de aplicação.
Content-Length Indica o número de bytes do conteúdo
Content-Type

Indica o formato do áudio enviado. Formatos válidos:

  • text/plain – conteúdo de texto

Parâmetros da requisição

lm

URI do modelo de língua. Caso não seja informada, será retornado um erro. A URI deve possuir um dos prefixos abaixo:

Resultado

O resultado do reconhecimento é um objeto que possui a seguinte estrutura: