Software

12 mai, 2014

Controle o computador por voz com Simon

Publicidade

Há aproximadamente três anos, a primeira versão do software de reconhecimento de voz, Simon1 era disponibilizada. Desde então, esse campo de aplicativos (que no início era usado para facilitar o acesso de pessoas com necessidades especiais ao computador) amadureceu de modo considerável. O Simon é mais do que um substituto de teclado e mouse para pessoas com necessidades especiais. Na verdade, os softwares de reconhecimento de voz parecem caminhar na direção da robótica em um futuro próximo.

O aplicativo é baseado no Julius2 motor (engine) de Reconhecimento de Fala Contínua de Vocabulário Amplo (Large Vocabulary Continuous Speech Recognition – LVCSR), de código aberto. Ele se baseia também no Hidden Markov Model Toolkit (HTK)3, bem como em muitos dicionários. A versão atual do Simon possuiu uma boa quantidade de modelos de idiomas prontos para uso, contudo, em contraste com muitos aplicativos proprietários, ele permite que usuários criem suas próprias linguagens e seus próprios modelos acústicos.

figura1simon
Figura 1: Durante a configuração, o Simon verifica o seu microfone.

Por estar preparado para entender qualquer dialeto e qualquer pronúncia, o Simon é perfeito também para pessoas com dificuldades linguísticas. Ele permite aos usuários abrir programas, entrar em sites, simular atalhos e controlar o teclado e o mouse. O aplicativo usa uma arquitetura cliente-servidor de forma que múltiplos usuários podem, teoricamente, acessar um único servidor. Essa funcionalidade o torna interessante para a inclusão de deficientes no mercado de trabalho ou em instituições de assistência a idosos.

Instalação

Os desenvolvedores do Simon oferecem pacotes binários para openSUSE, Ubuntu e seus derivados. Usuários do openSUSE devem fazer uso do openSUSE Build Service4 e da instalação com um-clique (one-click installation). No Ubuntu, será necessário primeiro adicionar o PPA do Simon. Faça isso da seguinte forma: digite [Alt]+[F2]e em seguida escreva na caixa de diálogo que irá surgir ao seguinte comando:

gksu add-apt-repository ppa:grasch‐simon‐listens/simon

Feito isso, é necessário instalar o aplicativo de reconhecimento de fala no seu computador. Para tanto, você já pode ir até o menu Sistema/Administração/Gerenciador de pacotes Synaptic. Com o programa aberto clique em Editar/Recarregar informações dos pacotes e no botão Procurar. Digite simon no campo que aparecerá; clique com o botão direito no pacote correspondente e em Marcar para instalação. Para finalizar, clique em Aplicar. Os usuários de outras distribuições irão encontrar pacotes DEB e RPM junto ao instalador (./simon-Version.sh) no Source-Forge.

Figura 2: A janela principal do Simon, dá acesso rápido às funções do programa.
Figura 2: A janela principal do Simon, dá acesso rápido às funções do programa.

Antes de começar a dizer ao seu computador o que fazer, você pode ainda ajustar o HTK, que melhora significativamente a taxa de detecção mais tarde. Para computadores de 64 bits, é necessário antes excluir qualquer menção ao termo -m32 nos arquivos de nome configure.

Caso você queira tentar, é preciso registrar-se (gratuitamente) antes de poder fazer o download. Enquanto espera que suas credenciais de acesso sejam enviadas via e-mail, é aconselhável instalar algumas ferramentas de desenvolvimento junto às bibliotecas de desenvolvimento do Alsa e X11. No Ubuntu, é possível instalar apenas os pacotes do build-essentiallibx11-devlibasound2-dev. Uma vez que você tenha o arquivo do HTK na sua máquina, descompacte-o e siga aquele típico processo de compilar um código com ./configuremake allsudo make install.

