Ao ver o Tony Stark (Homem de Ferro) nos filmes da Marvel, sempre dava vontade de ter um assistente virtual como o Jarvis. A Siri, Cortana e Alexa ainda não possuem o mesmo nível de interação. Pesquisando na Internet encontrei o projeto https://kripytonianojarvis.com/site/ que eu achei bem interessante.
Mas acho que ainda não é o que eu quero, então decidi (tentar) criar uma assistente virtual. Sei que não será fácil e esse projeto será uma espécie de hobby.
A primeira parte é a comunicação por voz com o computador, assim preciso que a máquina entenda a minha fala. Nesse post vou mostrar código em python para capturar a fala do microfone e transformar em texto, gravando em um arquivo.
Vamos ao Código.
Instalação das Bibliotecas
pip install SpeechRecognition pip install pyaudio
Se você estiver no Windows será necessário utilizar:
pip install pipwin pipwin install pyaudio
Apesar do código não chamar explicitamente o Pyaudio ele é necessário para podermos acessar o microfone. Portanto, é imprescindível que ele esteja instalado corretamente.
Código completo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | import speech_recognition as sr def EscreveArquivo(mensagem): try : with open ( "transcricao_audio.txt" , "a" ) as file : file .write( str (mensagem) + "\n" ) file .close() except : print ( "Erro na Escrita da " + mensagem) r = sr.Recognizer() mensagem = "" while (mensagem ! = "desligar" ): with sr.Microphone() as source: r.adjust_for_ambient_noise(source) print ( "Diga Algo:" ) audio = r.listen(source) print ( "Hello" ) try : mensagem = r.recognize_google(audio, language = 'pt-BR' ) print ( "Você falou: " + mensagem) except sr.UnknownValueError: print ( "Google Speech Recognition não pode entender o que você falou!" ) except sr.RequestError as e: print ( "Não foram obtidos resultados do Google Speech Recognition service; {0}" . format (e)) EscreveArquivo(mensagem) |
Escrita em Arquivo
1 2 3 4 5 6 7 8 9 10 | import speech_recognition as sr def EscreveArquivo(mensagem): try : with open ( "transcricao_audio.txt" , "a" ) as file : file .write( str (mensagem) + "\n" ) file .close() except : print ( "Erro na Escrita da " + mensagem) |
Essa primeira parte do código tem a importação de biblioteca e a função para escrever o texto transcrito. Isso será importante para no futuro enviarmos a mensagem de texto com comandos para o computador e outros equipamentos. Já pensou ligar a cafeteira com comando de voz. Muito Show!
Reconhecimento de Voz
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | r = sr.Recognizer() mensagem = "" while (mensagem ! = "desligar" ): with sr.Microphone() as source: r.adjust_for_ambient_noise(source) print ( "Diga Algo:" ) audio = r.listen(source) print ( "Hello" ) try : mensagem = r.recognize_google(audio, language = 'pt-BR' ) print ( "Você falou: " + mensagem) except sr.UnknownValueError: print ( "Google Speech Recognition não pode entender o que você falou!" ) except sr.RequestError as e: print ( "Não foram obtidos resultados do Google Speech Recognition service; {0}" . format (e)) |
O Reconhecimento de voz é realizado pelo Google Speech Recognition e no nosso exemplo está ajustado para entender o português. Há dois tratamentos de erro. O primeiro erro refere-se ao fato da máquina não entender o que foi dito, já o segundo está relacionado a conexão com a rede do Google. Para tudo funcionar corretamente é necessário ter conexão com a Internet.
O Google Speech Recognition é uma rede neural de treinamento para o reconhecimento de fala. Ela é bem robusta pois na maioria das vezes irá reconhecer a fala sem uma etapa de calibração do timbre de voz.
Interessante notar que o programa funciona até receber, por voz, o comando “desligar”.
Conclusão
Foi escrito um código simples que captura o que foi falado e exibe em formato de texto na tela. Além disso, tudo o que foi falado fica gravado em um arquivo de texto e o programa é encerrado ao falarmos “desligar”.
Para trabalhos futuros iremos acrescentar comandos para que o computador execute tarefas através do comando de voz.