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 CPQD 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.
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 |
(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 CPQD 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 CPQD MRCP.
Usando a API WebSocket¶
A API ASR WebSocket é uma das interfaces mais completa, pois permite utilizar todas as funcionalidades oferecidas pelo CPQD 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 CPQD 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.