Figura 3: Modelos acústicos prontos permitem aos usuários configurar o Simon rapidamente.
Figura 3: Modelos acústicos prontos permitem aos usuários configurar o Simon rapidamente.

Depois de completar a etapa de instalação, você encontrará a categoria Acessibilidade no seu menu de Aplicativos. Vá lá para iniciar o ksimond (a interface gráfica do servidor Simon) e o próprio Simon, que colocará o seu ícone na barra de tarefas e, quando clicado com o botão direito do mouse, exibe um menu que te permite iniciar e configurar o servidor Simond. O padrão é que o Simond só aceite conexões locais. Ele escuta a porta 4444 e, como tem a habilidade de servir a múltiplos clientes, você deve criar um usuário ou mudar a senha padrão.

Os dados dos usuários são armazenados em um banco de dados SQLite. Quando o programa é rodado pela primeira vez, um assistente te guia pela tela de configuração, para ajudar a criar seus próprios cenários e um modelo de linguagem pessoal ou a escolher um dos modelos pré-existentes. Além do mais, é possível escolher a localização do servidor, os dispositivos de áudio, bem como checar o volume do seu microfone (figura 1).

Figura 4: O Simon realça em vermelho o vocabulário que precisa ser treinado.
Figura 4: O Simon realça em vermelho o vocabulário que precisa ser treinado.

São denominados cenários os conjuntos de comandos, expressões e termos dentro de uma configuração. O Simon tem um banco de dados online bem completo que inclui cenários em vários idiomas. Ainda existem algumas soluções prontas de modelos acústicos, com suporte a inglês, alemão e português – todos eles disponíveis como modelos básicos estáticos ou adaptáveis. O modelo estático requer uma pronúncia mais próxima da perfeição e não é ensinável, entretanto, em comparação aos modelos adaptáveis, faz seu trabalho sem o Hidden Markov Toolkit. Essa abordagem provê um modelo bem preparado, mas flexível, que pode ser modificado para se adequar à sua própria voz e pronúncia.

Embora os usuários possam se acomodar melhor entre um período curto de treinamento e um alto nível de precisão, é possível também criar um modelo do zero, com o benefício de se obter um nível bastante alto de precisão de reconhecimento. Ao completar os passos iniciais, o Simon exibe a sua interface principal (figura 2). É possível que você receba uma notificação de que a senha não corresponda ao nome de usuário, impedindo o acesso ao servidor. Para resolver essa situação, você pode entrar com os valores definidos anteriormente em Settings/Configure simon…/Recognition.

Figura 5: O número de páginas em uma unidade de treinamento mostra a quantidade de palavras que ainda precisam ser praticadas.
Figura 5: O número de páginas em uma unidade de treinamento mostra a quantidade de palavras que ainda precisam ser praticadas.

A opção presente de iniciar de modo automático o Simond junto com o Simon parte do pressuposto de que você não necessitará do ksimond no futuro – o que é verdade se o servidor e o cliente estiverem na mesma máquina. Além de vários outros menus, a barra de ferramentas do Simon apresenta nove botões para as tarefas mais necessárias. Ao lado do botão de iniciar conexão, incluem-se as opções de ligar o controle por voz, gerenciar cenários, adicionar palavras ao seu vocabulário, acesso ao vocabulário, gramática, comandos, a função de treinamento para novas palavras e uma ferramenta de sincronização que adiciona novas palavras ensinadas ao modelo de linguagem atual. O vocabulário precisa incluir todas as palavras que você deseja que o Simon seja capaz de reconhecer. A gramática define as combinações de palavras permitidas, tais como substantivo/substantivo, substantivo/verbo ou acionador/comando – mas retornarei a este assunto mais adiante.

Modelos básicos e cenários

