206 lines
6.0 KiB
Python
206 lines
6.0 KiB
Python
|
import pyttsx3
|
||
|
import speech_recognition as sr
|
||
|
import pywhatkit
|
||
|
import yfinance as yf
|
||
|
import pyjokes
|
||
|
import webbrowser
|
||
|
import datetime
|
||
|
import wikipedia
|
||
|
|
||
|
# opciones de voz / idioma
|
||
|
id1 = 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_ES-MX_SABINA_11.0'
|
||
|
id2 = 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_EN-US_ZIRA_11.0'
|
||
|
id3 = 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_ES-ES_HELENA_11.0'
|
||
|
id4 = 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_EN-US_DAVID_11.0'
|
||
|
|
||
|
|
||
|
# escuchar nuestro microfono y devolver el audio comotexto
|
||
|
def trasformar_audio_en_texto():
|
||
|
|
||
|
# almacenar recognizer en variable
|
||
|
r = sr.Recognizer()
|
||
|
|
||
|
# configurar el microfono
|
||
|
with sr.Microphone() as origen:
|
||
|
|
||
|
# tiempo de espera
|
||
|
r.pause_threshold = 0.8
|
||
|
|
||
|
# informar que comenzo la grabacion
|
||
|
print("ya puedes hablar")
|
||
|
|
||
|
# guardar lo que escuche como audio
|
||
|
audio = r.listen(origen)
|
||
|
|
||
|
try:
|
||
|
# buscar en google
|
||
|
pedido = r.recognize_google(audio, language="es-ar")
|
||
|
|
||
|
# prueba de que pudo ingresar
|
||
|
print("Dijiste: " + pedido)
|
||
|
|
||
|
# devolver pedido
|
||
|
return pedido
|
||
|
|
||
|
# en caso de que no comprenda el audio
|
||
|
except sr.UnknownValueError:
|
||
|
|
||
|
# prueba de que no comprendio el audio
|
||
|
print("ups, no entendi")
|
||
|
|
||
|
# devolver error
|
||
|
return "sigo esperando"
|
||
|
|
||
|
# en caso de no resolver el pedido
|
||
|
except sr.RequestError:
|
||
|
|
||
|
# prueba de que no comprendio el audio
|
||
|
print("ups, no hay servicio")
|
||
|
|
||
|
# devolver error
|
||
|
return "sigo esperando"
|
||
|
|
||
|
# error inesperado
|
||
|
except:
|
||
|
|
||
|
# prueba de que no comprendio el audio
|
||
|
print("ups, algo ha salido mal")
|
||
|
|
||
|
# devolver error
|
||
|
return "sigo esperando"
|
||
|
|
||
|
|
||
|
# funcion para que el asistente pueda ser escuchado
|
||
|
def hablar(mensaje):
|
||
|
|
||
|
# encender el motor de pyttsx3
|
||
|
engine = pyttsx3.init()
|
||
|
engine.setProperty('voice', id3)
|
||
|
|
||
|
# pronunciar mensaje
|
||
|
engine.say(mensaje)
|
||
|
engine.runAndWait()
|
||
|
|
||
|
|
||
|
# informar el dia de la semana
|
||
|
def pedir_dia():
|
||
|
|
||
|
# crear variable con datos de hoy
|
||
|
dia = datetime.date.today()
|
||
|
print(dia)
|
||
|
|
||
|
# crear variable para el dia de semana
|
||
|
dia_semana = dia.weekday()
|
||
|
print(dia_semana)
|
||
|
|
||
|
# diccionario con nombres de dias
|
||
|
calendario = {0: 'Lunes',
|
||
|
1: 'Martes',
|
||
|
2: 'Miércoles',
|
||
|
3: 'Jueves',
|
||
|
4: 'Viernes',
|
||
|
5: 'Sábado',
|
||
|
6: 'Domingo'}
|
||
|
|
||
|
# decir el dia de la semana
|
||
|
hablar(f'Hoy es {calendario[dia_semana]}')
|
||
|
|
||
|
|
||
|
# informar que hora es
|
||
|
def pedir_hora():
|
||
|
|
||
|
# crear una variab;e con datos de la hora
|
||
|
hora = datetime.datetime.now()
|
||
|
hora = f'En este momento son las {hora.hour} horas con {hora.minute} minutos y {hora.second} segundos'
|
||
|
print(hora)
|
||
|
|
||
|
# decir la hora
|
||
|
hablar(hora)
|
||
|
|
||
|
|
||
|
# funcion saludo inicial
|
||
|
def saludo_inicial():
|
||
|
|
||
|
# crear variable condatos 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'
|
||
|
else:
|
||
|
momento = 'Buenas tardes'
|
||
|
|
||
|
# decir el saludo
|
||
|
hablar(f'{momento}, soy Helena, tu asistente personal. Por favor, dime en qué te puedo ayudar')
|
||
|
|
||
|
|
||
|
# funcion central del asistente
|
||
|
def pedir_cosas():
|
||
|
|
||
|
# activar saludo inicial
|
||
|
saludo_inicial()
|
||
|
|
||
|
# variable de corte
|
||
|
comenzar = True
|
||
|
|
||
|
# loop central
|
||
|
while comenzar:
|
||
|
|
||
|
# activar el micro y guardar el pedido en un string
|
||
|
pedido = trasformar_audio_en_texto().lower()
|
||
|
|
||
|
if 'abrir youtube' in pedido:
|
||
|
hablar('Con gusto, estoy abriendo youTube')
|
||
|
webbrowser.open('https://www.youtube.com')
|
||
|
continue
|
||
|
elif 'abrir navegador' in pedido:
|
||
|
hablar('Claro, estoy en eso')
|
||
|
webbrowser.open('https://www.google.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 eso en wikipedia')
|
||
|
pedido = pedido.replace('busca en wikipedia', '')
|
||
|
wikipedia.set_lang('es')
|
||
|
resultado = wikipedia.summary(pedido, sentences=1)
|
||
|
hablar('Wikipedia dice lo siguiente:')
|
||
|
hablar(resultado)
|
||
|
continue
|
||
|
elif 'busca en internet' in pedido:
|
||
|
hablar('Ya mismo estoy en eso')
|
||
|
pedido = pedido.replace('busca en internet', '')
|
||
|
pywhatkit.search(pedido)
|
||
|
hablar('Esto es lo que he encontrado')
|
||
|
continue
|
||
|
elif 'reproducir' in pedido:
|
||
|
hablar('Buena idea, ya comienzo a reproducirlo')
|
||
|
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':'APPL',
|
||
|
'amazon':'AMZN',
|
||
|
'google':'GOOGL'}
|
||
|
try:
|
||
|
accion_buscada = cartera[accion]
|
||
|
accion_buscada = yf.Ticker(accion_buscada)
|
||
|
precio_actual = accion_buscada.info['regularMarketPrice']
|
||
|
hablar(f'La encontré, el precio de {accion} es {precio_actual}')
|
||
|
continue
|
||
|
except:
|
||
|
hablar("Perdón pero no la he encontrado")
|
||
|
continue
|
||
|
elif 'adiós' in pedido:
|
||
|
hablar("Me voy a descansar, cualquier cosa me avisas")
|
||
|
break
|
||
|
|
||
|
|
||
|
pedir_cosas()
|