Jan-18-2022, 06:42 PM
Hello,
I'm looking to add a text input for my voice assistant in case a mic isn't around.
So if a mic isn't available I'd like to be able to switch to a text input mode where I can type in the commands instead of speaking them.
I would like to add:
Or do I have to make a function that switches between text input and voice input?
[If no mic is detected command=input() and if a mic is detected command = listenCommand() or if I say "Switch to text input" it would overwrite the command variable to equal input(), then if I say "Switch to voice input" it would then rewrite the command variable again to equal listenCommand()]
Can it be done like this, or is there a better way?
Thanks in advance.
Full code:
I'm looking to add a text input for my voice assistant in case a mic isn't around.
So if a mic isn't available I'd like to be able to switch to a text input mode where I can type in the commands instead of speaking them.
I would like to add:
command = input("Commander: ")But I already have:command = listenCommand()Is it possible to keep both (can the command variable equal those two different things)?
Or do I have to make a function that switches between text input and voice input?
[If no mic is detected command=input() and if a mic is detected command = listenCommand() or if I say "Switch to text input" it would overwrite the command variable to equal input(), then if I say "Switch to voice input" it would then rewrite the command variable again to equal listenCommand()]
Can it be done like this, or is there a better way?
Thanks in advance.
Full code:
#!/usr/bin/env python3
import json
from pyexpat import version_info
import random
import datetime
import operator
import os
import time
import sys
import requests
from bs4 import BeautifulSoup
from Weather import *
import wikipedia
import wolframalpha
import pyttsx3
import espeakng
import speech_recognition as sr
from Animations import startupAnimation
#-------------------------------------------------------------------------------------
#Commander Name (You) and A.I Name
#-------------------------------------------------------------------------------------
Commander = "Commander"
AI_Name = 'Baxter'
#-------------------------------------------------------------------------------------
def speak(text):
mySpeaker = espeakng.Speaker()
#mySpeaker.say('Initializing Baxter')
def wishMe():
hour = int(datetime.datetime.now().hour)
if hour>=0 and hour<12:
speak("Good Morning" + Commander)
elif hour>=12 and hour<18:
speak("Good Afternoon" + Commander)
else:
speak("Good Evening" + Commander)
def listenCommand():
command=0
hear = sr.Recognizer()
with sr.Microphone() as source:
print("Listening...")
audio = hear.listen(source)
#---------------------------
# Uses google API to listen
try:
print("Recognizing...")
command = hear.recognize_google(audio, language='en-in')
print(f'{Commander} : {command}\n')
#--------------------------------
except:
pass
return command
wishMe()
speak("How may I be of service?")
#Initiate Start Up Animation
startupAnimation()
while True:
command = listenCommand()
command=str(command).lower()
#-------------------------------------------------------------------------------------
#Search Wikipedia (General Info)
#-------------------------------------------------------------------------------------
if ('weather' not in command):
if ('who is' in command) or ('what is the' in command) or ('what is a' in command) or ("what is" in command):
if ('time' not in command):
if ('news' not in command):
speak('Searching Wikipedia...')
command = command.replace("who is","")
command = command.replace("what is the","")
command = command.replace("what is a","")
command = command.replace("what is","")
results = wikipedia.summary(command, sentences = 2)
#----------------------
#Auto typing animation:
print("Baxter: ", end="")
for i in results:
sys.stdout.write(i)
sys.stdout.flush()
time.sleep(0.05)
print("\n")
#----------------------
speak(results)
#-------------------------------------------------------------------------------------
#Search Wolfram Alpha (Math/Conversions, Definitions)
#-------------------------------------------------------------------------------------
if ('weather' not in command):
if ('news' not in command):
if ('calculate' in command) or ("what's" in command) or ('define' in command):
speak('Searching Wolfram Alpha...')
command = command.replace("calculate","")
command = command.replace("what's","")
command = command.replace("define","")
# Wolframalpha App Id
appId = 'JH9XHR-W9J76L7H5A'
# Wolfram Instance
client = wolframalpha.Client(appId)
res = client.query(''.join(command))
results = next(res.results).text
#----------------------
#Auto typing animation:
print("Baxter: ", end="")
for i in results:
sys.stdout.write(i)
sys.stdout.flush()
time.sleep(0.05)
print("\n")
#----------------------
speak(results)
#-------------------------------------------------------------------------------------
#Search News
#-------------------------------------------------------------------------------------
if ('news' in command):
speak('Searching news networks...')
command = command.replace("news","")
#Gets the news headlines from this url:
url='https://www.google.com/search?q=windsor+news&client=firefox-b-d&source=lnms&tbm=nws&sa=X&ved=2ahUKEwjFr5SwoJb1AhXELs0KHdabBAEQ_AUoAXoECAEQAw&biw=1024&bih=486'
results = requests.get(url)
soup = BeautifulSoup(results.text, 'html.parser')
headlines = soup.find('body').find_all('h3')
for x in headlines:
print("Baxter:",x.text.strip())
speak(results)
#-------------------------------------------------------------------------------------
#Search Weather
#-------------------------------------------------------------------------------------
if ('weather' in command):
if ('week' in command):
speak('Searching weather networks...')
command = command.replace("weather for the week","")
#Call weather data for the week:
displayWeeksWeatherData()
else:
speak('Searching weather networks...')
command = command.replace("weather","")
#Call weather data for today:
displayWeatherData()
#-------------------------------------------------------------------------------------
#Tell Time
#-------------------------------------------------------------------------------------
elif ('time' in command):
speak('Scanning local clock networks...')
command = command.replace("time","")
strTime = datetime.datetime.now().strftime("%I:%M%P")
speak("The time is {strTime}")
print("Baxter: The time is ", strTime)
#-------------------------------------------------------------------------------------
#Enter the Matrix (Easter Egg)
#-------------------------------------------------------------------------------------
elif ('matrix' in command):
speak('Entering the matrix...')
command = command.replace("matrix","")
response = "Taking the red pill..."
#----------------------
#Auto typing animation:
print("Baxter: ", end="")
for i in response:
sys.stdout.write(i)
sys.stdout.flush()
time.sleep(0.2)
print("\n")
#----------------------
time.sleep(2)
os.system("cmatrix")
#-------------------------------------------------------------------------------------
#-------------------------------------------------------------------------------------
#Stop Program/Script Command
#-------------------------------------------------------------------------------------
elif ('stop' in command) or ('shutdown' in command) or ('quit' in command):
speak("Shutting Down...")
response = "Terminating program..."
#----------------------
#Auto typing animation:
print("Baxter: ", end="")
for i in response:
sys.stdout.write(i)
sys.stdout.flush()
time.sleep(0.2)
print("\n")
#----------------------
exit()
#-------------------------------------------------------------------------------------
