Métodos¶
Nesta seção detalharemos os métodos existentes na API ASR REST.
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 e pode ser RAW (PCM Linear, amostras de 16 bits e taxa de amostragem de 8kHz ou 16kHz, de acordo com o Modelo Acústico (AM) instalado) ou codificado. Os formatos codificados suportados são: MP3, OPUS, VORBIS, PCM aLaw/uLaw, GSM, FLAC e WAV. O reconhecimento é realizado de forma síncrona e o resultado vem na resposta HTTP.
Requisição
POST /asr/rest/v3/recognize
HTTP Headers
Accept  | 
(Opcional) Tipo de conteúdo do resultado do reconhecimento. Valores válidos: 
  | 
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: 
  | 
Infer-age-enabled  | 
Para a utilização deste parâmetro e dos demais abaixo, é necessário a instalação dos classificadores. Veja mais em Instalação dos classificadores. (Opcional) Habilita a classificação da idade do usuário. Valores válidos: 
  | 
Infer-gender-enabled  | 
(Opcional) Habilita a classificação do gênero do usuário. Valores válidos: 
  | 
Infer-emotion-enabled  | 
(Opcional) Habilita a classificação do tom emocional do usuário. Valores válidos: 
  | 
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 completa dos parâmetros é mostrada na
seção Configuração. O exemplo a seguir, é suportado em ambiente On premise e mostra a configuração dos parâmetros
endpointer.levelThreshold e decoder.confidenceThreshold:
POST /asr/rest/v3/recognize?lm=builtin:slm/general HTTP/1.1
Host: 127.0.0.1:8025
User-Agent: curl/7.47.0
Accept: */*
Content-Type: audio/wav
endpointer.levelThreshold: 10
decoder.confidenceThreshold: 30
Content-Length: ...
[binary content]
Nota
O exemplo a seguir, é suportado em ambiente SaaS do CPQD e também em On premise e mostra a configuração dos parâmetros
endpointer-levelThreshold e decoder-confidenceThreshold. Note que ao invés de . (ponto) foi usado - (hífen).
POST /asr/rest/v3/recognize?lm=builtin:slm/general HTTP/1.1
Host: 127.0.0.1:8025
User-Agent: curl/7.47.0
Accept: */*
Content-Type: audio/wav
endpointer-levelThreshold: 10
decoder-confidenceThreshold: 30
Content-Length: ...
[binary content]
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 (HTTP status = 200)
Se a requisição HTTP retorna status code “200”, o corpo da resposta possui a estrutura abaixo. O formato da resposta pode ser definido através do header HTTP “Accept”, selecionando JSON (Accept: application/json) ou XML (Accept: application/xml). O formato padrão é JSON.
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
Resultado (HTTP status <> 200)
Se a requisição HTTP retorna erro, com status code diferente de “200”, a resposta possui a estrutura abaixo.
ErrorResponse
code: Código de erro (Códigos de erro).
message: Mensagem complementar que indica o motivo da falha.
Exemplos
Chamada REST com resultado JSON, compatível com ambiente On premise:
curl -X POST \
  --header "Content-Type: audio/wav" \
  --header "decoder.maxSentences: 1" \
  --data-binary '@/opt/cpqd/asr/samples/audio/ptbr/87431_8k.wav' \
  http://127.0.0.1:8025/asr/rest/v3/recognize?lm=builtin:grammar/digits
Chamada REST com resultado JSON, compatível com ambiente SaaS e On premise:
curl -X POST \
  --header "Content-Type: audio/wav" \
  --header "decoder-maxSentences: 1" \
  --data-binary '@/opt/cpqd/asr/samples/audio/ptbr/87431_8k.wav' \
  http://127.0.0.1:8025/asr/rest/v3/recognize?lm=builtin:grammar/digits
Resultado:
[{
  "alternatives": [{
    "text": "oito sete quatro três um",
    "interpretations": ["87431"],
    "words": [{
      "text": "oito",
      "score": 100,
      "start_time": 0.3901262,
      "end_time": 0.95921874
    }, {
      "text": "sete",
      "score": 100,
      "start_time": 0.99,
      "end_time": 1.7068747
    }, {
      "text": "quatro",
      "score": 100,
      "start_time": 1.74,
      "end_time": 2.28
    }, {
      "text": "três",
      "score": 100,
      "start_time": 2.2800765,
      "end_time": 2.8498626
    }, {
      "text": "um",
      "score": 100,
      "start_time": 2.9167604,
      "end_time": 3.2101758
    }],
    "score": 100,
    "lm": "builtin:grammar/digits",
    "interpretation_scores": [100]
  }],
  "segment_index": 0,
  "last_segment": true,
  "final_result": true,
  "start_time": 0.24,
  "end_time": 3.52,
  "result_status": "RECOGNIZED"
}]
Chamada REST com resultado XML, compatível com ambiente On premise:
curl -X POST \
  --header "Content-Type: audio/wav" \
  --header "Accept: application/xml" \
  --header "decoder.maxSentences: 1" \
  --data-binary '@/opt/cpqd/asr/samples/audio/ptbr/87431_8k.wav' \
  http://127.0.0.1:8025/asr/rest/v3/recognize?lm=builtin:grammar/digits
