domingo, 21 de julho de 2013

Configurar Reconhecimento de voz em Português no Asterisk

Este script usa o reconhecimento de voz da Google, transformando a voz em formato de texto que posteriomente é utilizado como uma variavel de dialplan no asterisk.

Requisitos:
 
Perl          The Perl Programming Language
perl-libwww   The World-Wide Web library for Perl
IO-Socket-SSL Perl module that implements an interface to SSL sockets.
flac          Free Lossless Audio Codec
Acesso à internet.
 
 
Instalar:
 
cd /var/lib/asterisk/agi-bin/
wget https://github.com/zaf/asterisk-speech-recog/archive/master.zip
unzip master

Copiar os ficheiros contidos no directório asterisk-speech-recog-master e seus sub-directórios para 
/var/lib/asterisk/agi-bin/
 
Exemplos Asterisk dialplan: 
 
;;Simple speech recognition
exten => 1234,1,Answer()
exten => 1234,n,agi(speech-recog.agi,en-US)
exten => 1234,n,Verbose(1,The text you just said is: ${utterance})
exten => 1234,n,Verbose(1,The probability to be right is: ${confidence})
exten => 1234,n,Hangup()
 
 
;;Speech recognition demo:
exten => 1235,1,Answer()
exten => 1235,n,agi(googletts.agi,"Say something in English, when done press the pound key.",en)
exten => 1235,n(record),agi(speech-recog.agi,en-US)
exten => 1235,n,Verbose(1,Script returned: ${status} , ${id} , ${confidence} , ${utterance})

;Check return status:
exten => 1235,n,GotoIf($["${status}" = "0"]?success:fail)

;Check the probability of a successful recognition:
exten => 1235,n(success),GotoIf($["${confidence}" > "0.8"]?playback:retry)

;Playback the text:
exten => 1235,n(playback),agi(googletts.agi,"The text you just said was...",en)
exten => 1235,n,agi(googletts.agi,"${utterance}",en)
exten => 1235,n,goto(end)

;Retry in case speech recognition wasn't successful:
exten => 1235,n(retry),agi(googletts.agi,"Can you please repeat more clearly?",en)
exten => 1235,n,goto(record)

exten => 1235,n(fail),agi(googletts.agi,"Failed to get speech data.",en)
exten => 1235,n(end),Hangup()
 
 
 
 
 
;;Voice dialing example
exten => 1236,1,Answer()
exten => 1236,n,agi(googletts.agi,"Please say the number you want to dial.",en)
exten => 1236,n(record),agi(speech-recog.agi,en-US)
exten => 1236,n,GotoIf($[$["${status}" = "0"] & $["${confidence}" > "0.8"]]?success:retry)

exten => 1236,n(success),goto(${utterance},1)

exten => 1236,n(retry),agi(googletts.agi,"Can you please repeat?",en)
exten => 1236,n,goto(record) 

Alterar passwords no FreePBX

Na linha de comando digitar:

Set fpbx/webmin and sets passwds maint/amp/meetme
passwd-master

Set password for maint - web GUI
passwd-maint

Set password for wwwadmin
passwd-wwwadmin

Set password for Web MeetMe
passwd-meetme

Set password for Webmin
passwd-webmin

Set root password for console login
passwd

quinta-feira, 11 de julho de 2013

Configurar TTS em Português para Asterisk

Artigo de Marcelo Terres com algumas adaptações por Marcelo Araújo

Asterisk e Google Text to Speech

No uso diário do Asterisk, periodicamente me deparo com a necessidade de gerar arquivos de áudio para tocar mensagens informativas básicas para o usuário.
Obter tais arquivos é uma tarefa eventualmente árdua que normalmente envolve a gravação in house dos arquivos (que consome um tempo razoável) ou a contratação de uma empresa especializada. Existem várias empresas excelentes neste nicho de mercado, mas às vezes não existe orçamento ou até mesmo tempo para produzir áudios mais básicos, para consumo interno.
Como alternativa para a criação de tais áudios, encontrei na lista AsteriskBrasil a sugestão do AGI GoogleTTS.
Este AGI utiliza o Google Text to Speech para gerar um arquivo de áudio on demand na linguagem que você indicar, e que, após sua geração, é automaticamente tocado pra o usuário. Como utiliza o Google Text to Speech, este AGI necessita de uma conexão ativa de Internet, mas, como todo software bem planejado, ele  possui um sistema de cache que garante que a mesma mensagem de áudio não precise ser gerada mais de uma vez, o que possibilita que os arquivos de áudio possam ser utilizados mesmo que o link Internet esteja indisponível, contanto que o mesmo já tenha sido gerado anteriormente.
Instalando o googletts.agi

O AGI, que é escrito em perl, depende de algumas bibliotecas e softwares bastante populares, que podem ser facilmente instalados no Ubuntu 12.04 com o comando apt-get install libwww-perl mpg123 sox.

Após fazer o download do arquivo .tar.gz, descompacte-o e coloque o arquivo googletts.agi no diretório /var/lib/asterisk/agi-bin/  para que o Asterisk possa acessá-lo. Não esqueça de verificar as permissões de acesso do arquivo.
Ajuda:
cd /var/lib/asterisk/agi-bin
wget http://github.com/zaf/asterisk-googletts/tarball/master/zaf-asterisk-googletts-v0.6-20-g3bebc50.tar.gz
tar -xzvf master
cd zaf-asterisk-googletts-3bebc50
mv googletts.agi /var/lib/asterisk/agi-bin/googletts.agi
cd cli
mv googletts-cli.pl /var/lib/asterisk/agi-bin/zaf-asterisk-googletts-3bebc50/googletts-cli.pl
cd /var/lib/asterisk/agi-bin/
rm -r zaf-asterisk-googletts-3bebc50
rm master
Aconselho que antes de iniciar o uso, o arquivo googletts.agi seja editado para definir algumas paramêtros, como a linguagem padrão e o diretório para armazenamento do cache (o diretório padrão, /tmp, certamente não é a melhor escolha para armazenar tais dados).
Permissões: 
chmod 755 googletts.agi

Alterar ficheiro:
vi googletts.agi
mudar lingua para:
Portuguese Brazil:  pt-BR ou Portuguese Portugal:pt-PT
Utilizando o googletts.agi
Abaixo um pequeno exemplo de utilização da ferramenta para informar de maneira audível ao usuário qual seu ramal e nome de usuário:

[internal_services] 
exten => *65,1,NoOp(Who Am I)
same => n,Answer
same => n,agi(googletts.agi,"Meu ramal é ${CALLERID(num)} e meu usuário é ${CALLERID(name)}",pt-BR)
same => n,Hangup
Criar um ficheiro wave:
 /var/lib/asterisk/agi-bin/googletts-cli.pl -l en -t "Olá, chegou à caixa de mensagens da casa de Marcelo, por favor deixe a sua mensagem depois do sinal" -r 8000 -o /var/lib/asterisk/sounds/tts/chegoucaixamensagens.wav

Bibiografia: 
http://mundoopensource.blogspot.pt/2013/01/asterisk-e-google-text-to-speech.html
http://zaf.github.io/asterisk-googletts/
http://pbxinaflash.com/community/index.php?threads/create-wav-file-with-googletts.12555/