Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

02 Fundamentação

blabos edited this page · 38 revisions

02 Fundamentação

2.1 - Introdução

Neste capítulo serão apresentados brevemente os conceitos básicos que fundamentam este trabalho, bem como algumas aplicações existentes que foram analisadas durante as pesquisas preliminares nas plataformas Windows, Mac OSX e Linux.

Tanto o Windows quanto o Mac OSX já oferecem nativamente seus próprios sistemas de reconhecimento de fala, com níveis excelentes de precisão. No Linux, entretanto, não há um pacote oficial para essa tarefa.

Foram analisadas algumas iniciativas para a plataforma Linux, cada uma apresentando variados graus de sucesso. Dentre as observadas, a que chamou mais atenção foi o Gnome Voice Control (GVC). Ele é um sistema que permite controlar um desktop Gnome por voz, através de um pequeno conjunto de comandos pré-estabelecidos.

A abordagem do GVC é parecida com a que será utilizada aqui e será explicada em detalhes no capítulo de arquitetura. Resumidamente, ele usa uma engine de reconhecimento de fala existente, no caso o CMU Sphinx, para obter os comandos a partir de um sinal de voz. Em seguida os comandos são executados através de bibliotecas específicas.

Este trabalho não propõe novas técnicas de reconhecimento de fala ou melhorias nas existentes. Ele utilizará engines de reconhecimento existentes. Portanto, os conceitos fundamentais sobre reconhecimento de fala serão abordados apenas superficialmente, para efeito de contextualização.

Adicionalmente, também será apresentado o básico sobre envio de comandos para outras aplicações, dentro do contexto de um desktop Linux. A escolha desse ambiente será melhor explicada no capítulo sobre a arquitetura.

2.2 - Sistemas de Reconhecimentos de Fala

Um sistema de reconhecimento de fala é basicamente uma aplicação que toma como entrada um sinal de áudio (voz) e após um processamento retorna como saída um conjunto de palavras independente do locutor. Um reconhecedor de voz, por outro lado preocupa-se principalmente com a identificação do locutor (Togneri & Pullella,2011).

O objetivo de um sistema de reconhecimento de fala pode ser definido então como a obtenção de uma sequência de palavras W, a partir de um sinal de áudio X. Dentre outras abordagens, isto pode ser visto como um problema de decisão, no qual é preciso encontrar a melhor sequência W que represente a informação embutida em X (Chou & Juang ,2003).

2.2.1 - Princípios Básicos

O processamento nos sistemas de reconhecimento de fala pode ser subdividido em duas etapas, a extração de características e a classificação baseada nas características obtidas (Nedel, 2004).

No reconhecimento automático de fala, o sinal observado é uma medida da modificação da pressão do ar gravado por um transdutor. A fala é capturada como um sinal uni-dimensional variando no tempo. Em seguida o extrator de características converte o sinal de fala em uma sequência parametrizada de vetores de características que serão utlizados pela fase de classificação (Nedel, 2004).

2.2.2 - Extração de Características

O objetivo da fase de extração de características é obter um conjunto de valores que representem o sinal de entrada (Seltzer, 2003), ou seja, dada uma grandeza física qualquer, a extração de características é fase responsável por obter uma representação computacional dessa grandeza.

No contexto de reconhecimento de fala o mais usual é extrair um conjunto de Coeficientes Mel-Cepstrais. Para isso o sinal de áudio é dividido em frames tipicamente com duração entre 20ms e 30ms, sendo aplicada sobre eles uma transformada de Fourier discreta, num processo chamado Short-Time Fourier Transform (STFT) (Seltzer, 2003).

Em seguida é calculado o quadrado dos coeficientes SFTF para descartar as informações de fase - os valores negativos são mapeados para outros valores positivos - que não são importantes para o reconhecimento (Seltzer, 2003).

Na etapa seguinte, sobre os espectros de frequência, são aplicados os filtros Mel e o resultado é posto em uma escala apropriada produzindo um vetor de coeficientes Mel-Cepstrais (Seltzer, 2003).

Como resultado desse processo, são obtidos os Coeficientes Mel-Cepstrasi que representam o sinal de áudio que foi dado como entrada.

2.2.3 - Classificadores

Os classificadores são elementos computacionais utilizados para determinar a qual categoria uma determinada entrada pertence.

No caso do reconhecimento de fala, eles são utilizados para identificar os elementos de linguagem que melhor representem a informação que estava embutida no sinal de audio, ou seja, eles usam os vetores de característica para tentar descobrir o que foi dito pelo locutor (Li, 2005).

Em outras palavras, as categorias são as palavras ou expressões de um idioma. O classificador precisa descobrir em qual expressão cada entrada melhor se encaixa.

