From 351cab7c2e0646317895270c53fe9c5da80a6ede Mon Sep 17 00:00:00 2001 From: anshul singh Date: Mon, 23 Aug 2021 11:31:57 +0530 Subject: [PATCH 1/5] add jarvis --- jarvis(assistant)/README.md | 25 +++++++ jarvis(assistant)/requirements.txt | 3 + jarvis(assistant)/script.py | 110 +++++++++++++++++++++++++++++ 3 files changed, 138 insertions(+) create mode 100644 jarvis(assistant)/README.md create mode 100644 jarvis(assistant)/requirements.txt create mode 100644 jarvis(assistant)/script.py diff --git a/jarvis(assistant)/README.md b/jarvis(assistant)/README.md new file mode 100644 index 000000000..406924b80 --- /dev/null +++ b/jarvis(assistant)/README.md @@ -0,0 +1,25 @@ +# JARVIS(ASSISTANT) + +## Objective +Our virtual assistant will able to do the followings things- + +Weather forecasting, Launch Windows Applications, Open Websites, tells you about almost everything you ask, tells you date and time, greetings, news, etc. + +You can interact with your laptop’s microphone/console. The response generated by the assistant will display on the console or as a speech via the speaker +## Commands(You have to speak) +- wikipedia "what you want to search" +- open youtube +- open stackoverflow +- play music (you should change the path with your local storage - Line number 88) +- the time +- open code (you should change the path with your local storage - Line number 98) +- email to anshul (replace your email with mine - Line number 57 ,58 and 105) +## Requirements +```pip install requirements.txt``` + +## How to run the ASSISTANT? +``` python script.py ``` + +## Version +Python 3.9.6 +pip 20.2.3 \ No newline at end of file diff --git a/jarvis(assistant)/requirements.txt b/jarvis(assistant)/requirements.txt new file mode 100644 index 000000000..f1a9d6a35 --- /dev/null +++ b/jarvis(assistant)/requirements.txt @@ -0,0 +1,3 @@ +pyttsx3==2.7 +speechRecognition==3.8.1 +wikipedia==1.4.0 \ No newline at end of file diff --git a/jarvis(assistant)/script.py b/jarvis(assistant)/script.py new file mode 100644 index 000000000..31081b2dc --- /dev/null +++ b/jarvis(assistant)/script.py @@ -0,0 +1,110 @@ +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 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 Jarvis 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 sendEmail(to, content): + server = smtplib.SMTP('smtp.gmail.com', 587) + server.ehlo() + server.starttls() + server.login('youremail@gmail.com', 'your-password') + server.sendmail('youremail@gmail.com', 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 '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 = 'D:\\Non Critical\\songs\\Favorite Songs2' #change this path according to you + songs = os.listdir(music_dir) + print(songs) + os.startfile(os.path.join(music_dir, songs[0])) + + elif 'the time' in query: + strTime = datetime.datetime.now().strftime("%H:%M:%S") + speak(f"Sir, the time is {strTime}") + + elif 'open code' in query: + codePath = "C:\\Users\\anshul\\AppData\\Local\\Programs\\Microsoft VS Code\\Code.exe" #change this path according to you + os.startfile(codePath) + + elif 'email to anshul' in query: + try: + speak("What should I say?") + content = takeCommand() + to = "singhanshul28007@gamil.com" + sendEmail(to, content) + speak("Email has been sent!") + except Exception as e: + print(e) + speak("Sorry Anshul, I am not able to send this email") From afab0dd5261392f401fde38218b8a15b925bcf94 Mon Sep 17 00:00:00 2001 From: anshul singh Date: Mon, 23 Aug 2021 12:12:22 +0530 Subject: [PATCH 2/5] fix lint --- jarvis(assistant)/README.md | 2 +- jarvis(assistant)/script.py | 31 ++++++------------------------- 2 files changed, 7 insertions(+), 26 deletions(-) diff --git a/jarvis(assistant)/README.md b/jarvis(assistant)/README.md index 406924b80..276478571 100644 --- a/jarvis(assistant)/README.md +++ b/jarvis(assistant)/README.md @@ -21,5 +21,5 @@ You can interact with your laptop’s microphone/console. The response generated ``` python script.py ``` ## Version -Python 3.9.6 +Python 3.7.4 pip 20.2.3 \ No newline at end of file diff --git a/jarvis(assistant)/script.py b/jarvis(assistant)/script.py index 31081b2dc..60fb71e5f 100644 --- a/jarvis(assistant)/script.py +++ b/jarvis(assistant)/script.py @@ -1,14 +1,13 @@ -import pyttsx3 #pip install pyttsx3 -import speech_recognition as sr #pip install speechRecognition +import pyttsx3 # pip install pyttsx3 +import speech_recognition as sr # pip install speechRecognition import datetime -import wikipedia #pip install wikipedia +import wikipedia # pip install wikipedia import webbrowser import os import smtplib engine = pyttsx3.init('sapi5') voices = engine.getProperty('voices') -# print(voices[1].id) engine.setProperty('voice', voices[0].id) @@ -19,20 +18,15 @@ def speak(audio): def wishMe(): hour = int(datetime.datetime.now().hour) - if hour>=0 and hour<12: + if hour >= 0 and hour < 12: speak("Good Morning!") - - elif hour>=12 and hour<18: + elif hour >= 12 and hour < 18: speak("Good Afternoon!") - else: speak("Good Evening!") - - speak("I am Jarvis Sir. Please tell me how may I help you") + speak("I am Jarvis 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...") @@ -45,7 +39,6 @@ def takeCommand(): print(f"User said: {query}\n") except Exception as e: - # print(e) print("Say that again please...") return "None" return query @@ -61,10 +54,7 @@ def sendEmail(to, content): 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", "") @@ -72,32 +62,23 @@ def sendEmail(to, content): speak("According to Wikipedia") print(results) speak(results) - 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 = 'D:\\Non Critical\\songs\\Favorite Songs2' #change this path according to you songs = os.listdir(music_dir) print(songs) os.startfile(os.path.join(music_dir, songs[0])) - elif 'the time' in query: strTime = datetime.datetime.now().strftime("%H:%M:%S") speak(f"Sir, the time is {strTime}") - elif 'open code' in query: codePath = "C:\\Users\\anshul\\AppData\\Local\\Programs\\Microsoft VS Code\\Code.exe" #change this path according to you os.startfile(codePath) - elif 'email to anshul' in query: try: speak("What should I say?") From abdae2dbdba5fa1b7f377aa4af13997489ec87f7 Mon Sep 17 00:00:00 2001 From: anshul singh Date: Mon, 23 Aug 2021 16:03:30 +0530 Subject: [PATCH 3/5] lint fix 2 --- jarvis(assistant)/script.py | 38 +++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/jarvis(assistant)/script.py b/jarvis(assistant)/script.py index 60fb71e5f..abc214655 100644 --- a/jarvis(assistant)/script.py +++ b/jarvis(assistant)/script.py @@ -21,12 +21,14 @@ def wishMe(): if hour >= 0 and hour < 12: speak("Good Morning!") elif hour >= 12 and hour < 18: - speak("Good Afternoon!") + speak("Good Afternoon!") else: - speak("Good Evening!") + speak("Good Evening!") speak("I am Jarvis Sir. Please tell me how may I help you") + def takeCommand(): + r = sr.Recognizer() with sr.Microphone() as source: print("Listening...") @@ -34,23 +36,24 @@ def takeCommand(): audio = r.listen(source) try: - print("Recognizing...") + print("Recognizing...") query = r.recognize_google(audio, language='en-in') print(f"User said: {query}\n") - - except Exception as e: - print("Say that again please...") + except Exception: + print("Say that again please...") return "None" return query + def sendEmail(to, content): server = smtplib.SMTP('smtp.gmail.com', 587) server.ehlo() server.starttls() - server.login('youremail@gmail.com', 'your-password') + server.login('youremail@gmail.com', 'your-password') server.sendmail('youremail@gmail.com', to, content) server.close() + if __name__ == "__main__": wishMe() while True: @@ -62,30 +65,37 @@ def sendEmail(to, content): speak("According to Wikipedia") print(results) speak(results) + 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") + webbrowser.open("stackoverflow.com") + elif 'play music' in query: - music_dir = 'D:\\Non Critical\\songs\\Favorite Songs2' #change this path according to you + music_dir = 'D:\\Non Critical\\songs\\Favorite Songs2' songs = os.listdir(music_dir) - print(songs) os.startfile(os.path.join(music_dir, songs[0])) + elif 'the time' in query: - strTime = datetime.datetime.now().strftime("%H:%M:%S") + strTime = datetime.datetime.now().strftime("%H:%M:%S") speak(f"Sir, the time is {strTime}") + elif 'open code' in query: - codePath = "C:\\Users\\anshul\\AppData\\Local\\Programs\\Microsoft VS Code\\Code.exe" #change this path according to you + # change this path according to you + codePath = "/path/to/vscode/executable" os.startfile(codePath) + elif 'email to anshul' in query: try: speak("What should I say?") content = takeCommand() - to = "singhanshul28007@gamil.com" + to = "singhanshul28007@gamil.com" sendEmail(to, content) speak("Email has been sent!") except Exception as e: print(e) - speak("Sorry Anshul, I am not able to send this email") + speak("Sorry Anshul, I am not able to send this email") From 1aec8252f0bb8764cbf6704ae44658d0e8c6dde1 Mon Sep 17 00:00:00 2001 From: anshul singh Date: Mon, 23 Aug 2021 17:09:45 +0530 Subject: [PATCH 4/5] init added and lint fix 3 --- jarvis(assistant)/__init__.py | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 jarvis(assistant)/__init__.py diff --git a/jarvis(assistant)/__init__.py b/jarvis(assistant)/__init__.py new file mode 100644 index 000000000..f37dfc5a0 --- /dev/null +++ b/jarvis(assistant)/__init__.py @@ -0,0 +1,2 @@ +__author__ = "Anshul Singh" +__version__ = "0.1" From 1830437fc9cf5f97b1f5f194a704fb247849ef09 Mon Sep 17 00:00:00 2001 From: anshul singh Date: Tue, 24 Aug 2021 08:40:14 +0530 Subject: [PATCH 5/5] folder name change --- {jarvis(assistant) => jarvis_assistant}/README.md | 0 {jarvis(assistant) => jarvis_assistant}/__init__.py | 0 {jarvis(assistant) => jarvis_assistant}/requirements.txt | 0 {jarvis(assistant) => jarvis_assistant}/script.py | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename {jarvis(assistant) => jarvis_assistant}/README.md (100%) rename {jarvis(assistant) => jarvis_assistant}/__init__.py (100%) rename {jarvis(assistant) => jarvis_assistant}/requirements.txt (100%) rename {jarvis(assistant) => jarvis_assistant}/script.py (100%) diff --git a/jarvis(assistant)/README.md b/jarvis_assistant/README.md similarity index 100% rename from jarvis(assistant)/README.md rename to jarvis_assistant/README.md diff --git a/jarvis(assistant)/__init__.py b/jarvis_assistant/__init__.py similarity index 100% rename from jarvis(assistant)/__init__.py rename to jarvis_assistant/__init__.py diff --git a/jarvis(assistant)/requirements.txt b/jarvis_assistant/requirements.txt similarity index 100% rename from jarvis(assistant)/requirements.txt rename to jarvis_assistant/requirements.txt diff --git a/jarvis(assistant)/script.py b/jarvis_assistant/script.py similarity index 100% rename from jarvis(assistant)/script.py rename to jarvis_assistant/script.py