API WebSocket¶
Esta seção detalha a API WebSocket do Speech Server para o recurso de reconhecimento de fala (ASR). Ela é baseada na API do produto CPQD Reconhecimento de Fala, com parâmetros adicionais para uso de novas funcionalidades.
A seguir, são descritas as mensagens da API original que sofreram alterações com acréscimo de novos parâmetros. Para verificar todos os detalhes da API, consulte a documentação do CPQD Reconhecimento de Fala.
Acesso¶
A API WebSocket pode ser acessada pela nuvem do CPQD e em instalações locais, se aplicável. Abaixo temos as URLs de acesso:
Tipo de Acesso |
URL |
---|---|
Nuvem |
https://speechd.cpqd.com.br/asr/ws/v3/recognize |
Local |
http://{ip_speechd_server}:8000/asr/ws/v3/recognize |
Onde {ip_speech_server}
deve ser substituído pelo IP da máquina onde está
instalado o Speech Server.
Aviso
O acesso à API hospedada em nuvem é restrita e requer credencial de acesso. Entre em contato com o CPQD para maiores informações.
Protocolo¶
A API WebSocket utiliza um conjunto de mensagens para acionar as funções do servidor. A conexão entre cliente e servidor mantém um socket bi-direcional persistente para troca de mensagens entre os dois endpoints.
A versão da API WebSocket é a 2.4. Ela é baseada na versão 2.3 com alterações nas seguintes mensagens.
Mensagem |
Descrição |
---|---|
CREATE SESSION |
Acrescentado header para compartilhamento de dados entre sessões de recursos diversos do MRCP. |
START RECOGNITION |
Novo header para armazenamento do áudio do reconhecimento no buffer de verificação biométrica |
SET PARAMETERS |
Novos headers para acionamento de classificadores de voz (gênero, idade e emoção). |
GET PARAMETERS |
Novos headers para acionamento de classificadores de voz. |
Mensagem |
Descrição |
---|---|
RECOGNITION RESULT |
Novos objetos de resultado dos classificadores de voz. |
Mensagens¶
CREATE SESSION
Os headers abaixo foram acrescentados em relação à mensagem original.
Headers:
Channel-Identifier |
(Opcional) Identificação da sessão no MRCP para compartilhamento de recursos |
Exemplo:
ASR 2.4 CREATE_SESSION
Channel-Identifier: 698dc19d489c4e4db73e28a713eab07b
SET PARAMETERS
Os headers abaixo foram acrescentados em relação à mensagem original.
Infer-age-enabled |
(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:
|
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.
GET PARAMETERS
Headers: Ver headers da mensagem SET PARAMETERS
START RECOGNITION
Os headers abaixo foram acrescentados em relação à mensagem original.
Headers:
Infer-age-enabled |
(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 gênero do usuário. Valores válidos:
|
Verify-Buffer-Utterance |
(Opcional) Indica se o áudio deve ser armazenado no buffer de verificação biométrica. Valores:
|
Media-Type |
Indica o formato da mídia (áudio) a ser enviado.
|
Se o header Verify-Buffer-Utterance for definido como true, o áudio será gravado no buffer de verificação. A identificação do buffer de verificação é feita pelo header Channel-Identifier (ver mensagem CREATE SESSION).
Exemplos:
ASR 2.4 START_RECOGNITION
Content-Length: 20
Content-Type: text/uri-list
Media-Type: audio/wav
builtin:slm/general
RECOGNITION RESULT
Mensagem que contém o resultado do reconhecimento. Ela conter o resultado da classificação de gênero, idade e emoção caso estejam disponíveis. Os campos abaixo (em negrito) são acrescentados ao objeto do resultado do reconhecimento de fala.
Campos adicionais para o resultado do reconhecimento:
Campo
Descrição
Tipo do campo
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> }Dicionário que contém o tipo de evento, a probabilidade e o gênero.
{ event: <string>, p: <array[float]>, gender: <string> }Dicionário que contém a probabilidade e o tipo de emoção em um formato <K,V>.
{ event: <string>, emotion: <sting>, 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> } }
Exemplo de conteúdo resultado JSON:
[
{
"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": false,
"final_result": true,
"start_time": 1.16,
"end_time": 2.23,
"result_status": "RECOGNIZED"
},
{
"alternatives": [],
"segment_index": 1,
"last_segment": true,
"final_result": true,
"start_time": 0.0,
"end_time": 0.0,
"result_status": "NO_SPEECH"
},
{
"age_scores": {
"event": "AGE RESULT",
"age": 26,
"p": {
"0-10": 0.5179844523782638,
"10-20": 0.11152846598428226,
"20-30": 0.07900322754578767,
"30-40": 0.06298531934154068,
"40-50": 0.1626517805220346,
"50-60": 0.045204182877111004,
"60-70": 0.020613460175818818,
"70-80": 8.55482456966086e-06,
"80-90": 1.7022939418759654e-05,
"90-100": 3.533411172730065e-06
},
"confidence": "low"
}
},
{
"gender_scores": {
"event": "GENDER RESULT",
"p": [
0.3941764441529113,
0.6058235558470887
],
"gender": "F"
}
},
{
"emotion_scores": {
"event": "EMOTION RESULT",
"emotion": "neutro",
"group": "neutro",
"p": {
"enojado": 0.01711287908256054,
"frustrado": 0.011172660626471043,
"triste": 0.045132115483284,
"ansioso": 0.017092114314436913,
"entusiasmado": 0.054251641035079956,
"feliz": 0.010503247380256653,
"surpreso": 0.005758626386523247,
"amedrontado": 0.022531844675540924,
"neutro": 0.804568886756897,
"irritado": 0.01187601312994957
},
"p_groups": {
"negativo_desativado": 0.07341765519231558,
"positivo": 0.08760562911629677,
"neutro": 0.8271007314324379,
"negativo_ativado": 0.01187601312994957
}
}
}
]