IEEE LATIN AMERICA TRANSACTIONS, VOL. 12, NO. 6, SEPTEMBER 2014 1127 Closed-set Speaker Identification in Speech Gateways J. Neiva, A. Guimaraes and H. Macedo Abstract— It has been observed an ever increasing need to access infor- mation whenever and wherever you want, regardless the means by which it is achieved. A speech gateway proves to be an important tool to reduce the gap between information source and the individual. However, current implementations lack authentication modules for verifying the identity of system’s users, which is an enjoyable feature for a sort of applications. This paper presents the construction of a speaker identification module and its integration to VoiceXML-enabled speech gateways. Feature extraction has been made with Cepstrum and Vector Quantization has been used to per- form properly recognition. Experiments have shown an accuracy rate of 87% in the identification of the speaker. Keywords— Speaker Identification, Speech VoiceXML, Cepstrum, Vector Quantization. Gateways, I. INTRODUÇÃO C OMPUTAÇÃO pervasiva é o termo utilizado para designar o acesso à computação onde e quando se deseja, não importando qual a forma de acesso. Este paradigma se tornou possível através das inovações tecnológicas recentes e da universalização do acesso à Internet, em especial. Entretanto, apesar dos enormes avanços tecnológicos, ainda existem empecilhos importantes à sua massificação. O principal deles é imposto pelas limitações físicas de dispositivos móveis, como aparelhos de celular e PDAs: as dimensões reduzidas do visor e do teclado destes dispositivos dificultam a navegação por busca de informação ou comunicação na Web. Além disso, a comunidade de pessoas com limitações motoras e/ou visuais permanece à margem de todo este processo. Uma possível solução para superar estes obstáculos é a utilização de tecnologias que possibilitem o acesso à informação através de interação vocal. De fato, o uso da linguagem falada reduz ainda mais a distância entre o conteúdo e a pessoa, configurando-se em um mecanismo social de grande importância e protagonista do processo de inclusão. Existem dois conceitos recentes bastante relacionados ao contexto de aplicação de tecnologias de voz: VoiceXML e gateway de voz. Este último também pode ser chamado de browser de voz ou portal de voz, e é responsável por manter um diálogo com o usuário, além de estabelecer uma comunicação com a aplicação VoiceXML [1]. O primeiro termo consiste numa linguagem de marcação (markup J. Neiva, Universidade Federal de Sergipe (UFS), Sao Cristovao, Sergipe, Brasil, [email protected] A. Guimarães, Universidade Federal de Minas Gerais (UFMG), Belo Horizonte, Minas Gerais, Brasil, [email protected] H. Macedo, Universidade Federal de Sergipe (UFS), Sao Cristovao, Sergipe, Brasil, [email protected] language) criada pela W3C (World Wide Web Consortium) que permite o desenvolvimento de aplicações de voz avançadas de maneira simplificada [2]. Um browser de voz é composto essencialmente por três módulos: (1) um interpretador de arquivos VoiceXML, (2) um sintetizador de voz (TTS -Text To Speech) e (3) um reconhecedor de voz (ASR - Automatic Speech Recognition). Este último módulo realiza o reconhecimento das sentenças pronunciadas pelo usuário através da correta identificação dos fonemas envolvidos na construção das palavras, composição de fonemas e casamento com módulo linguístico apropriado, responsável pela validação sintática da sentença. A aplicabilidade de gateways de voz pode ser aumentada com a adição de um módulo para reconhecimento do locutor [3],[4] and [5]. O objetivo do reconhecimento de locutor é extrair, caracterizar e reconhecer as informações sobre a identidade do usuário do sistema. Reconhecedores de locutor não fazem parte do conjunto de módulos tradicionais de um gateway. A idéia de se implementar essa nova interface, até então não encontrada em soluções existentes, vem da importância que este módulo tem para o desenvolvimento de aplicações que necessitem de autenticação do usuário como, por exemplo, as providas por instituições financeiras. Isso se deve ao fato de que a voz é uma característica biométrica que não é passível de "esquecimento", "perda" ou "roubo", como acontece não raramente quando do manuseio de logins e senhas de acesso, ou uso de cartões de banco. Este trabalho descreve a implementação de um módulo de reconhecimento de locutor e sua integração com um gateway de voz que interpreta documentos VoiceXML. O processo de extração de características da fala foi implementado com o algoritmo Cepstrum. A técnica de Vector Quantization foi utilizada para realizar o posterior casamento dessas características. O restante do artigo está organizado como se segue. A seção 2 apresenta um levantamento dos gateways de voz existentes e descreve em detalhes seu princípio de funcionamento. O estado da arte do reconhecimento de locutor é realizado em seguida, na seção 3. A seção 4 descreve a construção do módulo de reconhecimento de locutor e sua integração com o gateway de voz BUG (Brazilian Usercentered Gateway). Alguns experimentos são descritos na seção 5, bem como a discussão acerca dos resultados obtidos. Por fim, algumas conclusões são apresentadas na seção 6. II. GATEWAYS DE VOZ O princípio de funcionamento de um gateway de voz é semelhante ao de um browser Web: arquivos VoiceXML (ao invés de (X)HTML) provenientes de uma aplicação servidora são interpretados. A seqüência de atividades de uma aplicação VoiceXML típica consiste de: 1128 IEEE LATIN AMERICA TRANSACTIONS, VOL. 12, NO. 6, SEPTEMBER 2014 1. o gateway recebe uma chamada do usuário (que pode ser iniciada a partir de uma chamada telefônica ou diretamente através do computador); 2. o gateway executa o arquivo default da aplicação VoiceXML; 3. o browser possibilita a interação do usuário com a aplicação fazendo a sintetização e o reconhecimento de voz; 4. este processo continua até que a chamada seja finalizada. Os principais componentes de um gateway de voz são: o interpretador de VoiceXML, o sintetizador de voz (TTS ou Text To Speech) e o reconhecedor de voz (ASR ou Automatic Speech Recognition). A função do interpretador é ler as tags da linguagem VoiceXML e interpretar seu significado. Este módulo, normalmente, é o responsável pelo controle da aplicação e pela interação entre os outros módulos. O sintetizador de voz é o módulo responsável por transformar texto em fonemas pronunciáveis a fim de sintetizar a voz humana. Já o módulo reconhecedor pode ser entendido de duas formas diferentes: uma responsável pelo reconhecimento de fala e outra pelo reconhecimento de locutor. O primeiro consiste em interpretar o áudio recebido e transformá-lo em palavras, frases ou dígitos correspondentes. O segundo consiste em reconhecer quem é a pessoa que fala. O reconhecedor de locutor não é um componente padrão de gateway de voz e mesmo tendo sua aplicação direta para sistemas que necessitem de autenticação biométrica, poucas soluções para tal é encontrada na literatura. Muita da dificuldade de se incluir um módulo de reconhecimento de locutor em um gateway de voz está na falta de especificação formal da linguagem VoiceXML para tal funcionalidade. A W3C propôs uma mudança neste cenário com o lançamento da primeira versão da especificação da liguagem VoiceXML 3.0 [6]. Neste documento foram determinadas diversas especificações para a inclusão de um módulo denominado SIV (Speaker Identification and Verification). No entanto, tal especificação ainda se encontra em revisão e não se pode ter a garantia de que será realmente aceita como uma especificação formal da W3C. Tal inclusão também foi bastante discutida em um Workshop reallizado pela própria W3C em 2009. No entanto, pouco se viu em termos de avanços na especificação formal por parte da W3C até então. Mesmo assim, algumas propostas e estudos relacionados a inclusão de um reconhecedor de locutor podem ser encontrados como é o caso do RecoMadeEasy Speaker Recognition [7]. Solução proprietária para reconhecedo e identificador de locutor. Uma outra iniciativa na linha de reconhecimento e identificação de locutor é o Gateway BeVocal Cafe da Nuance [8]. O gateway apresenta uma proposta de identificação de locutor. Para tal, foi necessária a criação de tags e modificações específicas no gateway para tal. No entanto, o projeto opensource da Nuance foi substituído por uma proposta propietária [9]. Em relação aos demais componentes, a literatura é relativamente ampla. Existem implementações opensource e proprietárias. O OpenVXI [10] e o JVoiceXML [11] são as duas maiores iniciativas opensource para interepretação de arquivos VoiceXML. O FreeTTS [12] e o Sphinx-4 [13] são exemplos de implementações opensource para síntese e reconhecimento de voz, respectivamente. Existem algumas soluções que implementam o gateway de voz por completo, como é o caso do Tellme Studio [14], e que tem como principal característica o fato de permitir o acesso aos seus arquivos VXML através do Skype. O VOXEO [15], apesar de ser proprietário, possui uma versão gratuita com algumas limitações. Pode ser encontrado tanto na versão Web quanto desktop. O NUANCE [9], como citado, é uma proposta proprietária e uma das primeiras iniciativas da área. Tem como principal característica um amplo número de idiomas suportados. Com exceção desta última todas as outras implementações não possuem suporte para a língua portuguesa. VoiceXML é uma linguagem de marcação criada pela W3C que permite a criação de aplicativos de voz seguindo a mesma metodologia da criação de aplicativos tradicionais para a web. Ela é projetada para a criação de diálogos de áudio provendo as seguintes características: síntese de voz, áudio digitalizado, reconhecimento de voz e de entradas DTMF, além de gravação de entrada de voz. Todas essas funcionalidades são previstas e descritas por um conjunto de tags fornecidas pela VoiceXML. É interessante notar a semelhança da estrutura entre um código VXML e HTML, mas os pontos em comum das duas arquiteturas vão além da especificação da linguagem, uma vez que o principal objetivo da linguagem VXML é fazer uso das vantagens do desenvolvimento Web para as aplicações por voz. III. RECONHECIMENTO DE LOCUTOR De acordo com [16], reconhecimento de locutor é o processo de identificação de uma pessoa, baseado nas informações fisiológicas contidas em sua fala. Este processo pode ser subdividido em diversas categorias. A primeira dimensão de divisão do reconhecimento categoriza este processo em (1) atividade de verificação do locutor, ou (2) atividade de identificação do locutor. A verificação do locutor é caracterizada pela realização de uma decisão binária, determinando se a pessoa que fala é, de fato, quem ela afirma ser através da pronúncia de um número de cartão de acesso, da pronúncia de seu próprio nome, etc [17], [18], [19]. Ao tentar se autenticar, as características extraídas de sua voz serão comparadas com as que o sistema possui previamente relativo àquele usuário, tendo duas alternativas como resposta: autorizado ou rejeitado. Já a identificação do locutor se caracteriza pela comparação da fala da pessoa a ser reconhecida com o conjunto de todos os usuários cadastrados no sistema, identificando-a [20]. Um sistema de identificação pode ser classificado como closed-set ou open-set. Quando se tem certeza de que o usuário está entre o grupo de pessoas autorizadas, realiza-se uma identificação do tipo closed-set, identificando-o pela pessoa com maior similaridade. A segunda opção é um sistema open-set, no qual existe a possibilidade de afirmar que o usuário não está autorizado a utilizar o sistema caso não exista nenhum indivíduo na base de dados com características vocais similares às suas. Por fim, é possível identificar um sistema de NEIVA et al.: CLOSED-SET SPEAKER IDENTIFICATION 1129 reconhecimento como sendo dependente ou independente do texto [21]. A diferença entre os dois reside no fato de que, enquanto no primeiro é necessário que se pronuncie uma palavra específica, no segundo o locutor pode falar o que desejar. A independência do texto falado é mais difícil de ser alcançada, mas ao mesmo tempo promove maior flexibilidade [3]. Esta flexibilidade permite, por exemplo, a verificação do locutor enquanto ele realiza outras interações vocais. A Fig. 1 representa a organização geral de um sistema de reconhecimento. Figura 1. Organização de um sistema de reconhecimento de locutor. O reconhecimento de locutor é um processo de dois estágios distintos [16]. O primeiro estágio é o cadastro do usuário e treinamento. Podemos considerar o sinal de áudio adquirido como uma seqüência de características que representam o orador. A extração de características é definida como o processo de reduzir a quantidade de dados utilizados, preservando as informações contidas na fala do locutor. Após a coleta das amostras é então realizada a extração das características relevantes ao sistema, tendo como resultado um vetor de características. Em seguida, o vetor obtido passa por um processo de modelagem e, só então, o modelo do usuário é definido. O segundo estágio corresponde ao reconhecimento em si. A extração das características do áudio coletado é realizada para, então, se efetuar a comparação do vetor de características com os modelos de usuários cadastrados no sistema. Esta comparação é baseada nas mesmas técnicas utilizadas na criação dos modelos de usuários e está intimamente relacionada ao tipo de reconhecimento desejado: verificação ou identificação. O sinal de voz pode ser representado como um sinal-fonte de rápida variação em convolução com uma resposta de impulso de curta variação. Quando estes componentes estão combinados através de operações não-lineares, como a convolução, sua separação torna-se um problema de difícil resolução, mas quando eles estão combinados linearmente, diversas técnicas de separação podem ser utilizadas. Cepstrum é a representação do sinal quando ocorre a soma destes dois componentes. A técnica é bastante eficiente, apesar de se mostrar sensível a ruídos do ambiente. O Cepstrum de um sinal é dado pela equação 1. (1) Para comparação entre a amostra de autenticação e as amostras do banco de dados, a literatura relaciona algumas das técnicas mais utilizadas. Template Matching, Nearest Neighbor, Redes Neurais [19], [4] e Hidden Markov Models [21]. Em [16] uma técnica denominada de Vector Quantization é utilizada em um protótipo de reconhecimento de locutor. Ela modela características específicas do orador e funciona através do mapeamento de um conjunto de vetores de características de cada usuário em um pequeno número de regiões finitas dentro do espaço vetorial por eles criado. Este processo encontrará aglomerados de vetores com valores similares, cada um com um valor central associado, o centroid. Os centros são utilizados na criação de um codebook, ou livro de códigos, o qual define o espaço vetorial representado pelo conjunto de vetores. Para cada usuário existe um codebook particular formado pelas características de suas amostras de voz. Existem dois fatores que afetam diretamente a precisão dos resultados quando se aplica a técnica de Vector Quantization: o tamanho do codebook (normalmente com 64, 128 ou 256 vetores) e o algoritmo utilizado para sua geração. Geralmente, quanto maior o tamanho do codebook, menores as taxas de erro. Entretanto, um codebook com um número muito grande de vetores pode se tornar específico demais, correspondendo apenas àquelas amostras de treinamento já definidas, em detrimento da capacidade de generalização das características de voz que defininem o usuário. Um dos algoritmos mais utilizados em Vector Quantization é o algoritmo de Lloyd [16], cujo funcionamento ocorre de forma simples e eficaz. A Fig. 2 ilustra sua forma de criar os codebooks. Figura 2. Algoritmo de Lloyd. O primeiro passo é a inicialização do codebook, que corresponde a uma seleção aleatória de algumas janelas do vetor de características, os centroids. Em seguida, todas as amostras são codificadas, ou seja, cada janela é comparada a este codebook inicial, calculando sua distância até cada centroid. A janela é então associada ao centroid menos distante. O segundo passo corresponde à atualização do codebook. Cada centroid do novo codebook corresponde à média aritmética dos valores de todas as janelas associadas a este. Para determinar se o codebook criado é uma boa representação das amostras de treinamento, calcula-se a distorção entre cada janela do vetor de características e o centroid ao qual ela mais 1130 IEEE LATIN AMERICA TRANSACTIONS, VOL. 12, NO. 6, SEPTEMBER 2014 se aproxima. Para se encontrar o valor da distorção, foi utilizado o cálculo da Distância Euclidiana entre as amostras e o codebook. Ela é utilizada para determinar se a criação do codebook está completa ou não. Quando o critério de parada é alcançado, o codebook é gravado na base de dados, finalizando o treinamento do usuário em questão. Alguns diferentes critérios de parada podem ser considerados para o algoritmo de Lloyd: (1) nenhuma mudança entre a distorção da iteração anterior e a atual, (2) número máximo de iterações excedido e (3) variação da distorção menor que um valor definido pela equação 2. (2) Este algoritmo possui uma desvantagem. Algumas vezes a distorção pode convergir para um mínimo local próximo ao codebook inicial ao invés de um mínimo global. Por isso, as decisões iniciais podem influenciar o resultado final. Para realizar experimentos e avaliações nos sistemas de reconhecimento de locutor utilizam-se bases de vozes, ou speech corpora. O desenvolvedor do sistema pode utilizar as bases existentes disponíveis à comunidade acadêmica ou criar a sua própria. Existem quatro fatores que influenciam a adequação dessas bases aos sistemas de reconhecimento de locutor: (1) quantidade e diversidade de pessoas, (2) intervalo de tempo entre as sessões, (3) tipo de fala e (4) variações de microfone e ambiente de gravação. IV. IDENTIFICAÇÃO DE LOCUTOR EM GATEWAYS DE parâmetro rec da tag record não existe na definição padrão da linguagem VXML. Foi necessário modificar a gramática da linguagem para que o parse aceitasse esta nova tag para então o gateway realizar a comunicação com o reconhecedor de locutor. O parser do JVoiceXML também precisou sofrer alterações para que a tag modificada pudesse ser interpretada apropriadamente. Figura 3. Trecho de um arquivo VoiceXML contendo o novo parâmetro rec paraa tag record. O primeiro passo foi adicionar ao parser a nova tag. Para isso, modificamos o classe Record que implementa a tag record do VXML. A Fig. 4 mostra os principais métodos e variáveis adicionados. VOZ Como dito anteriormente, o módulo de reconhecedor de locutor não faz parte dos principais componentes de um gateway de voz e, até então, poucas iniciativas foram apresentadas como solução para tal problema. Sendo assim, esse trabalho apresenta a integração do identificador de locutor com o BUG, implementação do gateway de voz baseada no interpretador JVoiceXML [11]. A grande vantagem de se utilizar o JVoiceXML é a possibilidade de integrar diferentes bibliotecas de terceiros ao interpretador. A implementação disponível já vem integrada com o sintetizador FreeTTS [12] e o reconhecedor de voz Sphinx-4 [13]. O reconhecedor de locutor foi integrado ao gateway da mesma maneira como o sintetizador, por exemplo. A integração do gateway foi possível através da adição de um novo parâmetro à tag record da linguagem VoiceXML, que é responsável pela gravação de uma entrada de voz do usuário. Quando o parâmetro criado possui o valor true, o gateway faz com que aquela entrada de voz seja processada pelo módulo de identificação de locutor, caso contrário, este processamento não é feito, ocorrendo apenas a gravação de um arquivo no formato wav. O trecho de código VoiceXML da Fig. 3 ilustra a tag modificada coma adição do parâmetro rec (linha 7). Os arquivos gerados com a criação da nova tag são armazenados e processados pelo reconhecedor de locutor. Uma vez processada o sistema retorna sobre a identificação do usuário e a mesma pode ser processada dentro do arquivo VXML de acordo com a aplicação. Desta forma, o maior custo dentro do processo de integração foi a criação da nova tag na linguagem. O Figura 4. Trechos da classe Record.java modificados para inclusão do novoparâmetro rec para a tag record. O passo seguinte foi alterar o interpretador JVoiceXML para chamar os métodos do identificador de locutor. A classe RecordingEventStrategy implementa a chamada de evento para a tag record. A Fig. 5 mostra os princiapis métodos da classe. O primeiro passo é criar uma instância do identificador (linha 3) e verificar o valor do parâmetro rec (linha 8). Se true, a classe chama o método de autenticação do identificador (linha 9). O módulo de identificação de locutor desenvolvido e integrado ao gateway de Voz é um sistema de identificação closed-set dependente do texto. Ou seja, o usuário do sistema necessariamente será identificado como um daqueles previamente cadastrados que apresentem a menor similaridade. Para realizar a gravação das amostras foi implementado um módulo que utiliza a API Java Sound, ou JSAPI. Este módulo grava arquivos no formato wav e os transforma em um array de bytes a ser manipulado nas etapas seguintes. NEIVA et al.: CLOSED-SET SPEAKER IDENTIFICATION 1131 amostra em janelas, que se sobrepõem em algumas partes. Em seguida, aplica-se a janela de Hamming em cada janela e então o Cepstrum, obtendo como resultado uma matriz contendo as cinco amostras de treinamento pré-processadas. Por fim, através do método denominado Vector Quantization, utiliza-se o algoritmo de Lloyd para criar um modelo do usuário e, então, gravá-lo na base de dados, finalizando a fase de treinamento do sistema. A Fig. 7 mostra um digrama do processo de treinamento. Figura 5. Trechos da classe RecordingEventStrategy.java modificados para achamada do identificador de locutor. A extração de características foi realizada com o Cepstrum. Na fase de criação dos modelos de usuários e de comparação de padrões foi utilizado o método Vector Quantization, que tem como resultado a criação de um codebook, ou livro de códigos. Este codebook representa um determinado usuário e através dele é possível calcular a distorção entre uma amostra de teste e as amostras de treinamento. A Fig. 6 representa a metodologia utilizada para a criação do sistema. Figura 7. Treinamento. A próxima fase, a autenticação do usuário (Fig. 8), ocorre de forma similar ao treinamento. Primeiro divide-se a amostra em frames e aplica-se a janela de Hamming para, então, extrair suas características através do Cepstrum. Este vetor de características será comparado a todos os codebooks existentes na base, tendo suas distorções calculadas utilizando a mesma equação do algoritmo de Lloyd. Por fim, o sistema compara as distorções obtidas, identificando o dono da amostra como o usuário cujo codebook resultou na menor distorção. Figura 8. Autenticação. Figura 6. Metodologia utilizada para confecção do módulo de identificação. Duas bases de vozes foram criadas, de forma que para cada usuário cadastrado foram gravadas cinco amostras de treinamento e cinco de teste utilizando um microfone comum. A primeira base conta com 22 pessoas, sendo 18 do sexo masculino e 4 do sexo feminino. Foi orientado que cada uma delas pronunciasse seu próprio nome. Numa segunda base, 12 pessoas (8 do sexo masculino e 4 do sexo feminino) foram orientadas a pronunciar o termo "Ciência da Computação". Após a aquisição das amostras o sistema foi treinado para reconhecimento dos usuários. O primeiro passo é dividir cada V. EXPERIMENTOS E RESULTADOS Apesar de ser desenvolvido para utilização em um ambiente vocal sem recursos visuais, o sistema de reconhecimento de locutor implementado possui uma interface visual composta de duas partes: a primeira permite a gravação das amostras e a segunda torna possível a realização de diversos testes de autenticação. Esta interface foi criada para otimizar o tempo de gravação e testes, pois permite uma melhor análise dos resultados, além de facilitar o cadastro de novos usuários. Diversos testes foram realizados utilizando esta janela de 1132 autenticação, divididos em duas fases. Na primeira, utilizou-se um valor fixo para o tamanho do codebook, 64, variando os tamanhos das janelas e a sobreposição entre elas, windowLength e windowSlide, respectivamente. Na segunda fase, os valores de windowLength e windowSlide com melhores resultados foram selecionados, enquanto se variou o tamanho do codebook entre 64 e 256 vetores. Como existem duas bases de vozes, esses experimentos foram realizados duas vezes, uma para cada base. Os resultados para a base contendo os 12 usuários pronunciando as palavras "Ciência da Computação" estão listados na tabela I, lembrando que esta base possui um total de 60 amostras de teste, cinco de cada usuário. A última coluna indica a porcentagem de acertos em relação à quantidade total de amostras testadas. Quanto maior a porcentagem, melhor o desempenho da configuração utilizada. Observou-se que, quanto maior o WindowSlide, ou seja, quanto menor a sobreposição, maior a precisão do sistema. Observou-se também que, ao aumentar o tamanho da janela e o windowSlide proporcionalmente, a quantidade de acertos permaneceu constante, porém o desempenho do sistema melhorou em relação ao tempo de processamento. Essa melhora se deve à menor quantidade de janelas obtidas na divisão da amostra e, consequentemente, menos comparações são necessárias, criando os codebooks de forma muito mais rápida. Os próximos valores são os resultados da segunda fase de testes. Os valores com melhores desempenhos na fase anterior foram utilizados com o objetivo de verificar se a variação no tamanho do codebook realmente influencia a precisão do sistema. Observando os resultados obtidos, não foi encontrada uma diferença significativa na precisão do sistema ao se aumentar o tamanho do codebook de 128 (Tabela II) para 256 (Tabela III), mas durante a realização dos testes foi possível verificar um aumento significante no tempo de autenticação à medida que o tamanho do codebook aumentou. Isto se deve à maior quantidade de comparações necessárias para se definir o centroid ao qual a janela pertence. Dessa forma, optou-se por utilizar o codebook de tamanho intermediário, 128, que é um meio termo entre a precisão e o tempo de processamento. De acordo com os valores encontrados, optou-se por utilizar os valores 64 e 54 para WindowLength e WindowSlide, respectivamente. Os resultados dos testes realizados com a segunda base de vozes não foram tão satisfatórios quanto os da primeira. A base a ser testada é composta por 110 amostras pertencentes a 22 pessoas, cada uma falando seu próprio nome 5 vezes. Na tabela IV estão os dados referentes à primeira fase de testes. É possível observar que, no melhor caso, apenas 54,5% das amostras foram reconhecidas corretamente. A segunda fase de testes utilizou codebook de tamanho 256 e 128 para verificar a influência da quantidade de centroids na precisão dos resultados. Os testes realizados nesta etapa tiveram resultados um pouco melhores, porém ainda não foram satisfatórios, como indica a tabela V. Diversos fatores contribuíram para a diferença entre os resultados dos testes das duas bases de vozes. O primeiro está relacionado ao conteúdo das amostras, e não do ambiente. Ambas foram gravadas em um mesmo local, contendo um IEEE LATIN AMERICA TRANSACTIONS, VOL. 12, NO. 6, SEPTEMBER 2014 pouco de ruído, além de possuírem amostras de pessoas na mesma faixa etária, na maioria homens. Elas diferem na frase falada pelos usuários. Como na primeira base todas as pessoas pronunciaram as mesmas palavras, o sistema conseguiu identificar mais facilmente a diferença entre as vozes de cada um. Na segunda amostra cada usuário pronuncia um nome diferente, tornando menos óbvia a diferença entre as características específicas de cada usuário. Além disso, a segunda base de dados possui quase o dobro de usuários e, por ser utilizada em um sistema de identificação que compara os codebooks de todas as pessoas cadastradas, quanto maior a quantidade de usuários, maior a complexidade do sistema e menor a sua precisão. O gráfico da Fig. 9 mostra a relação entre o tamanho do codebook e a porcentagem de acertos. NEIVA et al.: CLOSED-SET SPEAKER IDENTIFICATION Figura 9. Tamanho do Codebook X porcentagem de acertos. VI. CONCLUSÃO Neste artigo foi descrito a construção de um sistema de identificação de locutor closed-set dependente do texto, integrado a um gateway de voz. Este sistema utiliza o Cepstrum como método de extração de características e o Vector Quantization com o algoritmo de Lloyd para a criação dos modelos de usuários, ou codebooks. Foram realizados alguns testes com a intenção de encontrar valores que melhorem tanto a porcentagem de autenticações corretas quanto a velocidade de processamento do sistema. O resultado obtido foi bastante satisfatório, identificando a pessoa corretamente em quase 89% dos testes realizados com janelas contendo 64 valores de amostragem do sinal, sendo que os dez últimos valores de uma janela são os dez primeiros da janela seguinte. WindowSlide é a quantidade de valores percorridos para se começar a nova janela e o melhor tamanho obtido foi 54, o que deixa uma sobreposição de 10 valores de amostragem entre cada janela. A integração do módulo de reconhecimento com o gateway de voz desenvolvido foi realizada com sucesso através de uma modificação na tag record da linguagem VoiceXML utilizada pelo reconhecedor. Possibildades de trabalhos futuros incluem a implementação de um módulo de verificação de locutor. AGRADECIMENTOS Os autores agradecem ao auxílio financeiro concedido pelo CNPq [Universal 14/2012, Processo 483437/2012-3]. REFERÊNCIAS [1] Jorge A. Quiané Ruiz and Jorge R. Manjarrez Sánchez, “Design of a voicexml gateway,” in ENC ’03: Proceedings of the 4th Mexican International Conference on Computer Science, Washington, DC, USA, 1133 2003, p. 49, IEEE Computer Society. [2] W3C, “Voice Extensible Markup Language (VoiceXML) Version 2.0,” 2004. [3] D. A. Reynolds, “An overview of automatic speaker recognition technology,” in ICASSP ’02: Proc of the IEEE International Conference on Acoustics, Speech, and Signal Processing, USA, 2002, pp. IV–4072– IV–4075 vol.4, IEEE Computer Society. [4] Andre Caricatti and LiWeigang, “Reconhecimento de locutores em língua portuguesa com modelos de redes neurais e gaussianos,” in V Congresso Brasileiro de Redes Neurais, Rio de Janeiro, Brasil, 2001, pp. 25–30. [5] J. P. Campbell, “Speaker recognition: a tutorial,” Proc of the IEEE, vol. 85, no. 9, pp. 1437–1462, 1997. [6] W3C, “Voice Extensible Markup Language (VoiceXML) 3.0,” 2010. [7] Recognition Technologies Inc., “RecoMadeEasy Speaker Recognition (SPKR) - SIV System,” 2010. [8] Nuance Café, “BeVocal Café Nuance,” 2007. [9] Nuance Communications, “NUANCE,” 2002. [10] Vocalocity, “Open VXI - Open Source Voice Interpreter,” 2005. [11] Dirk Schnelle, “JVoiceXML -Open Source VoiceXML Interpreter,” 2006. [12] Willie Walker, Paul Lamere, and Philip Kwok, “FreeTTS 1.2 - A speech synthesizer written entirely in the Java programming language,” 2001. [13] CMU, “Sphinx-4 - A speech recognizer written entirely in the Java programming language,” 1999. [14] Tellme Networks, “Tellme Studio,” 2006. [15] Voxeo Corporation, “VOXEO - IVR plataform / IVR hosting / IVR development,” 2000. [16] David M. G. Watts, “Speaker identification - prototype development and performance,” 2006. [17] Quin Jin, Stan Jou, and Tanja Schultz, “Whispering speaker identification,” Carnegie Mellon University, EUA, 2007. [18] Peter Day and Asoke Nandi, “Robust text-independent speaker verification using genetic programming,” in IEEE Transactions on Audio, Speech and Language processing, 2007. [19] Urs Niesen and Beat Pfiester, “Speaker verification by means of anns,” in Proceedings of ESANN, Brugges, Bélgica, 2004. [20] Jose B. Sanchez, “Speaker identification based on an integrated system combining cepstral feature extraction and vector quantization,” M.S. thesis, Tese (Mestrado em Ciência daComputação). Florida State University, Estados Unidos, 2005. [21] Svetoslav Marinov, “Text dependent and text independent speaker verification systems: Technology and applications.,” 2003. Juliana Ferreira Neiva nasceu em Brasília/DF, Brasil, em 1986. Graduou-se em Ciência da Computação pela UFS em 2009. De outubro de 2008 até o presente momento, atua como Analista de Sistemas do Tribunal de Justiça do Estado de Sergipe. Na graduação trabalhou na área de Computação Inteligente participando do Grupo de Pesquisa em Inteligência e Imagens (Pii/CNPq). Adolfo Pinto Guimarães nasceu em Aracaju/SE, Brasil, em 1984. Graduou-se em Ciência da Computação pela Universidade Federal de Sergipe em 2009. Obteve o título de Mestre em Ciência da Computação pela UFMG em 2013, atuando na área de Recuperação de Informação. Atualmente, é professor na UFS e pesquisador colaborador no Grupo de Pesquisa em Inteligência e Imagens (Pii/CNPq). Hendrik Teixeira Macedo nasceu em Aracaju/SE, Brasil, em 1977. Graduou-se em Ciência da Computação pela UFS em 1998. Obteve o título de Mestre em Ciência da Computação pela UFPE em 2001 e o título de Doutor em Ciência da Computação também pela UFPE em 2006,, tendo realizado estágio de doutoramento “sandwich” pela Universidade de Paris VI no ano de 2002. De julho de 2006 até o presente momento, atua como professor efetivo Adjunto do DCOMP/UFS e como membro permanente dos Programas de Pós-Graduação em Ciência da Computação (PROCC/UFS) e Pós-Graduação em Engenharia Elétrica (PROEE/UFS). Como líder do Grupo de Pesquisa em Inteligência e Imagens (Pii/CNPqs), atua principalmente na investigação sobre interfaces naturais vocais e personalizáveis.