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://speech.cpqd.com.br/asr/ws/v3/recognize |
Local |
http://{ip_speech_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:
|
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":"gastando 123 testando 123 testando",
"words":[
{
"text":"gastando",
"score":79,
"start_time":0.83,
"end_time":1.6699998
},
{
"text":"123",
"score":100,
"start_time":1.76,
"end_time":3.0199466
},
{
"text":"testando",
"score":100,
"start_time":3.0199997,
"end_time":3.9199998
},
{
"text":"123",
"score":100,
"start_time":4.25,
"end_time":5.81
},
{
"text":"testando",
"score":100,
"start_time":5.87,
"end_time":6.92
}
],
"score":96,
"lm":"builtin:slm/general"
}
],
"segment_index":0,
"last_segment":true,
"final_result":true,
"start_time":0.59,
"end_time":7.04,
"result_status":"RECOGNIZED",
"age_scores":{
"event":"AGE RESULT",
"age":20,
"confidence": "mid",
"p":{
"0-10": 0.5930704981395444,
"10-20": 0.11691347788536806,
"20-30": 0.09859508937698414,
"30-40": 0.041012948235340296,
"40-50": 0.0743625710383493,
"50-60": 0.04256457658665687,
"60-70": 0.033419704649003415,
"70-80": 6.11256952094694e-05,
"80-90": 1.5866893916635692e-09,
"90-100": 6.806854787780966e-09
},
},
"gender_scores":{
"event":"GENDER RESULT",
"p":[
0.8526366457620802,
0.14736335423791985
],
"gender":"M"
},
"emotion_scores":{
"p":{
"enojado":0.02083667553961277,
"frustrado":0.6678905487060547,
"triste":0.10195520520210266,
"ansioso":0.07372092455625534,
"entusiasmado":0.005346329882740974,
"feliz":0.005598071962594986,
"surpreso":0.00751736294478178,
"amedrontado":0.03665414825081825,
"neutro":0.04831841588020325,
"irritado":0.03216234967112541
},
"event":"EMOTION RESULT",
"emotion":"frustrado"
}
}