You've already forked Curso-lenguaje-python
Restructure content and add notes from HolaMundo
Signed-off-by: Manuel Vergara <manuel@vergaracarmona.es>
This commit is contained in:
206
python-total/doc_curso/13_asistente_voz/100asistente_virtual.py
Normal file
206
python-total/doc_curso/13_asistente_voz/100asistente_virtual.py
Normal file
@@ -0,0 +1,206 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user