O Simon suporta vários modelos básicos prontos. Você pode baixar e descomprimir um modelo em uma pasta e, depois, indicar onde ele se encontra em //Settings/Configure Simon…/Model Settings (figura 3). Modelos básicos adaptáveis dão resultado rápido, mas optar pelo esforço do treinamento ainda é aceitável para modelos gerados por usuários. O Simon analisa os dados no âmbito fonético, separados por lacunas. Por exemplo, a palavra inglesa “computer” seria escrita “k O m p j u: t @ r”, como fonemas – de novo, falarei mais sobre isso depois. Em princípio, o Simon armazenará todas as novas palavras, substantivos e comandos no cenário padrão. Estes existem, inclusive, para aplicativos especiais, como o controle do navegador Firefox ou o XBMC Media Center.

Você pode baixar e instalar os cenários para economizar o tempo que gastaria criando termos novos. Assim, precisará apenas treinar o vocabulário existente e passá-lo ao Simond. Para criar os seus próprios cenários, é necessário clicar no botão New no recurso de gerenciamento de cenários e fornecer o número da versão e os detalhes de licenciamento. Opcionalmente, podem ser oferecidos a versão atual do Simon e o nome do autor. Assim que estiver pronto, você pode povoar o cenário com palavras e os aplicativos aos quais elas se relacionam. Se desejar contribuir com o seu trabalho ao pool de cenários públicos disponíveis, você precisará observar as convenções que regulam os nomes de cenários [Idioma/Modelo_acustico] Nome_intuitivo. Por exemplo, [PT/VF] Opera para um cenário em português relacionado ao navegador Opera. Havendo múltiplos cenários, o Simon adicionará todas as novas palavras, comandos e termos ao que estiver aberto.

Figura 6: O Simon avisa se a qualidade da gravação não foi boa o suficiente.
Figura 6: O Simon avisa se a qualidade da gravação não foi boa o suficiente.

Treinamento

Depois de selecionar um modelo básico e, talvez, um cenário, poderá iniciar o treinamento do Simon. Ao clicar em Vocabulário, você verá um grande número de linhas realçadas em vermelho, que indicam as palavras ainda não ligadas à voz e à pronúncia do usuário (figura 4) ou – no caso de um modelo gerado pelo usuário – aquelas simplesmente desconhecidas pelo Simon, estas podem ser adicionadas ao treinamento. Como alternativa, você pode iniciar o treinamento ao clicar no botão Treinamento da barra de ferramentas. Neste caso, o Simon adiciona de modo automático todas as novas palavras a sua sessão de treinamento (figura 5). O número de páginas é tipicamente o número de palavras ou grupo de palavras que você precisa ditar. O treinamento se assemelha a um diálogo: o Simon mostra todas as palavras ou grupos de palavras que pertençam a uma unidade de treinamento.

Em seguida, ele descreve exatamente o que você precisa fazer, verifica a qualidade de cada gravação e avisa se esta estiver insatisfatória (figura 6). Para tal, o Simon avalia o nível mais alto de ruído e a taxa de sinal-para-ruído. Para permitir ao Simon a habilidade de discernir entre o som da sua voz e os ruídos do ambiente, você precisa ficar em silêncio cerca de dois segundos no começo de qualquer gravação. Uma vez concluída uma unidade de treinamento, o Simon passa para a próxima. No caso de optar por um modelo acústico gerado por usuário, você precisa concluir pelo menos cinco sessões de treinamento. Ainda que reconhecimentos rudimentares funcionem após apenas duas sessões, a precisão fica muito prejudicada nesse caso. Em um ambiente de laboratório, o Simon foi capaz de reconhecer, sem erros, as palavras ditadas após 10 sessões de treinamento. Quando se trata de novas palavras, o desafio é selecionar uma “finalidade” para cada nova palavra – quer dizer, você precisa especificar quando uma palavra é um substantivo, verbo, acionador (trigger) ou comando. Além disso, você precisa definir a pronúncia, como fonemas, tal como no exemplo citado anteriormente em “k O m p j u: t @ r”. Quem não tiver conhecimentos linguísticos pode sentir dificuldades nesse processo, mas um dicionário pode poupar um bom tempo. O Simon tem um assistente de importação de dicionários com detalhes da pronúncia dos vocábulos. O Simon suporta o HTK, Sphinx [7] e PLS [8] ou os dicionários Julius das suas primeiras versões.