Para a solucionar esse problema podem ser utilizadas entre outras abordagens, redes neurais ou como é mais frequênte na literatura de reconhecimento de fala, Modelos Ocultos de Markov (HMM, do inglês Hidden Markov Models) (Chou & Juang ,2003).

A maioria dos sistemas tidos como "estado da arte" no reconhecimento de fala, entretanto, optam por uma visão estatística do problema, tentado encontrar as palavras que tenham a maior probabilidade de representar o sinal de áudio (Chou & Juang ,2003), o que resulta na escolha de classificadores baseados em HMM.

2.2.3.1 - Modelos Ocultos de Markov

Antes de falar sobre Modelos Ocultos de Markov, é preciso definir o que é uma Cadeia de Markov.

Uma Cadeia de Markov pode ser definida como uma máquina de estados com um conjunto de estados S = {s1; s2; ... ; sn} e um conjunto de transições t = {t1, t2, ... , tm}. A cada transição do estado s[i] para o estado s[j] está associada uma probabilidade p[i][j] que depende apenas do estado atual s[i]. (Grinstead & Snell, 1997)

A partir de um estado inicial previamente definido, são aplicadas sucessivas transições até chegar a um estado final também conhecido. (Grinstead & Snell, 1997)

Um modelo oculto de Markov é uma cadeia de Markov na qual os estados intermediários não são observáveis. Apenas os estados finais podem ser vistos pelo usuário (Stamp, 2012).

Eles são utilizados por exemplo para descobrir qual a próxima palavra mais provável de ocorrer em uma determinada frase, onde os passos intermediários não são importantes, mas sim a palavra escolhida no final do processo.

OS HMMs são utilizados pelos modelos acústicos e modelos de linguagem, que serão brevemente explicados a seguir.

2.2.3.2 - Modelos Acústicos

Um modelo acústico é um modelo oculto de Markov que associa uma probabilidade de ocorrência de uma determinada palavra pertencente a um vocabulário conhecido, dado um conjunto de características de entrada (Kuhn & Mori, 1990).

Em outras palavras, dado um dicionário mapeando um vocabulário previamente conhecido e sua representação fonética, o modelo acústico ajuda a encontrar qual é a palavra desse dicionário que melhor representa a sequência de fonemas de entrada.

2.2.3.3 - Modelo de Linguagem

Um modelo de linguagem é um modelo oculto de Markov que associa uma probabilidade de ocorrência a uma sequência ordenada de palavras W = {w1,...,wn} em um determinado idioma. Ele é utilizado para reduzir o espaço de busca de termos (Kuhn & Mori, 1990).

Por exemplo, dado um idioma contendo 20000 palavras e uma sentença qualquer composta por três palavras, existem 20000 ^ 3 = 8x10^12 sentenças possíveis, ou seja, para encontrar a informação "gato mia alto" seria necessário comparar a entrada com as 8 bilhões de sentenças possíveis.

Com um modelo de linguagem, tem-se que probabilidade de ocorrerência de determinadas sentenças é diferente da probabilidade de ocorrência de outras, assim o algoritmo de busca não precisa testar as opções menos prováveis.

2.2.3.4 - Modelos de duração

Um modelo de duração de palavras é um outro modelo estatístico utilizados em alguns trabalhos de reconhecimento de fala, que penaliza hipóteses levantadas pelo sistema de reconhecimento que estejam fora da duração média de dada palavra (Ynoguti, 1999).

Para que essa duração média seja razoavelmente precisa, é necessário estimá-la a partir de uma grande base de dados, o que a torna inviável em situações onde o vocabulário é muito grande (Ynoguti, 1999).

2.2.4 - Considerações

Os modelos estatísticos baseados em HMM são utilizados para determinar a probabilidade de ocorrência das sequências de palavras em determinado idioma. Eles são combinados de forma a tentar obter a melhor resposta possível dada uma sequência de entrada e uma base de dados razoavelmente grande representando o idioma.

Várias são as dificuldades, desde a presença de ruídos, às variações de locução que podem aparecer devido a sotaques, diferentes velocidades de pronúncia, ou ainda por problemas temporários com a voz do locutor. Devem ser ainda consideradas as alterações causadas pelas diferentes características físicas do hardwares utilizados para captação do sinal.

2.3 - Enviando Comandos para Aplicações

O segundo componente do sistema proposto por este trabalho é o responsável por receber o texto decodificado pelo sistema de reconhecimento de fala, verificar se ele representa algum comando, para em caso afirmativo, enviá-lo em seguida às aplicações.

Isto implica que as aplicações precisam dispor de algum mecanismo através do qual possam receber comandos.

