Escolar Documentos
Profissional Documentos
Cultura Documentos
BLUMENAU
2014
2014/1-05
BLUMENAU
2014
2014/1-05
Presidente:
______________________________________________________
Profa. Joyce Martins, Mestre Orientadora, FURB
Membro:
______________________________________________________
Prof. Aurlio Faustino Hoppe, Mestre FURB
Membro:
______________________________________________________
Prof. Francisco Adell Pricas, Mestre FURB
AGRADECIMENTOS
RESUMO
Este trabalho tem por objetivo o controle de um rob Lego NXT por reconhecimento de voz
por fala contnua. Para tanto foi utilizada a engine Julius encapsulada atravs da LapsAPI para
o reconhecimento de voz. Foi elaborada uma linguagem aceita pelo rob utilizando a BackusNaur Form (BNF). Os comandos de voz so processados pelo programa e enviados via
bluetooth para o rob Lego NXT que executa a ao conforme o comando transmitido. O
objetivo principal de o rob reconhecer os comandos por fala contnua foi alcanado, mas por
limitaes fsicas relacionadas com as esteiras responsveis pela locomoo, o rob no
executa esses comandos de forma correta. O reconhecimento dos comandos foi demonstrado
com a captao de voz de dez locutores com caractersticas diferentes, como idade e sexo,
mostrando que a aplicao com a engine Julius independente de locutor.
Palavras-chave: Reconhecimento de fala contnua. Engine Julius. Lego NXT.
ABSTRACT
The objective of this paper is to control a Lego NXT robot by continuous voice recognition.
For that, it was used Julius engine encapsulated through LapsAPI for the voice recognition. It
was developed a language accepted by the robot using the Backus-Naur Form. The voice
command is processed by the program and sent via bluetooth to the Lego NXT robot that
performs the action accordingly to the command transmitted. The main goal of the robot, to
recognize command by speech, was reached. But because of the physical limitations of the
tracks responsible for the locomotion, it does not execute those commands properly. The
recognition of controls was demonstrated with the voice pickup of ten speakers from different
characteristics, such as age and sex, showing that the application with the Julius engine is
independent of speaker.
Key-words: Speech recognition. Julius engine. Lego NXT.
LISTA DE ILUSTRAES
LISTA DE TABELAS
LISTA DE SIGLAS
SUMRIO
1 INTRODUO .................................................................................................................. 13
1.1 OBJETIVOS DO TRABALHO ........................................................................................ 13
1.2 ESTRUTURA DO TRABALHO ...................................................................................... 14
2 FUNDAMENTAO TERICA .................................................................................... 15
2.1 RECONHECIMENTO DE VOZ ...................................................................................... 15
2.2 ENGINE JULIUS .............................................................................................................. 16
2.2.1 Modelo acstico .............................................................................................................. 18
2.2.2 Modelo de linguagem ...................................................................................................... 19
2.2.3 LapsAPI .......................................................................................................................... 20
2.3 ROB LEGO NXT ........................................................................................................... 21
2.4 TRABALHOS CORRELATOS ........................................................................................ 23
2.4.1 Reconhecimento automtico de fala por computador ..................................................... 23
2.4.2 Reconhecimento de voz para aplicao em cadeira de rodas ......................................... 24
2.4.3 Reconhecimento de voz atravs de reconhecimento de padres .................................... 25
3 DESENVOLVIMENTO .................................................................................................... 27
3.1 REQUISITOS PRINCIPAIS DO SISTEMA .................................................................... 27
3.2 ROB LEGO NXT ........................................................................................................... 27
3.2.1 Montagem do rob .......................................................................................................... 27
3.2.2 Especificao da inteligncia do rob ............................................................................. 30
3.2.3 Implementao da inteligncia do rob .......................................................................... 32
3.3 LINGUAGEM ................................................................................................................... 34
3.3.1 Especificao da linguagem ............................................................................................ 34
3.3.2 Compilao do modelo de linguagem ............................................................................. 36
3.4 RECONHECIMENTO DE VOZ ...................................................................................... 36
3.4.1 Especificao do reconhecimento de voz ....................................................................... 37
3.4.2 Implementao do reconhecimento de voz ..................................................................... 40
3.5 IMPLEMENTAO ........................................................................................................ 41
3.5.1 Tcnicas e ferramentas utilizadas.................................................................................... 41
3.5.2 Operacionalidade da ferramenta ..................................................................................... 42
3.6 RESULTADOS E DISCUSSO ...................................................................................... 43
4 CONCLUSES .................................................................................................................. 47
13
1 INTRODUO
Desde a pr-histria o homem tem usado sua inteligncia para aumentar seu conforto e
reduzir seus esforos. Neste sentido, os servios digitais so uma tima soluo para o homem
moderno. Na sociedade atual a demanda pelo crescente avano tecnolgico, atravs da
busca de novos meios para disseminar informaes com alta velocidade e desempenho. Uma
destas tecnologias usa o controle de voz para possibilitar a execuo de tarefas simples em
paralelo, como, por exemplo, dirigir um carro e atender o telefone celular, controlar um ou
vrios robs na execuo de tarefas ou movimentar objetos, permitindo comandar aparelhos
eletrnicos sem contato fsico direto. Pode-se citar tambm a possibilidade de uma pessoa
com deficincia de locomoo controlar por voz uma cadeira de rodas (BARCELOS et al.,
2008). Sistemas deste tipo so conhecidos como de Reconhecimento Automtico de Voz
(RAV).
Segundo Ynoguti (1999, p. 8), um sistema RAV consiste em mapear um sinal acstico
capturado de um transdutor (usualmente um microfone) em um conjunto de palavras. A partir
deste conjunto de palavras pode-se originar comandos para que determinado objeto realize
uma ao. Geralmente um sistema RAV tem como entrada um sinal de fala e como sada as
palavras reconhecidas. Existem algumas solues para sistemas RAV, entre as quais, cita-se
Dragon (NUANCE COMMUNICATION, 2013), que reconhece sequncias de palavras e no
somente palavras isoladas, e a engine Julius (LEE, 2009), que reconhece desde palavras
isoladas at sequncias contnuas de palavras, podendo trabalhar com um grande vocabulrio.
A engine Julius funciona como uma Dynamic Link Library (DLL), sendo, de acordo
com Lee (2009), um decodificador de alta performance para Large Vocabulary Continuous
Speech Recognition (LVCSR). Julius utiliza dois modelos para o reconhecimento de voz, o
modelo acstico e o modelo de linguagem. O modelo acstico determina um modelo
matemtico que representa a palavra a ser processada, enquanto o modelo de linguagem
permite que o processamento possa ser feito de forma mais rpida e precisa.
Diante do exposto, foi proposto o desenvolvimento de uma aplicao com o objetivo
de mostrar a capacidade de reconhecimento de voz da engine Julius para fala contnua. Para
tanto, foi definido um modelo de linguagem para comandar um rob Lego NXT.
1.1 OBJETIVOS DO TRABALHO
Este trabalho tem como objetivo principal desenvolver uma aplicao para efetuar
controle por voz utilizando a engine Julius com fala contnua.
Os objetivos especficos do trabalho so:
14
15
2 FUNDAMENTAO TERICA
Este captulo est divido em quatro sees. A seo 2.1 trata brevemente do histrico
do reconhecimento de voz, alm de enumerar alguns problemas relacionados ao
reconhecimento de voz. A seo 2.2 apresenta a engine Julius e o seu funcionamento. A seo
2.3 traz uma viso geral sobre o Lego NXT e a ferramenta LeJOS. Por fim, a seo 2.4 mostra
trs trabalhos correlatos a este.
2.1 RECONHECIMENTO DE VOZ
Antes mesmo da computao ser o que se conhece hoje, muitos esforos foram feitos
para que aparelhos eletrnicos reconhecessem a voz humana. Percursor nesse tipo de
pesquisa, o Bell Telephone Laboratories desenvolveu em 1952 um circuito que reconhecia os
dgitos de 0 a 9. Este reconhecimento era baseado nas medidas de ressonncias espectrais das
vogais de cada dgito (DAVIS; BIDULPH; BALASHEK, 1952).
Na dcada de 70 o Departamento de Defesa dos Estados Unidos da Amrica atravs da
Advanced Reserch Project Agency (ARPA) investiu muito tempo e dinheiro para melhorar as
aplicaes de reconhecimento de voz. A ARPA tinha objetivos claros de simplificar o
problema de reconhecimento de voz aplicando regras sintticas e semnticas, alm de
melhorar a tecnologia j existente. Surgiram analisadores lxico, sinttico e semntico para o
reconhecimento de palavras, alm de um grande avano na forma como sistemas RAV so
desenvolvidos (KLATT, 1990, p. 563).
Nos anos 80, vrios pesquisadores iniciaram pesquisas para reconhecimento de
palavras conectadas utilizando mtodos de modelos estatsticos, sendo o maior
destaque para os modelos ocultos de Markov (Hidden Markov Models (HMM))
usados para modelar sries temporais, como por exemplo a voz. Alm disso, um
estudo mais profundo mostrou a possibilidade de aplicao de redes neurais na
classificao de sinais. (SILVA, 2010, p. 6).
Segundo Silva (2010, p. 6), j existem bancos de dados de voz com mais de 180 horas
de treinamento para o ingls, mas essa no a realidade do portugus do Brasil.
primeira vista, o processo de reconhecer a voz humana pode parecer simples por
ser algo que o ser humano capaz de fazer naturalmente e sem esforo. Contudo,
fazer com que uma mquina seja capaz de reconhecer a voz humana um problema
muito complexo, envolvendo diversas reas de conhecimento. (OLIVEIRA, 2002, p.
10).
16
Segundo Silva (2010, p. 9), mesmo com tantos avanos na rea da computao e do
reconhecimento de palavras, o entendimento completo da fala humana por um computador
um processo complexo. Alguns fatores relacionados so:
a) a mesma palavra pronunciada vrias vezes pode apresentar caractersticas
diferentes devido articulao dos rgos do aparelho fonador (SILVA, 2010, p.
9);
b) o sotaque do locutor tem grande influncia na forma como a palavra pronunciada
(LOUZADA, 2010, p. 13), o que dificulta a implementao do reconhecimento do
portugus do Brasil que, por ser um pas de tamanho continental e ter sofrido
influncia na colonizao por vrios povos, tem sotaques muito variados;
c) em idiomas que possuem um vocabulrio muito extenso, como o portugus do
Brasil, existem vrias palavras com a mesma pronncia e significados diferentes,
como por exemplo: sesso e cesso, concerto e conserto, mas e mais, entre outras
(SILVA, 2010, p. 9);
d) a pronncia de uma palavra pode variar de locutor para locutor, sendo que alguns
podem falar mais rpido ou engolir slabas e letras (LOUZADA, 2010, p. 13);
e) a relao sinal-rudo influencia o reconhecimento de voz, pois quanto menos rudo
perto da fonte de entrada de udio, melhor ser o reconhecimento, enquanto
ambientes com muito rudo prejudicam o desempenho do reconhecedor de voz
(SILVA, 2010, p. 9).
Atualmente existem muitas ferramentas de reconhecimento de voz, geralmente
adaptadas para reconhecer idiomas como o ingls e o mandarim. Entre estas ferramentas,
pode-se citar a engine Julius.
2.2 ENGINE JULIUS
A engine Julius um software open-source de reconhecimento de voz, eficaz no
processamento de voz em tempo real, utilizada tanto no meio acadmico como industrial
(LEE, 2009), que vem sendo desenvolvida desde 1998 na Kyoto University. Muitos institutos
do Japo utilizam-na em pesquisas em vrios idiomas, como ingls, francs, mandarim,
eslovenio, koreano, entre outros (LEE; KAWAHARA, 2009, p. 131).
A engine Julius foi escrita em C puro, rodando nas plataformas Windows, Linux, Mac
OS e iOS. distribuda atravs de uma licena parecida com a Berkeley Software Distribution
(BSD), onde no h restrio na utilizao para o desenvolvimento de pesquisa, comercial e
industrial (LEE; KAWAHARA, 2009, p. 131).
17
A entrada de dados para a engine pode ser atravs de microfone, de arquivos de udio
ou de sockets de rede. A sada pode ser um arquivo texto com as palavras reconhecidas ou a
sada padro da linguagem de programao utilizada, em geral mostrando na tela as palavras
reconhecidas.
A aplicao que utiliza a engine Julius pode interagir de duas formas: atravs de um
socket baseado em cliente-servidor ou atravs de uma DLL (LEE; KAWAHARA, 2009, p.
131). No entanto, a maneira mais difundida a utilizao da engine Julius encapsulada como
DLL, sendo as funes de reconhecimento chamadas pela aplicao que a utiliza.
Um modelo acstico (Acoustic Model) e um modelo de linguagem (Language Model)
so necessrios para executar o reconhecimento de voz (LEE, 2009).
Na Figura 2 pode-se observar como a engine Julius funciona internamente.
Figura 2 Por dentro da engine Julius
18
...
azzurra a z z u R a
baba
b a b a
bab
b a b a
babaca b a b a k a
...
mundo
m u~ d u
...
oi
o j
...
ol
o l a
...
saturno
s a t u R n u
...
19
Pode-se observar no Quadro 2 que existe um smbolo inicial FALA que faz referncia s
palavras reservadas INICIO e FIM e ao smbolo FRASE, que, por sua vez, tem duas palavras
reservadas (SAUDACAO e MUNDO).
O arquivo .voca (Quadro 3) descreve cada palavra reservada, sendo que a cada uma
delas podem estar associadas vrias palavras. O arquivo possui: a palavra reservada usada na
especificao das restries sintticas e a palavra que propriamente reconhecida,
acompanhada por seu conjunto de fonemas. O reconhecedor do Julius utiliza esses fonemas
para o reconhecimento da palavra.
Quadro 3 Arquivo .voca
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
% INICIO
<s>
sil
% FIM
<\s>
sil
% SAUDACAO
ol
o l a
oi
o j
% MUNDO
Mundo
Marte
Lua
Saturno
m
m
l
s
u~ d u
a X tS i
u a
a t u R n u
20
2.2.3 LapsAPI
Para facilitar a programao, o LaPS construiu uma Application Programming
Interface (API) que encapsula a engine Julius. Ela foi desenvolvida em C++ com a
especificao Common Language Runtime (CLR), para o funcionamento em todas as
linguagens prevista para a plataforma .NET. A proposta da API controlar a engine Julius em
tempo real, bem como a interface de entrada de udio do sistema (KLAUTAU et al., 2012).
Na Figura 3 observa-se a ligao da API com a interface do Julius. Comparando a
Figura 3 com a Figura 1, verifica-se que a API fica entre o Julius e a aplicao. Alm disso, a
API pode usar uma gramtica (Grammar.XML) especificada com eXtensible Markup Language
(XML).
Figura 3 Ligao da API com a engine Julius
Segundo Louzada (2010, p. 25), usar XML para especificar o modelo de linguagem
facilita o desenvolvimento da gramtica. O modelo especificado com o padro Speech
Recognition Grammar Specification (SRGS) definido pela World Wide Web Consortium
(W3C), que composto por tags de controle. O Quadro 4 traz um exemplo desse padro.
Quadro 4 Exemplo de gramtica especificada com SRGS
1.
2.
3.
4.
5.
6.
7.
8.
9.
<GRAMMAR>
<RULE>
<LIST>
<P>UM</P>
<P>DOIS</P>
<P>TRES</P>
</LIST>
</RULE>
</GRAMMAR>
21
A API faz a ponte com a engine Julius atravs do construtor, carregando todos os
arquivos de configurao necessrios. Para tanto, deve-se criar um objeto da classe SREngine
(Quadro 5 - linha 1) e dar incio ao processo de reconhecimento atravs da chamada ao
metodo startRecognition (Quadro 5 linha 2).
Quadro 5 Mtodos para uso da LapsAPI
1.
2.
22
Os programas criados para o Lego NXT podem ser enviados do computador para o
rob via porta Universal Serial Bus (USB) ou por bluetooth. Depois de serem gravados na
memria do rob, podem ser executados.
O Lego NXT pode ser programado de vrias maneiras, sendo uma delas com a
linguagem de programao visual NXT-G (PESTANA, 2008, p. 14) que acompanha o kit
Lego Mindstorms NXT. Outra maneira de programar o Lego NXT utilizando a API Lego
Java Operating System (LeJOS). Segundo Pestana (2008, p. 17), LeJOS tanto uma API
para a programao do Lego NXT na linguagem de programao Java, quanto um firmware
substituto para o firmware original que acompanha a UCP do Lego NXT.
Souza e Tavares (2013, p. 350) afirmam que possvel baixar um pacote do LeJOS,
encontrado para as plataformas Windows, Linux e MacOS, contendo:
a) o firmware para substituir o firmware original presente no bloco do Lego NXT;
b) uma biblioteca para auxiliar no desenvolvimento de aplicativos para computador e
para o bloco do Lego NXT;
c) um tradutor para transformar o cdigo Java em uma linguagem compreendida pelo
Lego NXT;
d) vrios exemplos de programas e cdigos.
23
24
25
Barcelos et al. (2008) cita a utilizao do IBM ViaVoice como a melhor alternativa
para o processamento de linguagem natural utilizando o portugus do Brasil, tanto pelo
percentual de acerto como pela facilidade de implementao e integrao que se obteve
utilizando a linguagem de programao Visual Basic.
2.4.3 Reconhecimento de voz atravs de reconhecimento de padres
Oliveira (2002) apresenta um sistema RAV, desenvolvido em C++. Baseado em
reconhecimento de padres independente de locutor e em um pequeno vocabulrio, o sistema
reconhece somente palavras isoladas.
O sistema tem duas fases (OLIVEIRA, 2002, p. 18): uma de treinamento e outra de
reconhecimento. Na primeira fase, o locutor treina o sistema com as palavras do vocabulrio,
que so Word, Access, Excel, VB, C++, Internet e Sair. Na fase seguinte, conforme cada
uma destas palavras reconhecida, o sistema apresenta uma caixa de texto perguntando se o
usurio deseja abrir a aplicao correspondente. Caso a resposta seja positiva, a aplicao
26
27
3 DESENVOLVIMENTO
O captulo est dividido em seis sees:
a) mostra os requisitos principais do sistema na primeira seo;
b) passa pela montagem, especificao e implementao do rob Lego NXT na
segunda seo;
c) apresenta a especificao da linguagem utilizada pelo rob Lego NXT e a sua
compilao na seo 3.3;
d) mostra a especificao e a implementao da aplicao de reconhecimento de voz;
e) descreve na seo 3.5 a implementao, as ferramentas utilizadas e a
operacionalidade da ferramenta;
f) apresenta, por fim, os resultados obtidos.
3.1 REQUISITOS PRINCIPAIS DO SISTEMA
O sistema de controle de voz dever:
a) possuir uma interface para a captao de voz (Requisito Funcional - RF);
b) possuir uma gramtica para reconhecer os comandos (RF);
c) gerar comando de controle para o rob Lego NXT (RF);
d) utilizar a engine Julius juntamente com a LapsAPI (Requisito No Funcional RNF);
e) usar um rob Lego NXT para a execuo dos comandos (RNF);
f) transmitir via bluetooth os comandos para o rob Lego NXT (RNF);
g) ter a inteligncia do rob Lego NXT implementada na linguagem de programao
Java com a Integrated Development Environment (IDE) Eclipse (RNF);
h) ter a interface de captao de voz implementada na linguagem de programao C#
com a IDE Visual Studio (RNF).
3.2 ROB LEGO NXT
Esta seo apresenta a montagem do rob Lego NXT, a especificao do mesmo e a
sua implementao.
3.2.1 Montagem do rob
O rob Lego NXT foi montado com peas disponibilizadas pela Universidade
Regional de Blumenau (FURB), atravs do Laboratrio de Robtica do Departamento de
Sistemas Computao.
28
29
Figura 11 JohnNXT
30
A Figura 13 traz uma viso lateral do rob, dividindo as partes do corpo, onde observase:
a) a cabea do rob, na qual foi utilizado o sensor ultrassnico para obter uma
expresso mais humanoide;
b) o servo-motor que movimenta a cabea;
c) o brao e o servo-motor que o movimenta;
d) o servo-motor que movimenta o tronco para cima e para baixo;
e) as esteiras de locomoo e os servos-motores que as movimentam;
f) o bloco UCP NXT I;
g) o bloco UCP NXT II.
Figura 13 Rob montado, viso lateral
e tcc.inteligencia.
31
32
os seus motores. Cada uma das classes possui mtodos para movimentar o membro
correspondente, sendo que a classe Braco tem os comandos para controlar tanto o brao
esquerdo como o brao direito. Todas as classes desse pacote possuem uma generalizao
para a classe Thread. Por serem independentes entre si, podem realizar operaes em
paralelo.
O pacote tcc.inteligencia faz a separao fsica e lgica dos blocos de UCP do
rob Lego NXT. Cada classe responsvel por receber um comando de um canal de
comunicao e process-lo, agindo assim nos respectivos membros. No Quadro 7 so
apresentados os membros do rob e a classe responsvel pelo mesmo.
Quadro 7 Membros x classes do pacote tcc.inteligencia
membro
classe
NXTII
brao
NXTI
cabea
NXTI
esteira
NXTII
tronco
33
uma delas responsvel por uma parte do rob (conforme mostrado no Quadro 7) e faz com
que o membro correspondente execute o comando de voz recebido.
O comando transmitido como um array de bytes. Verifica-se na linha 3 do Quadro 9
a leitura desse array. Sabe-se que o array tem nove posies e que a posio que contm o
comando a quinta. Os bytes recebidos so percorridos um a um, convertidos para inteiro e
armazenados na varivel comandoRecebido. Na linha 6 tem-se a atribuio varivel
comando
Busca-se com isso aumentar a legibilidade do cdigo, associando nmeros aos comandos que
representam os movimentos que o rob deve executar. Por fim, na linha 1 do Quadro 9 tem-se
a condio de parada. Quando o comando PARE for recebido, o rob ir encerrar a execuo
nos dois blocos de UCP.
Quadro 9 Processamento do comando de voz recebido
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Uma vez definido o comando que o rob deve executar (Quadro 9, linha 6),
selecionada a ao correspondente (Quadro 10, linha 1 a 7). Aps o start da ao, a varivel
comando
1.
2.
3.
4.
5.
6.
7.
switch (comando) {
case ANDE:
new Esteira(Comando.ANDE).start();
break;
...
default: break;
}
34
indicam engine Julius que o COMANDO a ser reconhecido deve ter um perodo
35
%silencio_inicio
<s>
%silencio_fim
</s>
%locomover
ande
corra
%mover
baixe
levante
%virar
gire
vire
%mexer
mexa
%parar
pare
%cabeca
cabea
%tronco
tronco
%membro
brao
%membros
braos
%direita
direita
%esquerda
esquerda
%direcao
direita
esquerda
trs
frente
%lado
direito
esquerdo
%a
a
%o
o
%os
os
%para
para
sil
sil
a~ dZ i
k o R a
b a j S i
l e v a~ tS i
Z i r i
v i r i
m e S
p a r i
k a b e s a
t r o~
k u
b r a s u
b r a s u s
dZ i r e j t a
e s k
e R d a
dZ i r e j t a
e s k e R d a
t r a j s
f r e~ tS i
dZ i r e j t u
e s k e R d u
a
u
u s
p a r a
36
(Apndice D).
Figura 15 Compilao dos arquivos .grammar e .voca
37
38
A aplicao tem apenas uma classe, mostrada na Figura 17, que faz a ponte entre a
captao de voz, o processamento de voz e a sada para o rob. Pode-se destacar que:
a) engine a instncia da LapsAPI que, por sua vez, encapsula a engine Julius;
b) bluetoothConnectionsNXTI e bluetoothConnectionsNXTII representam as
conexes bluetooth;
c) NXTI e NXTII so variveis booleanas que mostram se as UCPs esto conectadas;
d) o metodo mandarMensagem encaminha uma mensagem via bluetooth para o rob
Lego NXT com o comando reconhecido pelo mtodo handleResult;
e) o mtodo handleResult reconhece o comando falado e faz a classificao da
mensagem que deve enviar para o rob Lego NXT;
f) o mtodo iniciarReconhecimento inicializa a engine Julius;
g) os mtodos conectarNXTI e conectarNXTII so responsveis por estabelecer a
conexo com o rob;
h) o mtodo setTextBoxText possui duas funes, fazer conexo entre a thread
iniciada com a engine Julius e os objetos da interface (atravs do CrossThread),
exibir o comando reconhecido junto com o seu grau de confiana (atravs do
setText).
39
40
rob recebe o array de bytes com a mensagem e executa o mtodo inteligncia, que
identifica o comando recebido e processa a ao correspondente, iniciando, no caso, o
Comando.ANDE.
instncias de MotorEsteira, uma para o motor da esquerda e outra para o motor da direita.
Essas, por sua vez, processam o comando recebido e fazem com que o rob se mova para
frente.
3.4.2 Implementao do reconhecimento de voz
Para a implementao do reconhecimento de voz, foi utilizado como base o cdigo
fornecido pelo LaPS (KLAUTAU et al., 2012). Eles fornecem o cdigo do Coruja 0.2,
programa que reconhece palavras isoladas e pode ser facilmente adaptado para fala contnua.
Alguns pontos importantes da implementao devem ser destacados. O Quadro 17 traz
a inicializao da engine Julius, onde: na linha 1 feita a declarao de engine, responsvel
por receber os parmetros para iniciar o reconhecimento; na linha 3 tem-se a inicializao
propriamente dita com o arquivo de configurao da engine Julius, que contm as chamadas
para o processamento do modelo acstico e do modelo de linguagem; na linha 4 chamado o
mtodo que faz o reconhecimento de voz.
Quadro 17 Cdigo de inicializao da engine Julius
1.
2.
3.
4.
A parte mais importante da implementao a seleo dos cdigos dos comandos que
sero passados para o rob via bluetooth. Pode-se verificar no Quadro 18 na linha 1 que
somente so processados os comandos que tenham um grau de confiana no reconhecimento
superior a 80%. O comando reconhecido e o grau de confiana so apresentados em tela. Em
seguida (linhas 4 a 9), so selecionadas as aes que devem ser enviadas ao rob. Caso o
comando reconhecido seja " <s> pare </s>"1 (Quadro 18, linha 5), so enviadas duas
mensagens, ambas com o cdigo 0, que indicam que o rob deve executar o Comando.PARE
Todos os comandos reconhecidos possuem as tags de incio de silncio e final de silncio, conforme
especificado no modelo de linguagem.
41
nas duas UCPs, ou seja, que o prximo comando a ser executado a parada total do rob. O
reconhecimento dos outros comandos obedece a mesma lgica.
Quadro 18 Seleo do comando a ser enviado para o rob
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
3.5 IMPLEMENTAO
Nesta seo so vistas as tcnicas utilizadas para a implementao e a
operacionalidade da aplicao.
3.5.1 Tcnicas e ferramentas utilizadas
As tcnicas e ferramentas utilizadas no desenvolvimento desse trabalho foram:
a) no desenvolvimento dos programas para o Lego NXT foi utilizado o Eclipse
juntamente com o plugin para o LeJOS;
b) no desenvolvimento da aplicao de reconhecimento de voz foi utilizado o Visual
Studio;
c) para o reconhecimento de fala contnua foi usada a LapsAPI juntamente com o
modelo acstico do idioma LaPSAM 1.5, sendo que para a configurao da engine
Julius foi utilizado um arquivo fornecido pelo LaPS (LaPSAM1.5.jconf) que pode
ser conferido na sua ntegra no Anexo A.
Quanto ao uso do Eclipse juntamente com o plugin para o LeJOS, verifica-se, na
Figura 19, que o Eclipse tem novos cones, quais sejam:
a) a pasta de projeto recebe um J no canto direito superior;
b) a barra de ferramentas tem um boto para o donwload do firmware para o Lego
NXT.
Observa-se tambm que LeJOS facilita a programao do Lego NXT, tendo uma
classe para cada sensor e algumas classes para o servo-motor. Dessa forma, possvel dar
movimento a um servo-motor executando o seguinte comando Motor.A.rotate(360) que
faz o servo-motor girar 360 no eixo da sua parte mvel.
42
Aps parear as UCPs do Lego NXT com o computador que est rodando a aplicao, o
usurio deve informar as portas COMs para cada uma das UCPs do rob Lego NXT nos
campos ao lado dos botes NXT I - Conectar e NXT II Conectar e pressionar nos
botes para que a conexo seja estabelecida. Quando os botes mudarem a descrio para
Conectado,
a conexo foi estabelecida com sucesso. O usurio deve ento clicar no boto
43
Iniciar Reconhecimento.
texto abaixo desse boto, o usurio pode dizer os comandos que quer que o rob realize.
Conforme o usurio for falando, a aplicao indica se o comando foi reconhecido ou no. Os
comandos reconhecidos so apresentados juntamente com o grau de confiabilidade, enquanto
que para os comandos no reconhecidos apresentada a mensagem Comando no
reconhecido.
respectivo comando, que transferida via bluetooth para que o rob, ao receb-la, execute a
ao correspondente.
3.6 RESULTADOS E DISCUSSO
O presente trabalho apresentou a especificao de uma linguagem para o controle por
voz de um rob Lego NXT, mostrando a capacidade de reconhecimento de palavras e
sequncias de palavras da engine Julius. A aplicao se mostrou funcional, conseguindo
captar e processar os sinais acsticos, enfatizando que a engine Julius tem um bom
funcionamento para o reconhecimento de fala. Para que o reconhecimento fosse mais
eficiente, foi necessria a definio de uma linguagem mais restrita, onde os comandos so
frases imperativas com no mximo cinco palavras. O ganho no grau de confiana no
reconhecimento de uma sequncia de palavras foi evidente, embora no trabalho de Louzada
(2010) o grau de confiana tenha sido mais alto do que os 80% utilizados nesse trabalho. Isso
porque aquele autor reconhecia uma linguagem com palavras isoladas.
Para a obteno dos 80% utilizados como grau de confiana, foi analisada uma
populao com dez locutores, sendo composta por seis mulheres entre 6 a 43 anos de idade e
quatro homens entre 24 e 57 anos de idade. As vozes foram captadas durante a noite
utilizando um microfone externo, que se mostrou mais eficiente que o microfone do notebook,
calibrado para um volume de 80 pontos atravs da rea de configurao de gravao no
sistema operacional Windows. O locutor falava cada comando e o sistema apresentava o grau
de confiana. Os resultados foram tabelados para estudo (Tabela 1).
44
comando / locutor
ande
ande para frente
ande para direita
ande para esquerda
ande para trs
baixe os braos
baixe o brao direito
baixe o brao esquerdo
baixe o tronco
corra
corra para frente
corra para direita
corra para esquerda
corra para trs
gire para esquerda
gire para direita
levante os braos
levante o brao direito
levante o brao esquerdo
levante o tronco
brao direito
brao esquerdo
mexa a cabea para direita
mexa a cabea para esquerda
mexa o tronco
cabea para direita
cabea para esquerda
pare
vire para direita
vire para esquerda
M6
0,38
0,00
0,83
1,00
0,97
1,00
0,00
0,00
0,70
0,99
0,83
0,00
0,94
0,82
0,74
1,00
0,00
0,00
0,00
0,00
0,00
0,00
0,90
0,90
0,98
0,83
0,00
1,00
0,00
0,00
M21
1,00
1,00
0,83
0,83
1,00
1,00
1,00
1,00
1,00
1,00
1,00
0,83
0,83
1,00
0,83
0,82
1,00
1,00
0,99
0,98
1,00
1,00
0,90
0,90
1,00
0,83
0,83
1,00
0,83
0,83
H31-1
1,00
1,00
0,83
0,83
1,00
1,00
1,00
0,00
1,00
1,00
1,00
0,83
0,83
1,00
0,00
0,00
1,00
0,00
0,00
1,00
1,00
0,99
0,90
0,81
1,00
0,83
0,67
1,00
0,72
0,81
H31-2
1,00
1,00
0,83
0,83
1,00
1,00
1,00
0,00
1,00
1,00
1,00
0,83
0,83
1,00
0,83
0,00
1,00
1,00
1,00
1,00
1,00
1,00
0,90
0,90
1,00
0,67
0,67
1,00
0,75
0,83
H57
1,00
1,00
0,83
0,83
1,00
1,00
1,00
1,00
1,00
1,00
1,00
0,83
0,83
1,00
0,83
0,83
1,00
1,00
1,00
1,00
1,00
1,00
0,90
0,90
1,00
0,83
0,83
1,00
0,83
0,83
mdia
0,84
1,00
0,83
0,83
1,00
1,00
1,00
0,71
1,00
1,00
1,00
0,83
0,83
1,00
0,67
0,54
1,00
0,86
0,71
1,00
1,00
1,00
0,90
0,89
0,97
0,81
0,79
1,00
0,80
0,83
0,89
desvio padro
0,34
0,32
0,00
0,00
0,00
0,01
0,00
0,48
0,42
0,09
0,00
0,00
0,26
0,02
0,26
0,33
0,00
0,42
0,48
0,31
0,32
0,32
0,00
0,03
0,04
0,05
0,26
0,00
0,26
0,26
0,13
45
A Tabela 1 mostra o grau de confiana de cada comando captado para cada locutor.
Pode-se verificar que foram obtidos valores fechados em 100% para comandos que foram
melhor pronunciados pelos locutores, tais como ande para direita, ande para esquerda,
ande para trs, baixe o brao direito, corra para frente, corra para direita,
levante os braos, mexa a cabea para direita
de confiana muito baixo para os comandos para executar giros (gire para esquerda, gire
para direita),
decidir sobre a utilizao de 80% como um bom nmero para o filtro do grau de confiana,
calculou-se a mdia de todos os comandos que no alcanaram a mdia de 100% e obteve-se
o valor de 80% como mdia.
O maior agravante no reconhecimento de voz foi o rudo gerado, tanto pelo microfone
como pelo ambiente. Como a engine Julius no consegue filtrar todo o rudo gerado, foram
reconhecidas vrias sentenas com grau de confiana abaixo dos 80% filtrados pela aplicao
ou diferentes do que foi de fato falado. No ltimo caso, muitas vezes resultava na execuo do
comando PARE, ou seja, na parada total do rob. Alm disso, ao iniciar o reconhecimento de
voz, percebeu-se que, independente do que seja falado, o primeiro comando reconhecido
sempre ANDE. Essa situao ainda no foi solucionada.
A montagem do rob foi complicada, principalmente por no estarem disponveis no
Laboratrio de Robtica muitas das peas necessrias, dificultando e atrasando a finalizao
do mesmo. Esteticamente, constatou-se que o rob pende levemente para a esquerda, mas isso
no parece influenciar nos movimentos realizados. Uma dificuldade evidente a locomoo
do rob. As peas de plstico facilitam o deslizamento do mesmo em diversas superfcies,
fazendo com que o rob execute os comandos de locomoo de forma a no parecerem
completos. Observou-se que quanto mais larga a esteira utilizada, melhor se torna a
locomoo.
Quanto aos trabalhos correlatos, o Quadro 19 traz uma comparao entre eles e o
trabalho desenvolvido.
46
Verificou-se que:
a)
47
4 CONCLUSES
Cada vez mais as pessoas realizam atividades utilizando aparelhos eletrnicos. Assim,
so necessrias maneiras alternativas para manipul-los, sendo o controle por voz uma
soluo vivel e bastante desejada atualmente.
Neste sentido, este trabalho apresentou o desenvolvimento de uma aplicao para
efetuar controle por voz com fala contnua de um rob Lego NXT. Para tanto, foi utilizada a
engine Julius, que d suporte para sistemas RAV, facilitando a implementao de solues de
reconhecimento e controle por voz. A gramtica elaborada atravs do modelo de linguagem
facilitou o reconhecimento. O modelo acstico utilizado foi o corpora criado pelo LaPS
(KLAUTAU et al., 2012), que se mostrou adequado para a aplicao desenvolvida, no sendo
necessria uma fase de treinamento. Foi definido um vocabulrio independente de locutor e
com o reconhecimento de sequncias de palavras e no apenas palavras isoladas, permitindo
alcanar os objetivos propostos.
A utilizao da engine Julius juntamente com a API LapSAPI foram de grande valia
para a concluso desse trabalho, mostrando que a especificao e o reconhecimento por voz
de uma linguagem, mesmo que restrita, feita de forma simples. Ainda, as demais
ferramentas utilizadas ajudaram para a finalizao desse trabalho, sendo o Lego Digital
Designer (LEGO GROUP, 2013) usado na especificao do esquema de montagem do rob,
uma adaptao do JohnNXT proposto por Benedittelli (2008), e a biblioteca do LeJOS usada
para a programao do Lego NXT.
A anlise de dados se mostrou importante, uma para justificar o grau de confiana de
80% utilizado como filtro e outra para mostrar que a fonte de entrada de voz muito
importante, visto que nos primeiros testes desse trabalho se usou um microfone interno
(embutido no notebook) e depois se optou por uma verso externa e um pouco mais robusta,
aumentando assim o grau de confiana das sentenas.
4.1 EXTENSES
Existem pontos que podem ser melhorados ou incrementados, originando trabalhos
futuros, quais sejam:
a) aumentar o vocabulrio reconhecido pelo rob, permitindo a passagem de
parmetros para representar velocidade, total de passos ou distncia pretendidos,
como por exemplo ande na velocidade 3 por 150 centmetros;
b) utilizar o sensor ultrassnico do Lego NXT como um sensor de aproximao,
sendo possvel o rob detectar obstculos frente e parar o movimento dos
48
49
REFERNCIAS
ARDUINO. What Arduino can do. [S.l.], 2014. Disponvel em: <http://arduino.cc/>. Acesso
em: 22 jun. 2014.
BARCELOS, Arlei et al. Reconhecimento de voz para aplicao em cadeira de rodas. In:
SIMPSIO DE EXCELNCIA EM GESTO E TECNOLOGIA, 5., 2008, Resende. Anais
eletrnicos... Resende: AEDB, 2008. No paginado. Disponvel em:
<http://www.aedb.br/seget/artigos08/445_Reconhecimento%20de%20Voz%20aplicado%20n
a%20cadeira%20de%20rodas.pdf>. Acesso em: 29 mar. 2013.
BENEDETTELLI, Daniele. Creating cool Mindstorms NXT robots. Berkeley: Apress,
2008.
DAVIS, K. H.; BIDULPH, R.; BALASHEK, S. Automatic recognition of spoken digits. The
Journal of the Acoustical Society of America, [S.l.], v. 24, n. 6. p. 637-642, Nov. 1952.
Disponvel em: <http://www.idemployee.id.tue.nl/g.w.m.rauterberg/presentations/belllabs.pdf>. Acesso em: 05 maio 2014.
KLATT, Denis H. Review of the ARPA speech understanding project. In: WAIBEL,
Alexander; LEE, Kai-Fu (Ed.). Readings in speech recognition. San Mateo: Morgan
Kaufmann Publishers, 1990. p. 554-575. Disponvel em:
<http://books.google.com.br/books?id=iDHgboYRzmgC&pg=PA554&lpg=PA554&dq=ARP
A+Speech+Understanding+Project&source=bl&ots=jaeSCVTlgK&sig=d2JaO5Ksg9z0x6Gm
CBW0gimf76U&hl=pt-BR&sa=X&ei=6_VrU6LAArC-sQSooD4CQ&ved=0CFMQ6AEwBA#v=onepage&q=ARPA%20Speech%20Understanding%20
Project&f=false>. Acesso em: 08 maio 2014.
KLAUTAU, Aldebaro et al. Reconhecimento de voz para o portugus brasileiro. [S.l.],
2012. Disponvel em: <http://www.laps.ufpa.br/falabrasil/downloads.php>. Acesso em: 04
abr. 2013.
LEE, Akinobu; KAWAHARA, Tatsuya. Recent development of open-source speech
recognition engine Julius. In: ASIA-PACIFIC SIGNAL AND INFORMATION
PROCESSING ASSOCIATION ANNUAL SUMMIT AND CONFERENCES, 1., 2009,
Hokkaido. Proceedings... Hokkaido: APSIPA, 2009. p. 131-137. Disponvel em:
<http://www.ar.media.kyoto-u.ac.jp/EN/bib/intl/LEE-APSIPA09.pdf >. Acesso em: 29 mar.
2013.
LEE, Akinobu. The Julius book. [S.l.], 2009. Disponvel em:
<http://osdn.dl.sourceforge.jp/julius/37581/Juliusbook-part-4.1.2-en.pdf >. Acesso em: 14
abr. 2013.
LEGO GROUP. Lego Mindstorms NXT 2.0. [S.l.], 2013. Disponvel em:
<http://shop.lego.com/en-US/LEGO-MINDSTORMS-NXT-2-0-8547>. Acesso em: 20 abr.
2013.
LOUZADA, Jailton A. Reconhecimento automtico de fala por computador. 2010. 52 f.
Trabalho de Concluso de Curso (Bacharelado em Cincia da Computao) Departamento
de Computao, Pontifcia Universidade Catlica de Gois, Gois. Disponvel em:
<http://www.jailtonalkiminlouzada.com/downloads/ASR_Jailton_Alkimin_Louzada.pdf>.
Acesso em: 29 mar. 2013.
50
51
O Quadro 20 relaciona as peas necessrias para a montagem do rob. Para cada pea,
tem-se o cdigo, o nome, a imagem e a quantidade necessria. So necessrias um total de
841 peas. Observa-se que, diferente do modelo proposto por Benedettelli (2008), os braos
foram simplificados com um servo-motor para cada brao, no sendo preciso colocar
correntes para movimentar os mesmos, fazendo com que a quantidade de peas necessrias
seja menor.
Quadro 20 Peas
Brick
Name
4133542
PLATE 2X4
255526
6047885
250
348224
SPOKED HUG
Picture
D17MM
Quantity
363426
4546542
4297174
Ultrasound sensor
52
4297008
Tacho Motor
4296825
NXT
4177444
TECHNIC 2M BEAM
4211862
TECHNIC 2M BEAM
4210751
TECHNIC 3M BEAM
23
4210686
TECHNIC 5M BEAM
10
4211651
TECHNIC 5M BEAM
18
4297199
TECHNIC 7M BEAM
11
4210667
22
4297202
TECHNIC 9M BEAM
13
53
4611705
4297200
3252501
4297203
4542578
4210753
10
4210656
4211668
4537417
4210668
54
4234240
4169492
TECHNIC LEVER 3M
290526
TRIANGLE
4211573
1/2 BUSH
15
4142865
4121715
129
4211815
CROSS AXLE 3M
4666579
4225927
29
4211622
40
55
370526
CROSS AXLE 4M
655826
4514553
33
4514554
3M CONNECTOR PEG
4107081
4114740
CROSS AXLE 5M
4211639
CROSS AXLE 5M
17
4211775
CROSS BLOCK 90
370626
CROSS AXLE 6M
10
4107742
56
4211805
CROSS AXLE 7M
4121667
370726
CROSS AXLE 8M
4107783
4211779
CROSS BLOCK 3M
16
4535768
CROSS AXLE 9M
373726
4211629
4211889
4119589
MODULE BUSH
57
4225033
15
4296059
4211432
471626
WORM
4211565
12
4285634
16
6015596
6015597
4514192
Total:
841
58
0 1 1 0 1
1 2 2 0 2
1 6 2 0 2
1 8 3 0 2
1 9 4 0 2
1 10 5 0 2
1 11 6 0 6
1 12 6 0 6
1 13 7 0 2
1 14 8 0 2
2 0 9 2 0
3 16 10 0 0
4 16 11 0 0
5 17 12 0 0
6 18 13 4 0
7 18 14 0 0
8 9 15 0 0
9 -1 -1 1 0
10 3 2 0 0
10 5 2 0 0
11 3 2 0 0
12 3 2 0 0
13 4 2 0 0
13 7 16 0 0
14 2 2 0 0
15 0 9 2 0
15 16 17 2 0
16 0 9 2 0
16 15 18 2 0
17 3 2 0 0
18 5 2 0 0
59
silencio_inicio
silencio_fim
locomover
mover
virar
mexer
parar
cabeca
tronco
membro
membros
direita
esquerda
direcao
lado
a
o
os
para
60
O Quadro 23 apresenta o comandos.dict. Nesse arquivo cada linha contm, para cada
palavra, a categoria, a palavra reconhecida e os fonemas da palavra.
Quadro 23 Arquivo comandos.dict
0
1
2
2
3
3
4
4
5
6
7
8
9
10
11
12
13
13
13
13
14
14
15
16
17
18
[<s>]
[</s>]
[ande]
[corra]
[baixe]
[levante]
[gire]
[vire]
[mexa]
[pare]
[cabea]
[tronco]
[brao]
[braos]
[direita]
[esquerda]
[direita]
[esquerda]
[trs]
[frente]
[direito]
[esquerdo]
[a]
[o]
[os]
[para]
sil
sil
a~ dZ i
k o R a
b a j S i
l e v a~ tS i
Z i r i
v i r i
m e S a
p a r i
k a b e s a
t r o~ k u
b r a s u
b r a s u s
dZ i r e j t a
e s k e R d a
dZ i r e j t a
e s k e R d a
t r a j s
f r e~ tS i
dZ i r e j t u
e s k e R d u
a
u
u s
p a r a
61
######################################################################
# Julius Conf File
######################################################################
#-lv 3000
#-zc 150
#-headmargin 800
#-tailmargin 900
#-rejectshort 50
#-realtime
#-norealtime
62
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
# 2nd LM
#-nrl
/home/04080002801/lvcsr1.1/LM/HLMToolkit/lms/bigram_HLM_dictionary.rev.lm
# Dictionary
#-v ../dic.temp
# LM weights and word insertion penalties
-lmp 15.0 10.0
-lmp2 15.0 10.0
# Envelope beam width (number of hypothesis) - deixa o decoder bem mais lento
!!
-b 2000
-b2 200
-sb 300
# The number of candidates Julius tries to find.
#-n 5
## If julius go wrong with checking parameter type, try below.
##
#-notypecheck
#
## (PTM/triphone)
##
-iwcd1 best 5
#
#-iwcd1 max
#
#-iwcd1 avg
#
#-cvn
#### Gaussian Pruning ####
## Number of mixtures to select in a mixture pdf.
## This default value is optimized for IPA99's PTM,
## with 64 Gaussians per codebook
#-tmix 1
## Select Gaussian pruning algorithm
## defulat: beam (standard setting), safe (others)
-gprune safe
# safe pruning, accurate but slow
#-gprune heuristic
# heuristic pruning
#-gprune beam
# beam pruning, fast but sensitive
#-gprune none
# no pruning
#### Search Parameters ####
#-b 400
#
#-b 800
#
#-b 1000
#
triphone,PTM,engine=v2.1
#-s 50
#
#-b2 200
#
#-sb 200.0
#
#-s 500
#
#-m 2000
#
#-lookuprange 5
#
#-n 1
#
#-n 10
#
#-output 1
#
#-looktrellis
#
63
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
#-nostrip
etc.)
-zmean
input)
-zmeanframe
######################################################################
#### Acoustic Analysis
######################################################################
-smpFreq 22050
# sampling rate (Hz)
#-smpPeriod 227
# sampling period (ns) (= 10000000 / smpFreq)
#-fsize 400
# window size (samples)
#-fshift 160
# frame shift (samples)
#-delwin 2
# delta window (frames)
#-hifreq -1
# cut-off hi frequency (Hz) (-1: disable)
#-lofreq -1
# cut-off low frequency (Hz) (-1: disable)
#-cmnsave filename
# save CMN param to file (update per input)
#-cmnload filename
# load initial CMN param from file on startup