Comandos

Quando tudo estiver funcionando, você poderá querer incluir os seus próprios novos comandos no sistema. Os comandos processam os resultados do sistema de reconhecimento e podem ocorrer individualmente ou em combinação com um acionador. A combinação de um acionador com um comando, tal como em “Executar Skype”, em vez de apenas “Skype”, previne execuções acidentais de comandos. O Simon inclui uma variedade de plugins para rodar comandos que executam programas: acessar sites, pastas e arquivos (Locations) e fornecer atalhos de teclado, tais como Ctrl+S (Shortcuts), números (Numeric entries) e blocos de texto (Text macros), por exemplo. Você pode também abrir a lista de comandos e selecionar o que deseja dizendo o seu número, controlar o mouse (Desktop grid) ou executar comandos em lote (Combination commands). Uma conjunção de comandos, tal como ‘telefonar mamãe’, pode desencadear um cliente SIP, buscar o número do telefone da sua mãe e fazer a chamada. Você pode adicionar novos comandos à interface de comandos. Antes de pressionar o botão New command, precisa carregar um ou mais plugins de comandos através do Manage plugins que pode, opcionalmente, vir combinado com um acionador. Na caixa de diálogo de criação de comandos que surge, especifique a ação que está ligada ao comando, bem como o seu acionador (figura 7). Você precisará também treinar novas palavras de comando e criar regras para elas, à medida do necessário.

Figura 7: O Simon ajuda o usuário a criar novos comandos.
Figura 7: O Simon ajuda o usuário a criar novos comandos.

Conclusão

O Simon cresceu muito rápido nos últimos anos, se encontra em um bom nível de estabilidade e possui interface e diálogos amigáveis. O treinamento pode consumir um tempo considerável, mas a recompensa é um alto nível de precisão. Além do controle por fala, o Simon oferece mais recursos que estão além do escopo deste artigo. Entre eles, incluem-se um plugin de ditados, um treinador de pronúncias e um plugin de inteligência artificial. Presumindo que você tenha uma boa coleção de vocabulários, a função de ditado provê ditados de textos curtos; o treinador de pronúncias, em conjunto com um modelo estático, corrige a pronúncia dos usuários, em substituição ao professor de língua estrangeira. O recurso de inteligência artificial é projetado para permitir maior interação do Simon com seus usuários. Os desenvolvedores do Simon têm grandes planos para o futuro. O que inclui tornar as vidas das pessoas idosas mais fácil e implementar várias aplicações robóticas. Para atingir esse objetivo, a equipe também contribui para os projetos de pesquisa Astromobile [9]. O primeiro, pesquisa a habilidade da tecnologia de comunicação moderna para facilitar a vida de pessoas idosas e dar-lhes o máximo de autonomia possível. Já o segundo tem seu foco voltado para a interação homem/máquina.

Mais informações

[1] Simon escuta (listens): http://sourceforge.net/projects/speech2text/
[2] Julius: http://sourceforge.net/projects/julius/
[3] HTK: http://htk.eng.cam.ac.uk/
[4] openSUSE Build Service: http://software.opensuse.org/
[5] Simon repository for Ubuntu: http://ppa.launchpad.net/grasch-simon-listens/simon/ubuntu/
[6] VoxForge: http://www.repository.voxforge1.org/downloads/SpeechCorpus/Trunk/Lexicon/
[7] Sphinx: http://sphinxsearch.com/
[8] PLS: http://www.w3.org/TR/2005/WD-pronunciation-lexicon-20050214/
[9] Astromobile: http://simon-listens.blogspot.com.br/2012/04/astromobile-project-has-been-completed.html