Infelizmente, atualmente a maioria das aplicações comuns em um desktop não são sensíveis a uma interface de comandos, o que é razoável, pois, para isso cada uma teria que implementar seu próprio interpretador de comandos. Além disso, aplicações desktop normalmente são planejadas para serem executadas em um ambiente previamente conhecido, com suporte a monitor, teclado e mouse, por exemplo.

Para subjulgar esse obstáculo, uma abordagem possível é aproveitar a arquitetura do X Window System para enviar comandos para as janelas das aplicações, conforme será detalhado adiante. Essa é a abordagem utilizada pelo Gnome Voice Control.

2.3.1 - X Window System

O X Window System, também conhecido como X11 ou simplemente X, é um conjunto de softwares implementados sobre uma arquitetura cliente-servidor responsáveis por criar um ambiente gráfico em sistemas baseados em UNIX ou compatíveis (Scheifler & Gettys, 1986).

Um sevidor X é um programa que interage diretamente com os dispositivos de entrada e saída, fornecendo uma interface para que outros programas, os clientes, acessem dispositivos como teclado, mouse e display de forma transparente (Scheifler & Gettys, 1986).

Os clientes e o servidor trocam mensagens pela rede de forma que uma aplicação cliente executando local ou remotamente, possa requisitar ao servidor que ele lhe entregue as entradas e desenhe na tela as saídas (TCP/IP).

Pode parecer estranho que um servidor esteja na máquina do usuário, enquanto que os clientes executam remotamente, mas o foco está nas aplicações e não no usuário. Uma aplicação cliente se conecta a um servidor X e requisita lhe determinadas açoes, ele recebe essas requisições e as executa ou não.

Essa arquitetura também permite que uma aplicação cliente envie mensagens a outros clientes, ainda que indiretamente, sendo a característica a ser explorada neste trabalho para envio de comandos a outras aplicações.

2.3.2 - Camadas e Componentes

A comunicação entre clientes e servidor é feita através da troca de mensagens do protocolo do X Window System, um formato que é pouco amigável para humanos (Scheifler, 2004). Assim algumas camadas de abstração foram adicionadas para facilitar o trabalho dos desenvolvedores de aplicações.

Isso significa que embora seja possível montar manualmente as mensagens do protocolo e enviar diretamente para as aplicações, normalmente utiliza-se bibliotecas que expõem uma API mais amigável.

Um dos desafios deste trabalho também é escolher o nível adequado de abstração que permita um desenvolvimento simples ao mesmo tempo que forneça as funcionalidades necessárias.

2.3.3 - Clientes de Protocolo

A primeira camada de abstração está nos clientes do protocolo, que encapsulam o sistema de mensageria e fornecem funções para interação básica com o servidor X.

Eles não dão suporte a widgets como botões, menus, etc. Os widgets são implementados por outras bibliotecas escritas a partir dos clientes.

As implementações mais conhecidas, embora existam ainda outras abordagens, são a CLX (CLX), escrita em Common Lisp e a Xlib (Gettys & Scheifler, 2002), escrita em C.

Ao utilizar uma dessas bibliotecas, o programador passa a não precisar conhecer todos os detalhes do protocolo em si, mas ainda dispõe de um arcabouço razoavelmente limitado para escrever aplicações não triviais.

2.3.4 - Toolkits

Os toolkits são implementações de abstrações de um nível um pouco mais alta que as bibliotecas clientes de protocolo, sendo construídos a partir delas. Eles fornecem suporte a widgets e ao ferramental necessário para desenvolver aplicações gráficas.

O primeiro deles, chamado X Toolkit Intrinsics (McCormack & Asente & Swick, 1994), ou simplesmente Xt, fornece funções para criação e manipulação de widgets, mas não implementa nenhum widget em si. Os widgets são implementados por outras bibliotecas, como o Xaw e o Motif.

Atualmente o Xt caiu em desuso, sendo substituído por outros toolkits mais modernos e completos como GTK+ (GTK) e o Qt (QT).

Tanto o Qt quanto o GTK+ fornecem todo o ferramental necessários para criação de widgets, janelas, tratamento de eventos, utilizando abstrações de alto nível, que são mais próximas do vocabulário dos desenvolvedores e designers de aplicação, do que de engenheiros de protocolo, permitindo assim a criação de aplicações cada vez mais sofisticadas e simples de manter.

2.3.5 - Bibliotecas para controle de janelas (referências em atk.doc.txt)

Construídas sobre os toolkits, algumas bibliotecas permitem certo nível de acesso e controle sobre janelas de outras aplicações. Sendo normalmente utilizadas em tarefas de gerenciamento, elas fornecem algumas das funcionalidades necessárias para enviar comandos para as aplicações alvo.

Entretanto, como suas finalidades não são especificamente para construir uma interface de comandos, para aplicações que não são desenhadas para ter uma, será preciso combinar mais de uma delas para atingir o objetivo desejado.

