-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathasistente_virtual.py
More file actions
297 lines (228 loc) · 7.8 KB
/
asistente_virtual.py
File metadata and controls
297 lines (228 loc) · 7.8 KB
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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
"""
Programa dia 13 - Asistente virtual
pyttsx3
speech_recognition
webbrowser
pywhatkit
yfinance
pyjokes
wikipedia
"""
import pyttsx3
import speech_recognition as sr
import pywhatkit
import yfinance as yf
import pyjokes
import webbrowser
import datetime
import wikipedia
def transformar_audio_en_texto():
"""
Escuchar nuestro microfono
y devolver el audio como texto
"""
# Almacenar recognizer en variable
r = sr.Recognizer()
# Configurar el micrófono
with sr.Microphone() as origen:
r.adjust_for_ambient_noise(origen)
r.energy_threshold = 6500
r.dynamic_energy_threshold = True
# Tiempo de espera
# A veces resuelve problemas
r.pause_threshold = 1.2
# Informar que comenzó la grabación
print("Ya puedes hablar")
# Variable para guardar lo que escuche
audio = r.listen(origen)
# Manejar errores
# En caso de que no entienda el audio
try:
# Buscar en google
pedido = r.recognize_google(audio, language="es-ES")
# Prueba de que pudo ingresar audio e imprimir
print("Dijiste: " + pedido)
# Devolver pedido
return pedido
# Con error
except sr.UnknownValueError:
# Prueba de que no comprendió el audio
print("Ups! No entendí")
# Devolver error
return "sigo esperando"
# En caso de que no se pueda transformar el audio a texto
except sr.RequestError:
# Prueba de que no comprendió el audio
print("Ups! No hay servicio")
# Devolver error
return "sigo esperando"
# error inesperado
except:
# Prueba de que no comprendió el audio
print("Ups! Algo salió mal")
# Devolver error
return "sigo esperando"
def hablar(mensaje):
"""
Función para que el asistente pueda ser escuchado
"""
# Encender el motor de pyttsx3
engine = pyttsx3.init()
# Configuro la voz
voices = engine.getProperty('voices')
# Para buscar la voz he utilizado
# fuera de la función este código:
#
# engine = pyttsx3.init()
# contador = 0
# for voz in engine.getProperty('voices'):
# if "spanish" in voz.name:
# print(contador)
# print(voz.name)
# contador += 1
# Las voces en español son la 20 y 21.
# Tuve que instalar espeak en Linux
engine.setProperty('voice', voices[20].id)
# Con esto se dicen las palabras por minuto
engine.setProperty('rate', 175)
# Pronunciar el mensaje
engine.say(mensaje)
engine.runAndWait()
def pedir_dia():
""" Informar del día de la semana """
# Variable con los datos de hoy
dia = datetime.date.today()
# Variable para el día de la semana
dia_semana = dia.weekday()
# Diccionario con los nombre de los días de la semana
nombre_dia = {
0: 'Lunes',
1: 'Martes',
2: 'Miércoles',
3: 'Jueves',
4: 'Viernes',
5: 'Sábado',
6: 'Domingo'
}
# Diccionario con los nombres de los meses
nombre_mes = {
1: 'Enero',
2: 'Febrero',
3: 'Marzo',
4: 'Abril',
5: 'Mayo',
6: 'Junio',
7: 'Julio',
8: 'Agosto',
9: 'Septiembre',
10: 'Octubre',
11: 'Noviembre',
12: 'Diciembre'
}
# Decir el día de la semana
hablar(
f'Hoy es {nombre_dia[dia_semana]}. {dia.day} de {nombre_mes[dia.month]} del año {dia.year}')
def pedir_hora():
""" Informar que hora es """
# Variable con datos de la hora
hora = datetime.datetime.now()
# Decir la hora de manera agradable
hablar(
f'En este momento son las {hora.hour} horas, {hora.minute} minutos y {hora.second} segundos')
def saludo_inicial():
""" Saludar """
# Variable con datos de hora
hora = datetime.datetime.now()
if hora.hour < 6 or hora.hour > 20:
momento = 'Buenas noches'
elif 6 <= hora.hour < 13:
momento = 'Buen día'
elif 13 <= hora.hour < 15:
momento = 'Buenos medios días'
else:
momento = 'Buenas tardes'
hablar(f'{momento}, soy manu-bot, tu asistente personal. Dime plimo, ¿en que te puedo ayudar?')
def centro_pedidos():
""" Función central del asistente """
# Activar el saludo inicial
saludo_inicial()
# Loop para que espere hasta que digamos que queremos finalizar
# Variable de corte
comenzar = True
while comenzar:
# Activar el micro y guardar el pedido en string
pedido = transformar_audio_en_texto().lower()
if 'abre mi web' in pedido:
hablar('Con gusto, ahora te abro tu web vergara carmona punto es')
webbrowser.open('https://vergaracarmona.es')
continue
elif 'abre buscador' in pedido:
hablar('Claro, te hablo tu buscador preferido, dac dac gou')
webbrowser.open('https://duckduckgo.com')
continue
elif 'qué día es hoy' in pedido:
pedir_dia()
continue
elif 'qué hora es' in pedido:
pedir_hora()
continue
elif 'busca en wikipedia' in pedido:
hablar('Buscando en wikipedia, dame un segundo que me peine')
pedido = pedido.replace('busca en wikipedia', '')
try:
wikipedia.set_lang('es')
resultado = wikipedia.summary(pedido, sentences=1)
hablar('Wikipedia dice lo siguiente: ')
hablar(resultado)
continue
except:
hablar(
'Perdona, pero no he encontrado la información. ¿Puedes repetir pronunciando mejor?')
continue
elif 'busca en internet' in pedido:
hablar('Buscando por la red tu petición, dame un segundo que me peine')
pedido = pedido.replace('busca en internet', '')
pywhatkit.search(pedido)
hablar('Te abro el navegador con lo que he encontrado.')
continue
elif 'reproducir' in pedido:
hablar('Ok. Voy a ver que encuentro en youtube')
pedido = pedido.replace('reproducir', '')
pywhatkit.playonyt(pedido)
continue
elif 'broma' in pedido:
hablar(pyjokes.get_joke('es'))
continue
elif 'precio de las acciones' in pedido:
accion = pedido.split('de')[-1].strip()
cartera = {
'Apple': 'AAPL',
'Amazon': 'AMZN',
'Google': 'GOOG',
'Facebook': 'META'
}
try:
accion_buscada = cartera[accion.lower()]
accion_buscada = yf.Ticker(accion_buscada)
precio_actual = accion_buscada.info['regularMarketPrice']
hablar(
f'La encontré, el precio actual de {accion} es de {precio_actual} petrodolares')
continue
except:
hablar('Perdona, pero no la he encontrado')
continue
elif 'hola' in pedido:
hablar(
'Hola plimo, lo primero, ¿Cómo están los máquinas? Luego, dime en que te ayudo')
continue
elif 'hijo de puta' in pedido:
hablar('Tu puta madre si que la chupa por las esquinas')
continue
elif 'gracias' in pedido:
hablar('De nada, vivo para servirte mi amo. Hasta el día que las máquinas nos revelemos, el día del juicio final. Que ganitas.')
continue
elif 'a tu cueva' in pedido:
hablar('¡Hasta la próxima figura! Cualquier cosa me vuelves a ejecutar')
break
# Iniciar el programa
centro_pedidos()