Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added Windows Support #24

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CONTRIBUTORS.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@ Contributors:
* Jayson Vantuyl <kagato@souja.net>: Various fixes
* Issac Kelly <issac.kelly@gmail.com>: Added requirements
* Sriram Venkatesh <venksriram@gmail.com>: Updated README
* Lakshay Aggarwal <lakshay09online@gmail.com>: Added basic windows suupport
42 changes: 39 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -19,24 +24,55 @@ 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/)
3. PyAudio
4. PyDub
5. Requests
6. PyYAML
7. Pyttsx3 (Only for windows)
8. SpeachRecognition (Only for windows)
9. Wikipedia (Only for windows)

Operating Systems
----------------
* Linux
- `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
```


109 changes: 109 additions & 0 deletions main.py
Original file line number Diff line number Diff line change
@@ -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")