Reconhecimento de Voz no Linux

Este artigo serve como base inicial para a criação de recursos de reconhecimento de voz no Linux, com recursos
disponíveis na WEB e com melhor qualidade de voz.

[ Hits: 36.754 ]

Por: Adriano H. Hedler em 02/04/2012 | Blog: http://www.vivaolinux.com.br


Introdução, Ferramentas e Recursos



Este é meu primeiro artigo aqui no VOL.

Realmente gosto de devolver, sempre que possível, um pouco de tudo que aprendo.

Estava procurando sobre soluções para interação com voz pelo Linux.

Achei diversas opções, excelentes! E diga-se de passagem, as mais flexíveis para diversos projetos eram as Open Source.

O melhor de tudo, é que de Asterisk a GNOME, e de Smartphone a Tablet (com base Linux, claro), você irá encontrar algumas boas ferramentas para o que você precisa.

Com um pouco de esforço, você conseguirá adaptar um reconhecimento de voz ao seu sistema.

É necessário um básico conhecimento em Shell Script, e noções de terminal. Faço aqui uso de ferramentas que têm melhor desempenho que as formas sintetizadas de voz que já conhecemos.

Com a Internet, temos alguns recursos On-line que podemos usar para nossos sistemas, facilitando a implementação.

Recomendo uma busca mais a fundo, se você deseja criar Softwares mais acessíveis, e ferramentas para interação.

Não sou nenhum expert no assunto. Realmente achei bastante relevante ver como andam estas ferramentas em nosso maravilhoso mundo Linux e na WEB.

Se por acaso, você tem alguma ideia que acrescente no Script, por favor, cite nos comentários.

A seguir, quero deixar alguns caminhos para este tipo de desenvolvimento.

Informações Gerais sobre Ferramentas de Voz e suas Dificuldades

Existem inúmeras ferramentas para iniciar, basta dar uma 'googlada'.

Lista de projetos dedicados ao reconhecimento de voz para Linux, vou citar nomes e sites para referência.
Além destes, alguns projetos relacionados:
  • Platypus
  • Vedics
  • Xvoice
  • GnomeVoiceControl
  • CVoiceControl
  • SphinxKeys,
  • Open Mind Speech
  • PerlBox
  • VoxForge

. . .E outros, com suporte ao português brasileiro, ou adaptados.

Fonte (em Inglês): http://en.wikipedia.org - wiki

Porém, estava interessado em algo não tão sintetizado, pois na maioria uma configuração precisa, chamada de Phonemas, é necessária para melhor pronunciar as palavras na língua nativa.

Na verdade, boa parte dos sistemas de reconhecimento de voz precisam ser configurados, conforme região e dialeto da língua que se pretende usar.

O português brasileiro é um conjunto de variações de Norte a Sul, Leste a Oeste do Brasil.

A língua falada sofre entonações, mudanças na fala, que se alteram devido ao posicionamento e exercício fisiológico da boca e língua, para se falar algumas palavras de forma diferenciada.

O português brasileiro, não é o da televisão!

Sendo assim, é bastante difícil padronizar a identificação de voz para um país como o nosso.

Mas, é possível prever através da programação, as diferenças de regionalismos. Também se faz necessário, que nem mesmo os dicionários, cobrem toda a gama de vocábulos que encontramos no Brasil.

Macaxeira, mandioca e aipim, apesar de alguns diferenciarem pelo tipo, em algumas regiões, são exatamente o mesmo tipo de alimento.

Para o reconhecimento de voz, além das frequências, cortes, e pausas, é necessário diferenciar a velocidade falada das palavras, potência de voz e outros.

Isso não vem ao caso para nós, mas você pode estudar mais a fundo, pesquisando sobre fisiologia e pronúncia, e tudo que envolve nosso português.

Quando você olha para este balaio de necessidades, você começa a reconhecer o tamanho do esforço que isso exige.

Usando Recursos Melhorados

Para alegria de alguns, e para a decepção de outros que gostam de reinventar a roda, podemos hoje contar com diversas ferramentas, como as que citei, com um bom avanço nestes recursos.

Ainda sim, estas ferramentas exigem uma modificação.

Faz algum tempo, o Google investiu no projeto: http://espeak.sourceforge.net.

