diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 2c39b73..e61de42 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -7,3 +7,4 @@ Contributors: * Jayson Vantuyl : Various fixes * Issac Kelly : Added requirements * Sriram Venkatesh : Updated README +* Lakshay Aggarwal : Added basic windows suupport diff --git a/README.md b/README.md index 1e6fdfa..a10ae26 100644 --- a/README.md +++ b/README.md @@ -2,12 +2,17 @@ Jarvis ====== -How to use +How to use (For Mac and linux) --------- ``` python jarvis.py ``` +How to use(For Windows) +---------------- +``` +python main.py +``` How does it work --------------- * It uses Google's speech to text and text to speech engines to interact with the users. @@ -19,11 +24,19 @@ How does it work * It can tell about your current location. Say "Where am I" or "Where are we" * It can play music(Not developed completely) +Features For Windows +------------------------- + +* It can send emails for you. +* It can play music for you. +* It can do Wikipedia searches for you. +* It is capable of opening websites like Google, Youtube, etc., in a web browser. +* It is capable of opening your code editor or IDE with a single voice command. Dependencies ----------- -Dependencies can be installed by running this [pip](https://pypi.python.org/pypi/pip) command `sudo pip install -r requirements.txt` +Dependencies can be installed by running this [pip](https://pypi.python.org/pypi/pip) command `sudo pip install -r requirements.txt` (Not to be done for windows) 1. BeautifulSoup (version 4) 2. [PyAIML](http://pyaiml.sourceforge.net/) @@ -31,6 +44,9 @@ Dependencies can be installed by running this [pip](https://pypi.python.org/pypi 4. PyDub 5. Requests 6. PyYAML +7. Pyttsx3 (Only for windows) +8. SpeachRecognition (Only for windows) +9. Wikipedia (Only for windows) Operating Systems ---------------- @@ -38,5 +54,25 @@ Operating Systems - `sudo apt-get install libjack-jackd2-dev portaudio19-dev` for PyAudio to install * Mac - `brew install portaudio` for PyAudio to install -* Don't try on Windows, it won't work +* Windows with just some basic features (Not Fully Functioned) +``` +pip install pyttsx3 +``` +In case you receive such errors: +* No module named win32com.client +* No module named win32 +* No module named win32api +run the following command and repeat the previous step: +``` +pip install pypiwin32 +``` +Now as soon as the previous installation is complete run the next command: +``` +pip install speechRecognition +``` +Now as soon as the previous installation is complete run the next command: +``` +pip install wikipedia +``` + diff --git a/main.py b/main.py new file mode 100644 index 0000000..e453f1f --- /dev/null +++ b/main.py @@ -0,0 +1,109 @@ +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' + 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\\Haris\\AppData\\Local\\Programs\\Microsoft VS Code\\Code.exe" + os.startfile(codePath) + + elif 'email to harry' in query: + try: + speak("What should I say?") + content = takeCommand() + to = "harryyourEmail@gmail.com" + sendEmail(to, content) + speak("Email has been sent!") + except Exception as e: + print(e) + speak("Sorry my friend harry bhai. I am not able to send this email")