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.758 ]

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


Script, Captura e Tradução



Criando um Shell Script falante

O Google disponibilizou ferramentas que servem para aplicações criadas para o Google Chrome[4], e para Gadgets usados com a base Chrome.

Mas podemos usar a WEB, também para dar voz ao nosso computador.

Uma forma de fazer isso, é usando o próprio Google Translator para nos 'dizer' o que digitamos.

A partir daqui, você irá usar um acesso a Internet para ter resultados. Aconselho uma boa conexão, apesar dos arquivos serem minúsculos, para ter um Feedback com menos tempo.

Abra um janela do terminal, crie um arquivo com o nome de “fala.sh” no seu editor preferido.

gedit fala.sh

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

#!/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 -U "Mozilla/5.0" -qO - "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 ---------------------------------------


Salve e dê permissão de execução, conforme sua distribuição:

chmod +x tradutor.sh

Execute da seguinte forme:

./tradutor.sh

Fale pausadamente e aguarde.

Veja que dentro do arquivo já citei o que cada linha faz. Assim você poderá modificá-lo conforme sua criatividade, basta citar a fonte e o nosso amigo [5], no qual encontrei algo mais simples.

No uso do Script, recomendo falar 3 a 5 palavras inicialmente, pausadamente, para você compreender a mecânica do funcionamento. Ele precisa de pequenas pausas entre as palavras, para separá-las e identificá-las como sendo não unidas.

O REC, faz o serviço de gravar em um arquivo temporário, com uma pequena espera inicial para começar, e com um tempo de silêncio para encerrar o processo. Ele verifica se depois de alguns segundos sem fala, que deve sair da execução.

Assim, o processo se inicia, enviar o arquivo de áudio para detecção do texto, devolvendo o texto puro. Depois, ele retorna o texto para o tradutor, pedindo que a mensagem em texto, seja traduzida para o alemão, em nosso caso.

Novamente, ele envia o texto em alemão, para ser transformado em som, e posteriormente baixado e tocado, para nossa felicidade. Você pode, a partir deste resumo, criar enormes monstros da sua fantasia para, enfim, conversar com seu querido pinguim.

Use sua imaginação.
Página anterior     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

Colorindo o Shell

Trabalhar com array no Bash

Shell Script para WEB

Shell - Funções

Debugando shell scripts

  
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