Este projeto Open Source, eSpeak, foi usado para o que vemos na pronuncia das palavras traduzidas pelo Google Translator, por exemplo. [1]

Também foi usada com Engine para diversos projetos nesta área pelo Google, e também para aplicativos para o Android criados por terceiros.[2]

No caso de reconhecimento de voz do Android, há uma Engine adaptada para Java, que serve como propulsor dos recursos usados nos dispositivos móveis com este sistema.[3]

Mas, temos recursos mais próximos dos nossos computadores domésticos, que podem ser usados como ferramentas para diversão e conhecimento inicial.

[1] Em inglês: [2] Aplicativo com Engine eSpeak: [3] Em inglês:
    Próxima página

Páginas do artigo
   1. Introdução, Ferramentas e Recursos
   2. Script, Captura e Tradução
   3. Finalizando
Outros artigos deste autor

A Desinformação em Época da Tecnologia de Informação

Direcionando o mouse pelo teclado no Linux Mint LXDE

Leitura recomendada

AWK - Manipulação de arquivos de texto

Shell - Funções

Introdução a LUA, uma poderosa linguagem de programação

Mini-tutorial Shell

Colorindo o Shell

  
Comentários
[1] Comentário enviado por alefesampaio em 02/04/2012 - 11:39h

Muito bom realmente um belo trabalho de pesquisa.. bem focado e didático.

[2] Comentário enviado por levi linux em 02/04/2012 - 19:33h

Caro adrianoh2, meus parabéns, seu artigo está bastante didático, bem escrito e percebe-se que fez uma pesquisa minuciosa, além disso o tema é bastante original.
Favoritado!

[3] Comentário enviado por removido em 02/04/2012 - 19:47h

Conteúdo muito interessante...

[4] Comentário enviado por c4rl em 02/04/2012 - 23:32h

Gostei muito, parabéns.

[5] Comentário enviado por adrianoh2 em 03/04/2012 - 01:07h

Opa galera.. espero ter contribuído para o VOL, e para quem interessar.
Obrigado pela apreciação! :) - Um incentivo a mais para contribuir outras vezes....

[6] Comentário enviado por Lisandro em 04/04/2012 - 13:09h

Ótimo artigo, fiquei com vontade de brincar disso. Parabéns!

[7] Comentário enviado por WanderSfalsin em 13/04/2012 - 11:00h

cara, artigo muito interessante, mas comigo não funcionou o script tradutor.sh, retorna isso depois de eu falar no microfone:

./tradutor.sh: linha 29: http://www.google.com/speech-api/v1/recognize?lang=pt-BR&client=chromium: Arquivo ou diretório não encontrado
Esta é a mensagem que foi compreendida com sua fala:
wget: falta o URL
Uso: wget [OPÇÃO]... [URL]...

Tente "wget --help" para mais opções.
Esta é a mensagem que foi traduzida pelo serviço do Google:
wget: missing URL\n

OBS.: Estou usando um Ubuntu 11.10 x64

[8] Comentário enviado por adrianoh2 em 13/04/2012 - 12:37h

A linha do Wget, aqui no vol, está quebrada...
Isto deve estar tudo na mesma linha no script:
x=$(wget -q -U "Mozilla/5.0" --post-file /tmp/recording.flac --header="Content-Type: audio/x-flac; rate=16000" -O - "http://www.google.com/speech-api/v1/recognize?lang=pt-BR&client=chromium"|cut -d\" -f12)

Se só copiar e colar não vai funcionar!

:)

[9] Comentário enviado por WanderSfalsin em 14/04/2012 - 21:39h

vlw, agora funcionou.

[10] Comentário enviado por tarcisiojorge em 16/04/2012 - 22:21h

Muito bom
Estou usando o Debian e executei o tradutor.sh, apareceu o seguinte erro:
debian:/home/aluno# ./tradutor.sh

./tradutor.sh: line 23: rec: command not found
./tradutor.sh: line 29: http://www.google.com/speech-api/v1/recognize?lang=pt-BR&client=chromium: Arquivo ou diretório não encontrado
Esta é a mensagem que foi compreendida com sua fala:
wget: URL faltando
Uso: wget [OPÇÃO]... [URL]...

