-
Notifications
You must be signed in to change notification settings - Fork 1
/
assistente_virtual.py
127 lines (98 loc) · 3.72 KB
/
assistente_virtual.py
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
from asyncio.windows_events import NULL
import os
import speech_recognition as sr
from gtts import gTTS
from playsound import playsound
from io import BytesIO
from datetime import datetime
from pygame import mixer
import asyncio
import wikipedia_resumo as wikipedia
import previsao_tempo as tempo
import mensagens_twilio as mensagens
#Função para ouvir e reconhecer a fala, retornando um texto
def ouvir_microfone():
#Habilita o microfone do usuário
microfone = sr.Recognizer()
#usando o microfone
with sr.Microphone() as source:
#Chama um algoritmo de reducao de ruidos no som
microfone.adjust_for_ambient_noise(source)
#Armazena o que foi dito numa variavel
audio = microfone.listen(source)
try:
#Passa a variável para o algoritmo reconhecedor de padroes
frase = microfone.recognize_google(audio,language='pt-BR')
print("Reconhecendo audio...")
#Se nao reconheceu o padrao de fala, exibe a mensagem
except sr.UnkownValueError:
print("Não entendi")
return frase
#Converter o texto para audio e tocar o audio
async def gerar_audio(texto):
try:
mp3_fp = BytesIO()
tts = gTTS(texto,lang='pt-br')
tts.write_to_fp(mp3_fp)
mixer.init()
mixer.music.load(mp3_fp, 'mp3')
mixer.music.play()
while mixer.music.get_busy():
continue
#await asyncio.sleep(2)
except:
print('Erro - Gerar Audio')
def executar_comando(texto):
COMANDOS_WIKIPEDIA = ['wikipedia', 'wikipédia', 'pesquisar', 'buscar']
COMANDOS_TEMPO = ['previsão', 'previsao', 'tempo']
COMANDOS_MENSAGENS = ['mensagem', 'zap', 'whatsapp']
if bool([comando for comando in COMANDOS_WIKIPEDIA if(comando in texto.lower())]):
return wikipedia.resumo(texto)
elif bool([comando for comando in COMANDOS_TEMPO if(comando in texto.lower())]):
return tempo.previsao_tempo()
elif "navegador" in texto.lower():
os.system("start Chrome.exe")
elif "excel" in texto.lower():
os.system("start Excel.exe")
elif bool([comando for comando in COMANDOS_MENSAGENS if(comando in texto.lower())]):
try:
asyncio.run(gerar_audio('Diga qual a mensagem:'))
mensagem = ouvir_microfone()
print('mensagem: ' + mensagem)
asyncio.run(gerar_audio('Diga qual o numero do whatsapp com o DDD:'))
numero = ouvir_microfone()
print('numero: ' + numero)
return mensagens.enviar_zap(mensagem, numero)
except:
print('Erro - Microfone')
return 'Erro no envio!'
elif len(texto) > 0:
return wikipedia.resumo(texto)
def main():
COMANDOS_FINALIZAR = ['sair', 'fechar', 'desligar']
audio = ''
aprensentacao = """
Olá, eu sou a assistente virtual!
"""
print(aprensentacao)
asyncio.run(gerar_audio(aprensentacao))
while True:
try:
pergunta = 'Em que posso ajudar?'
print(pergunta)
asyncio.run(gerar_audio(pergunta))
audio = ouvir_microfone()
print('Audio: ' + audio)
except:
print('Erro - Microfone')
audio = ''
if len(audio) > 0:
asyncio.run(gerar_audio(audio))
if (bool([comando for comando in COMANDOS_FINALIZAR if(comando in audio.lower())])):
break
else:
comando = executar_comando(audio)
if comando:
asyncio.run(gerar_audio(comando))
print("SISTEMA DE RECONHECIMENTO POR VOZ")
main()