-
Notifications
You must be signed in to change notification settings - Fork 45
/
jarvis.py
371 lines (309 loc) · 10.8 KB
/
jarvis.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
import pyttsx3 #pip install pyttsx3
import datetime #module
import speech_recognition as sr
import wikipedia
import smtplib
import webbrowser as wb
import os #inbuilt
import pyautogui
import psutil #pip install psutil
import pyjokes # pip install pyjokes
import requests, json #inbuilt
engine = pyttsx3.init()
engine.setProperty('rate', 190)
voices = engine.getProperty('voices')
engine.setProperty('voice', voices[1].id)
engine.setProperty('volume', 1)
#change voice
def voice_change(v):
x = int(v)
engine.setProperty('voice', voices[x].id)
speak("done sir")
#speak function
def speak(audio):
engine.say(audio)
engine.runAndWait()
#time function
def time():
Time = datetime.datetime.now().strftime("%H:%M:%S")
speak("The current time is")
speak(Time)
#date function
def date():
year = int(datetime.datetime.now().year)
month = int(datetime.datetime.now().month)
date = int(datetime.datetime.now().day)
speak("The current date is")
speak(date)
speak(month)
speak(year)
def checktime(tt):
hour = datetime.datetime.now().hour
if ("morning" in tt):
if (hour >= 6 and hour < 12):
speak("Good morning sir")
else:
if (hour >= 12 and hour < 18):
speak("it's Good afternoon sir")
elif (hour >= 18 and hour < 24):
speak("it's Good Evening sir")
else:
speak("it's Goodnight sir")
elif ("afternoon" in tt):
if (hour >= 12 and hour < 18):
speak("it's Good afternoon sir")
else:
if (hour >= 6 and hour < 12):
speak("Good morning sir")
elif (hour >= 18 and hour < 24):
speak("it's Good Evening sir")
else:
speak("it's Goodnight sir")
else:
speak("it's night sir!")
#welcome function
def wishme():
speak("Welcome Back")
hour = datetime.datetime.now().hour
if (hour >= 6 and hour < 12):
speak("Good Morning sir!")
elif (hour >= 12 and hour < 18):
speak("Good afternoon sir")
elif (hour >= 18 and hour < 24):
speak("Good Evening sir")
else:
speak("Goodnight sir")
speak("Jarvis at your service, Please tell me how can i help you?")
def wishme_end():
speak("signing off")
hour = datetime.datetime.now().hour
if (hour >= 6 and hour < 12):
speak("Good Morning")
elif (hour >= 12 and hour < 18):
speak("Good afternoon")
elif (hour >= 18 and hour < 24):
speak("Good Evening")
else:
speak("Goodnight.. Sweet dreams")
quit()
#command by user function
def takeCommand():
r = sr.Recognizer()
with sr.Microphone() as source:
print("Listing...")
r.pause_threshold = 0.5
audio = r.listen(source)
try:
print("Recognizing...")
query = r.recognize_google(audio, language='en-in')
#speak(query)
#print(query)
except Exception as e:
print(e)
speak("Say that again please...")
return "None"
return query
#sending email function
def sendEmail(to, content):
server = smtplib.SMTP('smtp.gmail.com', 587)
server.ehlo()
server.starttls()
server.login("[email protected]", "pwd")
server.sendmail("[email protected]", to, content)
server.close()
#screenshot function
def screenshot():
img = pyautogui.screenshot()
img.save(
"C:\\Users\\Jarvis-AI-using-python3-\\screenshots\\ss.png"
)
#battery and cpu usage
def cpu():
usage = str(psutil.cpu_percent())
speak('CPU usage is at ' + usage)
print('CPU usage is at ' + usage)
battery = psutil.sensors_battery()
speak("Battery is at")
speak(battery.percent)
print("battery is at:" + str(battery.percent))
#joke function
def jokes():
j = pyjokes.get_joke()
print(j)
speak(j)
#weather condition
def weather():
api_key = "YOUR-API_KEY" #generate your own api key from open weather
base_url = "http://api.openweathermap.org/data/2.5/weather?"
speak("tell me which city")
city_name = takeCommand()
complete_url = base_url + "appid=" + api_key + "&q=" + city_name
response = requests.get(complete_url)
x = response.json()
if x["cod"] != "404":
y = x["main"]
current_temperature = y["temp"]
current_pressure = y["pressure"]
current_humidiy = y["humidity"]
z = x["weather"]
weather_description = z[0]["description"]
r = ("in " + city_name + " Temperature is " +
str(int(current_temperature - 273.15)) + " degree celsius " +
", atmospheric pressure " + str(current_pressure) + " hpa unit" +
", humidity is " + str(current_humidiy) + " percent"
" and " + str(weather_description))
print(r)
speak(r)
else:
speak(" City Not Found ")
def personal():
speak(
"I am Jarvis, version 1.0, I am an AI assistent, I am developed by Praveen on 29 may 2020 in INDIA"
)
speak("Now i hope you know me")
if __name__ == "__main__":
wishme()
while (True):
query = takeCommand().lower()
#time
if ('time' in query):
time()
#date
elif ('date' in query):
date()
#personal info
elif ("tell me about yourself" in query):
personal()
elif ("about you" in query):
personal()
elif ("who are you" in query):
personal()
elif ("yourself" in query):
personal()
elif ("developer" in query or "tell me about your developer" in query
or "father" in query or "who develop you" in query
or "developer" in query):
res = open("about.txt", 'r')
speak("here is the details: " + res.read())
#searching on wikipedia
elif ('wikipedia' in query or 'what' in query or 'who' in query
or 'when' in query or 'where' in query):
speak("searching...")
query = query.replace("wikipedia", "")
query = query.replace("search", "")
query = query.replace("what", "")
query = query.replace("when", "")
query = query.replace("where", "")
query = query.replace("who", "")
query = query.replace("is", "")
result = wikipedia.summary(query, sentences=2)
print(query)
print(result)
speak(result)
#sending email
elif ("send email" in query):
try:
speak("What is the message for the email")
content = takeCommand()
to = '[email protected]'
sendEmail(to, content)
speak("Email has sent")
except Exception as e:
print(e)
speak(
"Unable to send email check the address of the recipient")
elif ("search on google" in query or "open website" in query):
speak("What should i search or open?")
chromepath = 'C:/Program Files (x86)/Google/Chrome/Application/chrome.exe %s'
search = takeCommand().lower()
wb.get(chromepath).open_new_tab(search + '.com')
#sysytem logout/ shut down etc
elif ("logout" in query):
os.system("shutdown -1")
elif ("restart" in query):
os.system("shutdown /r /t 1")
elif ("shut down" in query):
os.system("shutdown /r /t 1")
#play songs
elif ("play songs" in query):
speak("Playing...")
songs_dir = "C:\\Music"
songs = os.listdir(songs_dir)
os.startfile(os.path.join(songs_dir, songs[1]))
quit()
#reminder function
elif ("create a reminder list" in query or "reminder" in query):
speak("What is the reminder?")
data = takeCommand()
speak("You said to remember that" + data)
reminder_file = open("data.txt", 'a')
reminder_file.write('\n')
reminder_file.write(data)
reminder_file.close()
#reading reminder list
elif ("do you know anything" in query or "remember" in query):
reminder_file = open("data.txt", 'r')
speak("You said me to remember that: " + reminder_file.read())
#screenshot
elif ("screenshot" in query):
screenshot()
speak("Done!")
#cpu and battery usage
elif ("cpu and battery" in query or "battery" in query
or "cpu" in query):
cpu()
#jokes
elif ("tell me a joke" in query or "joke" in query):
jokes()
#weather
elif ("weather" in query or "temperature" in query):
weather()
#jarvis features
elif ("tell me your powers" in query or "help" in query
or "features" in query):
features = ''' i can help to do lot many things like..
i can tell you the current time and date,
i can tell you the current weather,
i can tell you battery and cpu usage,
i can create the reminder list,
i can take screenshots,
i can send email to your boss or family or your friend,
i can shut down or logout or hibernate your system,
i can tell you non funny jokes,
i can open any website,
i can search the thing on wikipedia,
i can change my voice from male to female and vice-versa
And yes one more thing, My boss is working on this system to add more features...,
tell me what can i do for you??
'''
print(features)
speak(features)
elif ("hii" in query or "hello" in query or "goodmorning" in query
or "goodafternoon" in query or "goodnight" in query
or "morning" in query or "noon" in query or "night" in query):
query = query.replace("jarvis", "")
query = query.replace("hi", "")
query = query.replace("hello", "")
if ("morning" in query or "night" in query or "goodnight" in query
or "afternoon" in query or "noon" in query):
checktime(query)
else:
speak("what can i do for you")
#changing voice
elif ("voice" in query):
speak("for female say female and, for male say male")
q = takeCommand()
if ("female" in q):
voice_change(1)
elif ("male" in q):
voice_change(0)
elif ("male" in query or "female" in query):
if ("female" in query):
voice_change(1)
elif ("male" in query):
voice_change(0)
#exit function
elif ('i am done' in query or 'bye bye jarvis' in query
or 'go offline jarvis' in query or 'bye' in query
or 'nothing' in query):
wishme_end()