A primeira biblioteca a ser analisada é a libwnck - Window Navigator Construction Kit (WNCK). Ela é uma biblioteca que pode ser utilizada na confecção de sistemas que necessitam exercer algum controle e gerenciamento sobre outras janelas, como selecioná-las pelo nome, maximizar, minimizar, entre outras.

A segunda a se considerar é a lib AT-SPI (Assistive Technology Service Provider Interface) (AT-SPI). Ela foi criada dentro do projeto de acessibilidade do Gnome, mas sua especificação foi adotada em outros projetos, como por exemplo, Java/Swing, Mozilla suite, OpenOffice.org e Qt.

Ela permite emular o envio de eventos de teclado e mouse para janelas que suportem sua especificação.

Dessa forma, combinando a libwnck e a libatspi é possível através de uma aplicação, simular comandos de teclado e mouse e enviá-los a uma outra aplicação.

2.4 - Considerações

O reconhecimento de fala é uma das etapas fundamentais para o sucesso deste projeto. Entretanto ele não foca no desenvolvimento ou aprimoramento das técnicas atualmente em uso. Ele confia e depende de sistemas que já foram implementados com esse fim.

Na área de envio de comandos para as aplicações, uma das dificuldades está no fato de que elas não foram concebidas expondo uma interface de comandos, o que no contexto de um desktop é normal.

Para contornar este problema, este trabalho vai utilizar uma abordagem que consiste em emular eventos de teclado e mouse através de bibliotecas existentes, para em seguida enviar esses eventos para as janelas das aplicações.

2.5 - Referências do Capítulo

Gnome DEV Center. "Libwnck Reference Manual". http://developer.gnome.org/libwnck/stable/ (visualizado em 06 de maio de 2012)

Gnome DEV Center. "AT-SPI C Bindings Reference Manual". http://developer.gnome.org/at-spi-cspi/1.32/ (visualizado em 06 de maio de 2012)

Gnome Live!. "Gnome Voice Control". http://live.gnome.org/GnomeVoiceControl (visualizado em 06 de maio de 2012)

Nedel, J. P. Duration Normalization for Robust Recognition of Spontaneos Speech via Missing Feature Methods, Ph.D. Thesis, Carnegie Mellon University, April 2004.

Gnome DEV Center. "GTK+ 3 Reference Manual". http://developer.gnome.org/gtk3/stable/ (visualizado em 07 de maio de 2012) Togneri, R., Pullella, D. (2011). An Overview of Speaker Identification: Accuracy and Robustness Issues, 2. Trimestre 2011 IEEE Circuits And System Magazine.

Chou, W., Juang B. (2003). Pattern Recognition in Speech and Language Processing.

Sletzer, L. M. Microphone Array Processing for Robust Speech Recognition, Ph.D. Thesis, Carnegie Mellon University, Julho 2003.

Li, X., Combination and Generation of Parallel Feature Streams for Improved Speech Recognition, Ph.D. Thesis, Carnegie Mellon University, Fevereiro 2005.

Rabiner, L. and Juang, B.H. (1993). Fundamentals of speech recognition, Englewood cliff, NJ, Prentice Hall.

Grinstead C. M. and Snell J. Laurie (1997), Introduction to Probability.

Stamp M.(2012), A Revealing Introdution to Hidden Markov Models, San Jose State University, Fevereiro 2012.

Kuhn, R., Mori, R. (1990). A Cache-Based Natural Language Model for Speech Recognition, IEEE Transactions on Pattern Analysis and Machine Intelligence, Vol. 12, No. 6, Junho 1990.

Ynoguti C. A., Reconhecimento de Fala Contínua Usando Modelos Ocultos de Markov, Tese de Doutorado, Universidade Estadual de Campinas, Maio 1999.

Scheifler, R. W., Gettys, J. (1986). The X Window System, ACM Transactions on Graphics, Vol. 5, No. 2, Abril 1986.

TCP/IP for MVS, VM, OS/2, and DOS X Window System Guide, International Technical Support Organition Raleigh Center, Second Editon, Julho 1994.

Scheifler, R. W. (2004). X Window System Protocol: X Consortium Standard.

Gettys J., Scheifler, R. W., et. al. (2002). Xlib - C Language X Interface.

CLX Common LISP X Interface, Texas Instruments Incorporated, 1989.

McCormack, J., Asente, P., Swick R. R. X Toolkit Instrinsics - C Language Interface, X Consortium Inc., First Revision, Abril 1994.

Nokia Corporation and/or its subsidiaries. "Online Reference Documentation". http://doc.qt.nokia.com/ (visualizado em 07 de maio de 2012)

Something went wrong with that request. Please try again.