From fbd5b1458ec11c4917b5bd89d4f6a681b9b983d3 Mon Sep 17 00:00:00 2001 From: RushabhBhalgat <65655146+RushabhBhalgat@users.noreply.github.com> Date: Thu, 1 Oct 2020 13:20:50 +0530 Subject: [PATCH] Zira The Voice Assistant Added. Zira Is A Voice Assistant Made Using Python. Libraries Used :- smtplib, requests, webbrowser, wikipedia, speech_recognition and pyttsx3. You can send Emails Just by telling Zira The message and the receiver's name ! You can ask her about anything and she will search the Wikipedia For You. It can give you news [Using The news API] It can play music, open code editor. --- Zira.py | 169 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 169 insertions(+) create mode 100644 Zira.py diff --git a/Zira.py b/Zira.py new file mode 100644 index 0000000..07f29db --- /dev/null +++ b/Zira.py @@ -0,0 +1,169 @@ +import pyttsx3 #pip install pyttsx3 +import speech_recognition as sr #pip install speechRecognition +import datetime +import wikipedia #pip install wikipedia +import webbrowser +import os +import requests +import smtplib + +engine = pyttsx3.init('sapi5') +voices = engine.getProperty('voices') +# print(voices[1].id) +engine.setProperty('voice', voices[0].id) + + +def speak(audio): + engine.say(audio) + engine.runAndWait() + + +def wishMe(): + hour = int(datetime.datetime.now().hour) + if hour>=0 and hour<12: + speak("Good Morning!") + + elif hour>=12 and hour<18: + speak("Good Afternoon!") + + else: + speak("Good Evening!") + + speak("I am Zira Sir. Please tell me how may I help you") + +def takeCommand(): + #It takes microphone input from the user and returns string output + + r = sr.Recognizer() + with sr.Microphone() as source: + print("Listening...") + r.pause_threshold = 1 + audio = r.listen(source) + + try: + print("Recognizing...") + query = r.recognize_google(audio, language='en-in') + print(f"User said: {query}\n") + + except Exception as e: + # print(e) + print("Say that again please...") + return "None" + return query +def givenews(): + apiKey = '49e391e7066c4158937096fb5e55fb5d' + url = f"https://newsapi.org/v2/top-headlines?country=in&apiKey={apiKey}" + r = requests.get(url) + data = r.json() + data = data["articles"] + flag = True + count = 0 + for items in data: + count += 1 + if count > 10: + break + print(items["title"]) + to_speak = items["title"].split(" - ")[0] + if flag: + speak("Today's top ten Headline are : ") + flag = False + else: + speak("Next news :") + speak(to_speak) + +def sendEmail(to, content): + server = smtplib.SMTP('smtp.gmail.com', 587) + server.ehlo() + server.starttls() + server.login('', '') + server.sendmail('', to, content) + server.close() + +if __name__ == "__main__": + wishMe() + while True: + # if 1: + query = takeCommand().lower() + + # Logic for executing tasks based on query + if 'wikipedia' in query: + speak('Searching Wikipedia...') + query = query.replace("wikipedia", "") + results = wikipedia.summary(query, sentences=2) + speak("According to Wikipedia") + print(results) + speak(results) + + elif "who are you" in query: + speak("I'm Zira, desktop assistant made by Rushabh Sanjay Bhalgat.") + + elif 'open youtube' in query: + webbrowser.open("youtube.com") + + elif 'open google' in query: + webbrowser.open("google.com") + + elif 'open stackoverflow' in query: + webbrowser.open("stackoverflow.com") + + + elif 'play music' in query: + music_dir = 'F:\\New_Songs' + songs = os.listdir(music_dir) + print(songs) + os.startfile(os.path.join(music_dir, songs[0])) + + elif 'time' in query: + strTime = datetime.datetime.now().strftime("%H:%M:%S") + speak(f"Sir, the time is {strTime}") + + elif 'open vs code' in query: + codePath = "F:\Microsoft VS Code\code.exe" + os.startfile(codePath) + + elif 'email to ' in query: + try: + speak("What should I say?") + content = takeCommand() + to = "" + sendEmail(to, content) + speak("Email has been sent!") + except Exception as e: + print(e) + speak("Sorry Rushabh I am unable to sent the email") + + elif 'email to ' in query: + try: + speak("What should I say?") + content = takeCommand() + to = "" + sendEmail(to, content) + speak("Email has been sent!") + except Exception as e: + print(e) + speak("Sorry Rushabh I am unable to sent the email") + + elif 'email to ' in query: + try: + speak("What should I say?") + content = takeCommand() + to = "" + sendEmail(to, content) + speak("Email has been sent!") + except Exception as e: + print(e) + speak("Sorry Rushabh I am unable to sent the email") + + elif 'headlines' in query or 'news' in query or 'headline' in query: + givenews() + + elif 'Zira quit' in query or 'exit' in query or 'close' in query: + speak("Thanks for using Zira!!!") + exit() + + elif 'awesome' in query or 'wow' in query or 'amazing' in query or 'wonderful' in query: + speak("Thank you sir, i am here for you") + + elif 'what' in query or 'who' in query or 'where' in query or 'can you' in query: + webbrowser.open(f"https://www.google.com/search?&q={query}") + speak(wikipedia.summary(query, sentences=2))