make-a-smart-speaker
make-a-smart-speaker copied to clipboard
How can I make a wake word in my code :(
How can I put the wake word I tried many time
The code:
import libers
import speech_recognition as sr # recognise speech import playsound # to play an audio file from gtts import gTTS # google text to speech import random from time import ctime # get time details import webbrowser # open browser import yfinance as yf # to fetch financial data import ssl import certifi import time import os # to remove created audio files
class person: name = '' def setName(self, name): self.name = name
def to listening 1
def there_exists(terms): for term in terms: if term in voice_data: return True
def to listening 2
r = sr.Recognizer() # initialise a recogniser
listen for audio and convert it to text:
def record_audio(ask=False): with sr.Microphone() as source: # microphone as source if ask: speak(ask) audio = r.listen(source) # listen for the audio via source voice_data = '' try: voice_data = r.recognize_google(audio) # convert audio to text except sr.UnknownValueError: # error: recognizer does not understand speak('Can you repeat') except sr.RequestError: speak('Sorry, the service is down') # error: recognizer is not connected print(f">> {voice_data.lower()}") # print what user said return voice_data.lower()
get string and make a audio file to be played and choose the lang
def speak(audio_string): tts = gTTS(text=audio_string, lang='en') # text to speech(voice) r = random.randint(1,20000000) audio_file = 'audio' + str(r) + '.mp3' tts.save(audio_file) # save as mp3 playsound.playsound(audio_file) # play the audio file print(f"kiri: {audio_string}") # print what app said os.remove(audio_file) # remove audio file
wake = ["welcome", "hey sara"]
respond for listening 1
def respond(voice_data):
# 1: greeting
if there_exists(['hey','hi','hello']):
greetings = [f"hey, how can I help you {person_obj.name}", f"hey, what's up? {person_obj.name}", f"I'm listening {person_obj.name}", f"how can I help you? {person_obj.name}", f"hello {person_obj.name}"]
greet = greetings[random.randint(0,len(greetings)-1)]
speak(greet)
# 2: name
if there_exists(["what is your name","what's your name","tell me your name"]):
if person_obj.name:
speak("my name is sara")
else:
speak("my name is sara. what's your name?")
if there_exists(["my name is"]):
person_name = voice_data.split("is")[-1].strip()
speak(f"okay, i will remember that {person_name}")
person_obj.setName(person_name) # remember name in person object
# 3: greeting
if there_exists(["how are you","how are you doing"]):
speak(f"I'm very well, thanks for asking {person_obj.name}")
# 4: time
if there_exists(["what's the time","tell me the time","what time is it"]):
time = ctime().split(" ")[3].split(":")[0:2]
if time[0] == "00":
hours = '12'
else:
hours = time[0]
minutes = time[1]
time = f'{hours} {minutes}'
speak(time)
# 5: search google
if there_exists(["search for"]) and 'youtube' not in voice_data:
search_term = voice_data.split("for")[-1]
url = f"https://google.com/search?q={search_term}"
webbrowser.get().open(url)
speak(f'Here is what I found for {search_term} on google')
# 6: search youtube
if there_exists(["youtube"]):
search_term = voice_data.split("for")[-1]
url = f"https://www.youtube.com/results?search_query={search_term}"
webbrowser.get().open(url)
speak(f'Here is what I found for {search_term} on youtube')
# 7: get stock price
if there_exists(["price of"]):
search_term = voice_data.lower().split(" of ")[-1].strip() #strip removes whitespace after/before a term in string
stocks = {
"apple":"AAPL",
"microsoft":"MSFT",
"facebook":"FB",
"tesla":"TSLA",
"bitcoin":"BTC-USD"
}
try:
stock = stocks[search_term]
stock = yf.Ticker(stock)
price = stock.info["regularMarketPrice"]
speak(f'price of {search_term} is {price} {stock.info["currency"]} {person_obj.name}')
except:
speak('oops, something went wrong')
# 8: to stop
if there_exists(["exit", "quit", "goodbye"]):
speak("going offline")
exit()
# 9: thank you responed
if there_exists(["thank you","thanks","you are the best"]):
speak(" welcome sir ")
time.sleep(0.5)
person_obj = person() while(1): voice_data = record_audio() # get the voice input respond(voice_data) # respond
sorry I am new in githup