Tente `wget --help' para mais opções.
Esta é a mensagem que foi traduzida pelo serviço do Google:

debian:/home/aluno#


[11] Comentário enviado por adrianoh2 em 16/04/2012 - 22:51h

Colega... leia a mensagem de erro:
Erro: rec - Você não tem instalado.... (comand not found)
Solução: instale.

Sem ele não vai funcionar :)


[12] Comentário enviado por tarcisiojorge em 17/04/2012 - 08:32h

Me desculpa mais sou novo no Linux.
Como eu instalo o rec?
Tentei pelo comando # apt-get install rec
Qual é o comando via apt–get correto?
Acho que estou comendo bola.
OBS: estou usando o Debian 5,0 com o navegador web 2.22.3

[13] Comentário enviado por adrianoh2 em 17/04/2012 - 12:03h

Olá

O rec faz parte de um pacote de aplicativos.
Primeiramente será importante saber se o seu DEBIAN, está com os repositórios adicionados para estas aplicações.
Caso não esteja você terá que pesquisar aqui no vol como fazer.

Então tente assim:
sudo apt-get install sox

Caso instale este pacote, blz, teste o script novamente.
Caso não funcione, ai será necessário adicionar repositórios não oficiais para o DEBIAN.
Ou seja, você terá que adicionar repositórios do ubuntu por exemplo para instalar isso.

Teste novamente, e avise se tudo ok!

[14] Comentário enviado por tarcisiojorge em 19/04/2012 - 09:36h

Instalei o pacote que você me falou via apt get, e executei o arquivo.
Ao executar o arquivo apareceu este erro:
rec WARN formats: can’t set sample rate 16000; using 48000
Mude a Linha do rec para:
rec -r 48000 -t alsa default /tmp/recording.flac silence 1 0.1 5% 5 1.0 5%

E o erro sumiu, mas acho que tem algum problema, pois quando eu falo nunca aparece o que eu falei EX: eu falei esquerda e apareceu shows. Já verifique a qualidade do som do microfone e acho que esta boa, estou te enviando o arquivo de som gravado no seu e-mail para você verificar.
Será que eu tenho que mudar alguma coisa nesta linha de comando também?
x=$(wget -q -U "Mozilla/5.0" --post-file /tmp/recording.flac --header="Content-Type: audio/x-flac; rate=16000" -O -
"http://www.google.com/speech-api/v1/recognize?lang=pt-BR&client=chromium"|cut -d\" -f12)

Por que nesta linha você indica “Mozilla/5.0”?
É o seu navegador? Pois o meu navegador é o web 2.22.3 tenho que mudar esta linha, ou isto não tem nada a ver.
Outra pergunta esta linha tem rate=16000, na linha do rec eu mudei de 16000 para 48000 por causa do erro que mencionei. Eu devo mudar esta linha também, pois quando eu mudo esta linha para 48000, não aparece palavra nenhuma.
Você tem alguma dica?
Obrigado.


[15] Comentário enviado por adrianoh2 em 19/04/2012 - 13:38h

Olá tarcisiojorge

Alguns problemas:
1. Sua distro é Debian, e possivelmente a versão STABLE, que só contém pacotes considerados seguros.
Isso significa que boa parte dos aplicativos são antigos, considerados somente os que não contém nenhuma parte de testes ou realmente seguras.
Sendo assim, fica muito difícil saber o que funciona e não funciona no seu sistema. pois pacotes podem estar antigos nos repositórios.
Você precisa instalar todos os pacotes diretamente do fonte com as versões mais atualizadas. Exemplo é o REC, que você não possui todos os recursos.

2. A frequência que você colocou no REC, faz a fala ficar mais rápida quando tocada, e com isso impossível de ser detectada pelo Google Voice.
Mudar a freqüência não significa resolver o problema e sim mudar porque seu sistema possuiu restrições na versão que você instalou do REC.

3. Seu navegador precisa ser compatível com o Mozilla. O iceweasel, ou versão original do Debian, precisa ser alterado para poder funcionar corretamente.
Neste caso, recomendo instalar o firefox, novamente do fonte e a versão mais atual. Mozilla é o identificador que o navegador é variante do Firefox, e que pode ser detectado pelo Google.
Não adianta mudar a linha, não vai funcionar, se funciona ai é por sua conta e risco, teste, pois eu não fiz desta maneira.

4. Recomendo uma versão do ubuntu para que você possa testar, ou ainda uma versão live em um pen drive. Use versões ou variações do Debian que possuem repositórios atualizados com mais frequência, e tem versões mais novos dos softwares. Se você não tem experiência com Linux, recomendo começar com estes: LinuxMint, Ubuntu, Kubuntu.. etc.. . Usar o Debian sem saber como instalar diretamente dos fontes e resolver problemas de versões lhe dará um caminho mais árduo para fazer alguns recursos funcionarem. E neste caso, indico que use o fórum para resolver problemas de software.

Não posso dar todas as respostas que você precisa para ajustar seu Debian. Procure no fórum, ou abra uma ajuda lá, para instalar estes softwares de forma mais nova. E ai teste este recurso.
Realmente não uso Debian, somente para servidores. Uso LinuxMint que possui já recursos mais recentes.

Boa sorte!




[16] Comentário enviado por jbkira em 31/12/2013 - 14:27h

Gente eu tive problemas aqui

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
wget: URL em falta
Utilização: wget [OPÇÃO]... [ENDEREÇO]...

Tente 'wget --help' para mais opções.
./tradutor.sh: linha 29: http://www.google.com/speech-api/v1/recognize?lang=pt-BR&client=chromium: Ficheiro ou directoria inexistente
Esta é a mensagem que foi compreendida com sua fala:

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

então que eu faço T_T ??





[17] Comentário enviado por adrianoh2 em 31/12/2013 - 14:44h

Cara... vc tem o Chromium Instalado? Verificou se ele está habilitado para todos os usuários...? Teu problema é com o Chromium :]
Além disso, veja se a linha não foi foi quebrada, se ficou em duas linhas, ele não vai funcionar. Verifique se está tudo realmente na mesma linha. O wget não consegue executar o comando em linhas quebradas.

[18] Comentário enviado por jbkira em 02/01/2014 - 15:37h

uma prof me ajudou a resolver ^_^


#------------------------- tradutor.sh ---------------------------------------
#Reeditado
#!/bin/bash
#Original de:
#Kris Occhipinti
#http://FilmsByKris.com
#Released under the GPLv3
#Adaptado por:
#Adriano Hedler
#26 de Março 2012

#Limpa a tela
clear

#Configuração:
#Determina a língua para tradução final
#no caso, alemão
lng="de"

#Grava temporariamente em um arquivo,
#Especifica um tempo de silencio para iniciar,
#E um tempo de silencio para parar.
rec -r 16000 -t alsa default /tmp/recording.flac silence 1 0.1 5% 5 1.0 5%

#Envia o que foi capturado para o sintetizador,
#e devolve o texto reconhecido.
x=$(wget -q -U "Mozilla/5.0" --post-file /tmp/recording.flac --header="Content-Type: audio/x-flac; rate=16000" -O - "http://www.google.com/speech-api/v1/recognize?lang=pt-BR&client=chromium"|cut -d\" -f12)

#Exibe o que foi capturado
echo "Esta é a mensagem que foi compreendida com sua fala:"
echo "$x"

#Envia o texto para efetuar a tradução para
#a língua escolhida.
y=$(wget -q -U "Mozilla/5.0" -O - "http://translate.google.com/translate_a/t?client=t&text=$x&sl=auto&tl=$lng"| sed 's/\[\[\[\"//' | cut -d \" -f 1)


#Exibe o texto na língua escolhida
echo "Esta é a mensagem que foi traduzida pelo serviço do Google:"
echo "$y"

#Toca a frase na língua que traduziu
mplayer -user-agent Mozilla "http://translate.google.com/translate_tts?tl=$lng&q=$(echo "$y" | sed 's#\ #\+#g')" > /dev/null 2>&1 ;

#Deixa quem testou feliz e termina.

#------------------------- tradutor.sh ---------------------------------------

[19] Comentário enviado por vitinho217 em 24/06/2014 - 11:15h

Muito legal, vou adicionar como mensagem de boas vinda para meu arch !

Valeu por compartilhar !


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts