Todos hemos escuchado sobre los asistentes virtuales, ya sea en películas, libros o videojuegos. Son aquellos programas inteligentes que simulan el pensar y hablar de un humano pero que pueden realizar múltiples acciones con tan solo pedírselas.
Con los avances de la inteligencia artificial en áreas como el procesamiento de lenguaje natural, visión artificial y predicción de datos nos hemos acercado un poco a la creación de esos asistentes virtuales.
Aunque sin ser perfectos, actualmente existen maneras de programarlos de una manera sencilla para que puedan realizar acciones básicas como abrir un programa mediante comandos de voz o que te del estado del tiempo.
En este tutorial te enseñaremos a programar un asistente virtual con inteligencia artificial usando JarvisAI.
Descripción
El asistente virtual que se creará en este tutorial tendrá la capacidad de obtener el pronostico del tiempo, interactuar con aplicaciones de Windows, abrir sitios web, la fecha y más información.
Es capaz de obtener información desde el micrófono de su computadora y también tendrá la capacidad de mostrar información ya sea en la consola o usando el altavoz.
Paquetes necesarios
Para tener acceso a los modulos básicos del asistente virtual, se debe instalar el modulo de JarvisAI, usando el siguiente comando.
pip instalar JarvisAI
Usando el siguiente código de ejemplo podrá ver una lista de todas las funcionalidades disponibles:
import JarvisAI
obj = JarvisAI.JarvisAssistant()
response = obj.mic_input()
print(response)
La lista de las funciones básicas disponibles es:
- mic_input
- text2speech
- shutdown
- website_opener
- send_mail
- tell_me_date
- tell_me_time
- launch_any_app
- weather
- news
- tell_me
Codigo
Se debe importar todas las librerias necesarias y instanciar JarvisAI:
import JarvisAI
import re
import pprint
import random
obj = JarvisAI.JarvisAssistant()
Para convertir texto a voz se usa la siguiente función:
def t2s(text):
obj.text2speech(text)
Sera necesario obtener información directamente desde el microfono, para eso usamos el siguiente segmento de código:
while True:
res = obj.mic_input()
Para obtener el estado del tiempo vamos a usar una expresión regular, en donde si se encuentra “weather” o “temperature” significa que el comando tiende a ser la búsqueda del estado del tiempo, todo esto partiendo de la entrada de voz por microfono.
while True:
res = obj.mic_input()
if re.search('weather|temperature', res):
city = res.split(' ')[-1]
weather_res = obj.weather(city=city)
print(weather_res)
t2s(weather_res)
Tambien se realiza un proceso similar para acceder a las noticias:
while True:
res = obj.mic_input()
if re.search('news', res):
news_res = obj.news()
pprint.pprint(news_res)
t2s(f"I have found {len(news_res)} news. You can read it. Let me tell you first 2 of them")
t2s(news_res[0])
t2s(news_res[1])
Para funciones de búsqueda de información, se realiza una conexión a la API de Wikipedia, con la cual se extraen las primeras 500 palabras, usando el comando “tell me about” se puede ejecutar el siguiente código:
while True:
res = obj.mic_input()
if re.search('tell me about', res):
topic = res.split(' ')[-1]
wiki_res = obj.tell_me(topic)
print(wiki_res)
t2s(wiki_res)
Para funciones mas basicas de acceso a la hora y fecha puedes usar el siguiente código:
while True:
res = obj.mic_input()
if re.search('date', res):
date = obj.tell_me_date()
print(date)
print(t2s(date))
if re.search('time', res):
time = obj.tell_me_time()
print(time)
t2s(time)
Si deseas que se abra alguna pagina usando solo comandos de voz, como por ejemplo: Google o youtube, solo debes usar el siguiente código:
while True:
res = obj.mic_input()
if re.search('open', res):
domain = res.split(' ')[-1]
open_result = obj.website_opener(domain)
print(open_result)
Si necesitas ayuda para obtener ejemplos de la lista de comandos de voz disponibles, el siguiente fragmento de código te puede ser de gran ayuda:
while True:
res = obj.mic_input()
if re.search('what can you do', res):
li_commands = {
"open websites": "Example: 'open youtube.com",
"time": "Example: 'what time it is?'",
"date": "Example: 'what date it is?'",
"launch applications": "Example: 'launch chrome'",
"tell me": "Example: 'tell me about India'",
"weather": "Example: 'what weather/temperature in Mumbai?'",
"news": "Example: 'news for today' ",
}
ans = """I can do lots of things, for example you can ask me time, date, weather in your city,
I can open websites for you, launch application and more. See the list of commands-"""
print(ans)
pprint.pprint(li_commands)
t2s(ans)
Código Completo
import JarvisAI
import re
import pprint
import random
obj = JarvisAI.JarvisAssistant()
def t2s(text):
obj.text2speech(text)
while True:
res = obj.mic_input()
if re.search('weather|temperature', res):
city = res.split(' ')[-1]
weather_res = obj.weather(city=city)
print(weather_res)
t2s(weather_res)
if re.search('news', res):
news_res = obj.news()
pprint.pprint(news_res)
t2s(f"I have found {len(news_res)} news. You can read it. Let me tell you first 2 of them")
t2s(news_res[0])
t2s(news_res[1])
if re.search('tell me about', res):
topic = res.split(' ')[-1]
wiki_res = obj.tell_me(topic)
print(wiki_res)
t2s(wiki_res)
if re.search('date', res):
date = obj.tell_me_date()
print(date)
print(t2s(date))
if re.search('time', res):
time = obj.tell_me_time()
print(time)
t2s(time)
if re.search('open', res):
domain = res.split(' ')[-1]
open_result = obj.website_opener(domain)
print(open_result)
if re.search('launch', res):
dict_app = {
'chrome': 'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe',
'epic games': 'C:\Program Files (x86)\Epic Games\Launcher\Portal\Binaries\Win32\EpicGamesLauncher.exe'
}
app = res.split(' ', 1)[1]
path = dict_app.get(app)
if path is None:
t2s('Application path not found')
print('Application path not found')
else:
t2s('Launching: ' + app)
obj.launch_any_app(path_of_app=path)
if re.search('hello', res):
print('Hi')
t2s('Hi')
if re.search('how are you', res):
li = ['good', 'fine', 'great']
response = random.choice(li)
print(f"I am {response}")
t2s(f"I am {response}")
if re.search('your name|who are you', res):
print("My name is Jarvis, I am your personal assistant")
t2s("My name is Jarvis, I am your personal assistant")
if re.search('what can you do', res):
li_commands = {
"open websites": "Example: 'open youtube.com",
"time": "Example: 'what time it is?'",
"date": "Example: 'what date it is?'",
"launch applications": "Example: 'launch chrome'",
"tell me": "Example: 'tell me about India'",
"weather": "Example: 'what weather/temperature in Mumbai?'",
"news": "Example: 'news for today' ",
}
ans = """I can do lots of things, for example you can ask me time, date, weather in your city,
I can open websites for you, launch application and more. See the list of commands-"""
print(ans)
pprint.pprint(li_commands)
t2s(ans)
Si quieres apoyar al creador de Jarvis AI, puedes ir al siguiente repositorio:
Al ejecutar me sale el error
Traceback (most recent call last):
File «c:\Users\diego_000\Documents\Python\JarvisIA.py», line 1, in
from _typeshed import OpenBinaryModeReading
ModuleNotFoundError: No module named ‘_typeshed’
Debes descargar la librería
porque sigue me bota Traceback (most recent call last):
File «C:\Users\HP 2019\PycharmProjects\pythonProject\venv\Scripts\IA JARVIS.py», line 6, in
obj = JarvisAI.JarvisAssistant()
AttributeError: module ‘JarvisAI’ has no attribute ‘JarvisAssistant’
a pesar de que instale ya las librerias