Chamada REST com resultado XML, compatível com ambiente SaaS e On premise:
curl -X POST \
  --header "Content-Type: audio/wav" \
  --header "Accept: application/xml" \
  --header "decoder-maxSentences: 1" \
  --data-binary '@/opt/cpqd/asr/samples/audio/ptbr/87431_8k.wav' \
  http://127.0.0.1:8025/asr/rest/v3/recognize?lm=builtin:grammar/digits
Resultado:
<ArrayList>
  <item>
    <segment_index>0</segment_index>
    <last_segment>true</last_segment>
    <final_result>true</final_result>
    <start_time>0.24</start_time>
    <end_time>3.52</end_time>
    <result_status>RECOGNIZED</result_status>
    <alternatives>
      <alternative>
        <text>oito sete quatro três um</text>
        <score>100</score>
        <lm>builtin:grammar/digits</lm>
        <interpretations>
          <interpretation>87431</interpretation>
        </interpretations>
        <interpretation_scores>
          <interpretation_score>100</interpretation_score>
        </interpretation_scores>
        <words>
          <word>
            <text>oito</text>
            <score>100</score>
            <start_time>0.3901258</start_time>
            <end_time>0.95921737</end_time>
          </word>
          <word>
            <text>sete</text>
            <score>100</score>
            <start_time>0.99</start_time>
            <end_time>1.7068772</end_time>
          </word>
          <word>
            <text>quatro</text>
            <score>100</score>
            <start_time>1.74</start_time>
            <end_time>2.28</end_time>
          </word>
          <word>
            <text>três</text>
            <score>100</score>
            <start_time>2.2800772</start_time>
            <end_time>2.8498623</end_time>
          </word>
          <word>
            <text>um</text>
            <score>100</score>
            <start_time>2.9167345</start_time>
            <end_time>3.210177</end_time>
          </word>
        </words>
      </alternative>
    </alternatives>
  </item>
</ArrayList>
Resultado com erro (JSON):
{
  "code":"ERR_LM_NOT_FOUND",
  "message":"Language Model not found: builtin:grammar/booh"
}
Resultado com erro (XML):
<ErrorResponse>
  <code>ERR_LM_NOT_FOUND</code>
  <message>Language Model not found: builtin:grammar/booh</message>
</ErrorResponse>
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/rest/v3/interpret
HTTP Headers
Accept  | 
(Opcional) Tipo de conteúdo do resultado do reconhecimento. Valores válidos: 
 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: 
  | 
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 mesma estrutura do “recognize” mas apenas alguns campos fazem sentido e devem ser usados:
recognition_result
alternatives
result_status
alternatives: lista com os resultados prováveis do reconhecimento
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
CANCELED
o reconhecimento foi cancelado
FAILURE
falha não específica no servidor
Exemplos
Chamada REST com resultado JSON:
curl -X POST \
  --header "Content-Type: text/plain" \
  --data 'oito sete quatro três um' \
  http://127.0.0.1:8025/asr/rest/v3/interpret?lm=builtin:grammar/digits
Resultado:
{
  "alternatives": [{
    "text": "oito sete quatro três um",
    "interpretations": ["87431"],
    "score": 100,
    "lm": "builtin:grammar/digits",
    "interpretation_scores": [100]
  }],
  "result_status": "RECOGNIZED"
}
Chamada REST com resultado XML:
curl -X POST \
  --header "Content-Type: application/xml"
  --data 'oito sete quatro três um' \
  http://127.0.0.1:8025/asr/rest/v3/interpret?lm=builtin:grammar/digits
Resultado:
<recognition_result>
  <result_status>RECOGNIZED</result_status>
  <alternatives>
    <alternative>
      <text>oito sete quatro três um</text>
      <score>100</score>
      <lm>builtin:grammar/digits</lm>
      <interpretations>
        <interpretation>87431</interpretation>
      </interpretations>
      <interpretation_scores>
        <interpretation_score>100</interpretation_score>
      </interpretation_scores>
    </alternative>
  </alternatives>
</recognition_result>