Protocolo

A API WebSocket utiliza um conjunto de mensagens para acionar as funções de reconhecimento de fala do servidor. A conexão entre cliente e servidor é estabelecida de maneira padrão para essa tecnologia, ou seja, através de uma mensagem HTTP de handshake enviada pelo cliente, com indicação de upgrade da conexão para o protocolo WebSocket. O servidor irá responder o handshake e abrir uma conexão socket com o cliente. A partir desse momento, mensagens podem ser trocadas entre os dois endpoints.

A versão atual da API WebSocket é a 2.3. Ela é composta pelas seguintes mensagens.

Table 9 Mensagens enviadas pelo cliente.

Mensagem

Descrição

CREATE SESSION

Cria uma sessão de reconhecimento de fala. Deve ser enviada pelo cliente após o estabelecimento de uma conexão WebSocket com o servidor.

DEFINE GRAMMAR

Carrega e compila uma gramática, permitindo que seja posteriormente usada no reconhecimento.

START RECOGNITION

Inicia o reconhecimento. Deve ser enviado antes do início da captura do áudio pelo cliente. Indica o modelo de língua que deve ser usado pelo servidor. Permite definir parâmetros para este reconhecimento.

INTERPRET TEXT

Realiza a interpretação semântica de um texto fornecido pelo cliente, usando a gramática indicada, de forma similar à mensagem START RECOGNITION.

START INPUT TIMERS

Inicia os temporizadores de início de fala e de reconhecimento.

SET PARAMETERS

Define parâmetros da sessão de reconhecimento. Deve ser enviada antes da mensagem START RECOGNITION. Os parâmetros serão válidos para todos os reconhecimentos dessa sessão.

GET PARAMETERS

Obtém o valor atual de parâmetros da sessão de reconhecimento.

SEND AUDIO

Transporta uma amostra do áudio a ser reconhecido. Recomenda-se o envio de amostras pequenas para obter o resultado do reconhecimento mais próximo do tempo real.

CANCEL RECOGNITION

Cancela o reconhecimento e descarta o resultado parcial.

RELEASE SESSION

Encerra a sessão de reconhecimento, liberando recursos alocados. Ao receber a mensagem, o servidor encerra a conexão WebSocket.

Table 10 Mensagens enviadas pelo servidor.

Mensagem

Descrição

RESPONSE

Resposta do servidor para qualquer mensagem enviada pelo cliente, exceto a mensagem SEND AUDIO que é enviada apenas em caso de erro.

RECOGNITION RESULT

Resultado do reconhecimento do áudio enviado, podendo conter um resultado parcial ou final.

START OF SPEECH

Indica que o servidor detectou o início de um segmento de fala nas amostras de áudio enviadas pelo cliente. O cliente deve continuar enviando as amostras de áudio para o servidor.

END OF SPEECH

Indica que o servidor detectou o fim de um segmento de fala nas amostras de áudio, e irá gerar o resultado final do reconhecimento deste segmento.

O diagrama a seguir ilustra uma sequencia de uso das mensagens da API que permite realizar um reconhecimento de fala. A descrição detalhada de cada mensagem está na seção Formato das mensagens.

../_images/cenario-uso-api-websocket.png

Fig. 11 Cenário de uso da API WebSocket.

  • A aplicação cliente abre uma conexão WebSocket com o Servidor CPqD ASR;

  • Após a abertura, o cliente deve enviar uma mensagem CREATE SESSION para criar uma sessão de reconhecimento, que é alocada exclusivamente para aquela conexão. A quantidade de sessões que podem ser criadas depende da quantidade de licenças disponíveis no servidor;

  • Para iniciar um reconhecimento, o cliente deve enviar uma mensagem START RECOGNITION, informando o modelo de língua (LM) que deve ser utilizado, seja um modelo de fala livre ou gramática;

  • O cliente deve iniciar a captura do áudio e enviar o stream de áudio em blocos de pequena duração, por exemplo, 200ms, através da mensagem SEND AUDIO. O servidor irá analisar continuamente as amostras de áudio recebidas, identificando o segmento de fala;

  • Quando o servidor detectar o início da fala, a mensagem START OF SPEECH será enviada para o cliente. Durante o processamento do segmento de fala, o servidor poderá enviar resultados parciais do reconhecimento através da mensagem RECOGNITION RESULT;

  • Quando o servidor detectar o fim da fala, a mensagem END OF SPEECH será enviada. O cliente não deve enviar novas amostras após o recebimento dessa mensagem. O servidor irá gerar o resultado final do reconhecimento para esse segmento, enviando novamente uma mensagem RECOGNITION RESULT;

  • Caso o stream de áudio seja finalizado antes do recebimento da mensagem END OF SPEECH, o cliente deve enviar a última mensagem SEND AUDIO com o header LastPacket definido como true. Isso fará com que o servidor encerre o reconhecimento e gere o resultado final para o segmento de fala;

  • Para realizar um novo reconhecimento, o cliente deverá enviar novamente uma mensagem START RECOGNITION;

  • A comunicação com o servidor pode então ser encerrada através da mensagem RELEASE SESSION ou pelo fechamento da conexão WebSocket.