here is my entire project thanks in advance guys and i have taken the ip for the hue bridge off for the post so it might effect the order
# Imported librays
import speech_recognition as sr
import os
from gtts import gTTS
import datetime
import warnings
import calendar
import random
import wikipedia
import re
import webbrowser
from phue import Bridge
#hue lights
def rgb_to_xy(red, green, blue) -> object:
red = pow((red + 0.055) / (1.0 + 0.055), 2.4) if red > 0.04045 else (red / 12.92)
green = pow((green + 0.055) / (1.0 + 0.055), 2.4) if green > 0.04045 else (green / 12.92)
blue = pow((blue + 0.055) / (1.0 + 0.055), 2.4) if blue > 0.04045 else (blue / 12.92)
# convert rgb to xyz
x = red * 0.649926 + green * 0.103455 + blue * 0.197109
y = red * 0.234327 + green * 0.743075 + blue * 0.022598
z = green * 0.053077 + blue * 1.035763
# convert xyz to xy
x = x / (x + y + z)
y = y / (x + y + z)
return [x, y]
# truned off (with comment for now) b = Bridge()
# If the app is not registered and the button is not pressed, press the button and call connect() (this only needs to be run a single time)
b.connect()
# Get the bridge state (This returns the full dictionary that you can explore)
b.get_api()
# ignore any warning messages
warnings.filterwarnings('ignore')
# record audio and return it as a string
def recordaudio():
#record audio
r = sr.Recognizer() # creating recognizer
# open microphone and start recording
with sr.Microphone() as source:
print('listening:')# for testing perpouses
#r.pause_threshold = .7
audio = r.listen(source)
# use google speech recegnizor
data = '' #the audio that is said
try:
data = r.recognize_google(audio)
print('you said: '+data) # 'you said' + the data that was said
except sr.UnknownValueError:
print('google speech recognition could not understand the audio, unknown error')
except sr.RequestError as e:
print('request results from google speech recognition service error'+ e)
return data
#function to get the AI response
def assistantResponse (text):
print(text)
#convert text to speech
myobj = gTTS(text= text, lang='en', slow=False)
#save converted audio to file
myobj.save('assistant_response.mp3')
#play mp3 file
os.system('start assistant_response.mp3')
#what is your name
def name(text):
WAKE_WORD = ['what is your name']
text = text.lower()
for phrase in WAKE_WORD:
if phrase in text:
return True
return False
#creating a function for wake word(s) or phrase
def wakeWord(text):
WAKE_WORDS = ['eta', 'ada', 'hey ada', 'hi ada', 'aida', 'haida',] #list of wake words
text = text.lower() #converting text to all lower case words
#check to see if the users command or text contains a wake word/phrase
for phrase in WAKE_WORDS:
if phrase in text:
return True
#if the wake word isnt found in the text from the loop it returns false
return False
# a function to get current date
def getDate():
now = datetime.datetime.now()
my_date = datetime.datetime.today()
weekday = calendar.day_name[my_date.weekday()]#e.g. Friday
dayNum = now.day
#a list of months
month_names = ['January', 'February', 'March', 'April', 'may', 'June', 'July', 'August', 'September',
'October', 'November','December']
#a list of ordinal numbers
ordinalNumbers = ['1st', '2nd' '3rd', '4th', '5th', '6th', '7th', '8th', '9th', '10th', '11th', '12th',
'13th', '14th', '15th', '16th', '17th', '18th', '19th', '20th', '21st', '22nd', '23rd',
'24th', '25th', '26th', '27th', '28th', '29th', '30th', '31st']
return 'Today is '+weekday+' '+ month_names[7]+' the '+ ordinalNumbers[20]+'. '
# a function to return a random greeting response
def greeting(text):
GREETING_INPUTS = ['hi', 'hey', 'hello', 'greetings',]
GREETING_RESPONSES = ['hi', 'hello how are you', 'hello', 'hi how are you']
#if the users input is a greeting then return a randomly chosen greeting response
for word in text.split():
if word.lower() in GREETING_INPUTS:
return random.choice(GREETING_RESPONSES) +'.'
#if no greeting is detected then return an empty string
return ''
# a function to get a first and last name form the text
def getPerson(text):
wordlist = text.split() #spliting text into a list of words
for i in range (0, len(wordlist)):
if i + 3 <= len(wordlist) - 1 and wordlist[i].lower() == 'who' and wordlist[i+1].lower() =='is':
return wordlist[i+2] + ' '+ wordlist[i+3]
#always listen to wake word
while True:
#record the audio
text = recordaudio()
response = ''
#start check for wake word or phrase
if(wakeWord(text) or name(text) == True): #added or name(text)
#check for greeting by user
response = response + greeting(text)
#name
if ('what is your name' in text):
response = 'eta'
#date
if('date' in text):
get_date = getDate()
response = response + ' '+get_date
#time
if('time' in text):
now = datetime.datetime.now()
meridiem =''
if now.hour >=12:
meridiem = 'p.m.'
hour = now.hour - 12
else:
meridiem = 'a.m.'
hour = now.hour
# convert minuite to proper string
if now.minute < 10:
minute = '0'+str(now.minute)
else:
minute = str(now.minute)
response = response +' '+'it is '+str(hour)+ ':'+ minute+ ' '+meridiem+' .'
#person 'who'
if('who is' in text):
Person = getPerson(text)
wiki = wikipedia.summary(Person, sentences=2)
response = response +' '+ wiki
#how are you
if ('how are you' in text):
response = 'very well thank you'
#webpages
#google
if ('open Google' in text):
response = 'google opening'
webbrowser.open("google.com")
#youtube
if ('open YouTube' in text):
response = 'YouTube opening'
webbrowser.open("youtube.com")
if ('lights red' in text):
response = 'okay'
xy = rgb_to_xy(1.0, 0.28627, 0.95686)
lights = b.get_light_objects('00:17:88:01:03:81:86:92')
b.get_light_id_by_name('00:17:88:01:03:81:86:92')
b.set_light('00:17:88:01:03:81:86:92', 'on', True)
b.set_light('00:17:88:01:03:81:86:92', 'bri', 1)
lights = b.get_light_objects()
for light in lights:
light.brightness = 255
light.xy = [.9, .1]
#have the assisstant respond back having audio and the text form response
assistantResponse(response)