Integração com o ASR

Para o desenvolvimento de uma aplicação com reconhecimento de fala, um dos passos é estabelecer a comunicação com o servidor ASR e ser capaz de utilizar os seus recursos. A Fig. 8 apresenta a estrutura lógica geral dos componentes do sistema, incluindo as formas de integração com a aplicação.

../_images/asr-logic.png

Fig. 8 Componentes do ASR.

O desenvolvedor pode implementar esta integração utilizando diretamente uma API ASR oferecida, desenvolvendo todo o código necessário, de acordo com o protocolo estabelecido pela API selecionada. As APIs ASR disponíveis são:

  • API WebSocket

  • API REST

  • API MRCP

  • API GRPC

A API deve ser escolhida de acordo com o contexto da aplicação. A tabela abaixo apresenta uma breve comparação dessas APIs com relação a alguns recursos do ASR:

Recurso

WebSocket

REST

MRCP v1/v2

GRPC

Reconhecimento com fala livre

X

X

X

X

Reconhecimento com gramáticas

X

X

X

X

N-best list

X

X

X

X

Índice de confiança

X

X

X

X

Interpretação

X

X

X

X

Reconhecimento em tempo real

X

X

X

Eventos de início e fim de fala

X

X

X

Resultados intermediários

X

X

Reconhecimento em modo contínuo

X

(1)

X

Classificadores

X

X

X

X

(1) O reconhecimento em modo contínuo através da API ASR REST é possível mas não é a forma mais recomendada. Ela restringe o tamanho do áudio já que este precisa ser inteiramente carregado em memória e o resultado da transcrição saí apenas no final do reconhecimento do áudio completo. Em comparação, a API WebSocket e API GRPC permitem o reconhecimento de áudios longos em tempo real e o recebimento do resultado a medida que o reconhecimento acontece.

Usando bibliotecas clientes

Para simplificar a integração com o ASR, são oferecidas um conjunto de bibliotecas clientes open-source em várias linguagens de programação. Essas bibliotecas utilizam a API WebSocket, mas permitem a interação com o ASR num nível mais alto. Elas podem ser usadas diretamente ou serem modificadas pelo desenvolvedor para atender as necessidades da sua aplicação.

Atualmente são disponibilizadas as seguintes bibliotecas clientes:

Usando a API MRCP

O MRCP é um protocolo padrão adotado pelo mercado, frequentemente utilizado para disponibilizar recursos de áudio, síntese e reconhecimento de fala em sistemas de telecomunicações, principalmente aplicações de diálogo baseadas em URA.

A API MRCP é normalmente selecionada quando o desenvolvedor utiliza uma URA que já possui a implementação da interface MRCP, por exemplo, Asterisk).

Para informações sobre a integração usando MRCP, consulte o Manual do Servidor MRCP.

Usando a API WebSocket

A API ASR WebSocket é uma das interfaces mais completa, pois permite utilizar todas as funcionalidades oferecidas pelo ASR. Ela utiliza o protocolo WebSocket e permite estabelecer uma comunicação bidirecional dedicada entre cliente e servidor, com baixa latência e pequeno overhead para transferência de stream de áudio.

Esta API é normalmente usada quando a aplicação deseja realizar o reconhecimento de fala a medida que o áudio é capturado (chamado aqui de reconhecimento em tempo real). Ela permite o reconhecimento de áudios longos, desde que o envio do áudio seja feito a uma taxa compatível com a velocidade de reconhecimento do ASR. Ela permite o reconhecimento em modo contínuo, o recebimento de resultados intermediários, e o recebimento de eventos de início e fim de fala. Ela é a forma mais comum de integração para aplicações em servidores ou em dispositivos móveis.

O desenvolvedor que deseja implementar a comunicação usando esta API deve consultar a seção API WebSocket.

Usando a API REST

A API ASR REST é uma interface mais simples e fácil de ser usada, entretanto permite usar menos funcionalidades do ASR. Ela utiliza o protocolo HTTP e permite estabelecer uma comunicação síncrona e stateless entre a aplicação e o servidor ASR.

Esta API é indicada para aplicações que tem o áudio já gravado, de curta duração, em torno de um minuto. Por padrão, ela suporta áudios de até 15 minutos. Ela não permite receber resultados intermediários de reconhecimento e nem fazer reconhecimento em tempo real. Ela é uma forma simples de executar testes ou demonstrações de reconhecimento.

O desenvolvedor que deseja implementar a comunicação usando esta API deve consultar a seção API REST.

Por ser uma API que usa apenas requisições HTTP, podemos realizar reconhecimento de fala de forma simples, em várias linguagens de programação, principalmente com o apoio de bibliotecas.

Por exemplo, em Python, podemos usar a biblioteca requests e realizar o reconhecimento do arquivo de áudio audio/teste.wav usando o modelo de fala livre geral builtin:slm/general:

import requests

url = "http://127.0.0.1:8025/asr/rest/v3/recognize"
params = {"lm":"builtin:slm/general"}
headers = {"Content-Type":"audio/wav"}
audio = open("audio/teste.wav", "rb").read()

r = requests.post(url, params=params, headers=headers, data=audio)
print(r.content.decode("UTF-8"))

A bibliteca “requests” pode ser instalada com:

pip install requests

Em Java, podemos realizar o mesmo reconhecimento usando a Fluent API do Apache HttpClient:

import java.io.File;

import org.apache.http.client.fluent.Request;
import org.apache.http.entity.ContentType;

public class RecognitionTest {

  public static void main(String[] args) throws Exception {
    String response = Request.Post("http://127.0.0.1:8025/asr/rest/v3/recognize?lm=builtin:slm/general")
        .bodyFile(new File("audio/teste.wav"), ContentType.create("audio/wav"))
        .execute().returnContent().asString();

    System.out.println(response);
  }

}

O componente HttpClient pode ser adicionado ao projeto usando Maven, por exemplo:

<dependencies>
  <dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.6</version>
  </dependency>
  <dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>fluent-hc</artifactId>
    <version>4.5.6</version>
  </dependency>
</dependencies>

Há também ferramentas prontas que podem ser usadas em testes. Nos exemplos desta documentação, adotaremos a ferramenta cURL, disponível no Linux. Com ela, podemos realizar o mesmo reconhecimento, executando o comando seguinte:

curl --header "Content-Type: audio/wav" \
     --data-binary @audio/teste.wav
     http://127.0.0.1:8025/asr/rest/v3/recognize?lm=builtin:slm/general

Usando a API GRPC

gRPC é uma arquitetura RPC de código aberto projetada pelo Google para obter uma comunicação de alta velocidade entre microsserviços. Ela permite que os desenvolvedores integrem serviços programados em diferentes linguagens.

A arquitetura gRPC usa o formato de mensagem protobuf (buffers de protocolo), que é altamente compactado e eficiente para serializar dados estruturados.

Quando é indicada??

O desenvolvedor que deseja implementar a comunicação usando esta API deve consultar a seção API GRPC.