From 880269e399ec6f96364ef3af0d354780d4fe3a18 Mon Sep 17 00:00:00 2001 From: prathamTailor <20ceubg054@ddu.ac.in> Date: Sun, 30 Apr 2023 09:39:38 +0530 Subject: [PATCH] Final code --- AiVirtualMouseProject.py | 168 ++++++++ HandTrackingModule.py | 125 ++++++ .../AiVirtualMouseProject.cpython-38.pyc | Bin 0 -> 3475 bytes .../HandTrackingModule.cpython-311.pyc | Bin 0 -> 6579 bytes __pycache__/HandTrackingModule.cpython-38.pyc | Bin 0 -> 3356 bytes __pycache__/Utility.cpython-38.pyc | Bin 0 -> 249 bytes __pycache__/app.cpython-38.pyc | Bin 0 -> 1946 bytes app.py | 56 +++ open.py | 16 + proton.py | 257 +++++++++++++ web/css/back.png | Bin 0 -> 1186 bytes web/css/jquery.convform.css | 363 ++++++++++++++++++ web/images/icon.png | Bin 0 -> 106573 bytes web/index.html | 43 +++ web/js/main.js | 49 +++ 15 files changed, 1077 insertions(+) create mode 100644 AiVirtualMouseProject.py create mode 100644 HandTrackingModule.py create mode 100644 __pycache__/AiVirtualMouseProject.cpython-38.pyc create mode 100644 __pycache__/HandTrackingModule.cpython-311.pyc create mode 100644 __pycache__/HandTrackingModule.cpython-38.pyc create mode 100644 __pycache__/Utility.cpython-38.pyc create mode 100644 __pycache__/app.cpython-38.pyc create mode 100644 app.py create mode 100644 open.py create mode 100644 proton.py create mode 100644 web/css/back.png create mode 100644 web/css/jquery.convform.css create mode 100644 web/images/icon.png create mode 100644 web/index.html create mode 100644 web/js/main.js diff --git a/AiVirtualMouseProject.py b/AiVirtualMouseProject.py new file mode 100644 index 0000000..2fd51ab --- /dev/null +++ b/AiVirtualMouseProject.py @@ -0,0 +1,168 @@ +import sys +sys.path.append('Users\prath\AppData\Local\Programs\Python\Python38\Lib\site-packages') +import cv2 +from pynput.keyboard import Key, Listener +import numpy as np +from pynput.keyboard import Key +import HandTrackingModule as htm +import time +import autopy +import keyboard +import pyautogui as py + +def show(key): + if key == Key.esc: + return True + else : + return False + +def Gesture_Controller(): + gc_mode = 0 + flag = False + + ########################## + wCam, hCam = 640, 480 + frameR = 100 # Frame Reduction + smoothening = 7 + ######################### + + pTime = 0 + plocX, plocY = 0, 0 + clocX, clocY = 0, 0 + + # cv2.VideoCapture(video_path or device index ) + # device index: It is just the number to specify the camera. Its possible values ie either 0 or -1. + cap = cv2.VideoCapture(0) + cap.set(3, wCam) #set width of cam + cap.set(4, hCam) #set height of cam + detector = htm.handDetector(maxHands=1) + wScr, hScr = autopy.screen.size() #screen size of device in which program is open + # print(wScr, hScr) + + + while True: + # 1. Find hand Landmarks + success, img = cap.read() #cap.read() returns a bool (True/False) saved in success. If the frame is read correctly, + # it will be true and store in img + img = detector.findHands(img) + lmList, bbox = detector.findPosition(img) + # 2. Get the tip of the index and middle fingers + if len(lmList) != 0: + x1, y1 = lmList[8][1:] + x2, y2 = lmList[12][1:] + # print(x1, y1, x2, y2) + + + # 3. Check which fingers are up + fingers = detector.fingersUp() + + + # Scroll up + if len(fingers) > 4 and fingers[0] == 0 and fingers[1]==1 and fingers[2] == 1 and fingers[3] == 1 and fingers[4] == 1: + length, img, lineInfo = detector.findDistance(4, 8, img) + # print("IN FUN2") + cv2.circle(img, (lineInfo[4], lineInfo[5]),15, (0, 255, 0), cv2.FILLED) + py.scroll(50) + + # drag drop item drop + if len(fingers) > 4 and fingers[0]==1 and fingers[1] == 1 and fingers[2] == 1 and fingers[3] == 1 and fingers[4] == 1: + print("CALL") + flag = False + py.mouseUp(button='left') + if (len(fingers)>3 and fingers[3] == 0) or (len(fingers)>4 and fingers[4] == 0): + + # 4. Only Index Finger : Moving Mode + if len(fingers)>4 and fingers[1] == 1 and fingers[2] == 1 and fingers[3]==0 and fingers[4]==0: + # if len(fingers)>2 and fingers[1] == 1 and fingers[2] == 1: + length, img, lineInfo = detector.findDistance(8, 12, img) + + # 5. Convert Coordinates + x3 = np.interp(x1, (frameR, wCam - frameR), (0, wScr)) + y3 = np.interp(y1, (frameR, hCam - frameR), (0, hScr)) + # 6. Smoothen Values + clocX = plocX + (x3 - plocX) / smoothening + clocY = plocY + (y3 - plocY) / smoothening + + # 7. Move Mouse + if length > 40: + autopy.mouse.move(wScr - clocX, clocY) + cv2.circle(img, (x1, y1), 15, (255, 0, 255), cv2.FILLED) + cv2.circle(img, (x2, y2), 15, (255, 0, 255), cv2.FILLED) + plocX, plocY = clocX, clocY + + # 8. Both Index and middle fingers are up : Clicking Mode Right CLick + # if len(fingers) > 2 and fingers[1] == 0 and fingers[2] == 1: + if len(fingers) > 4 and fingers[0] == 0 and fingers[1] == 0 and fingers[2] == 1 and fingers[3] == 0 and fingers[4] == 0: + # 9. Find distance between fingers + length, img, lineInfo = detector.findDistance(8, 12, img) + # print(length) + # 10. Click mouse if distance short + if length > 30: + cv2.circle(img, (lineInfo[4], lineInfo[5]),15, (0, 255, 0), cv2.FILLED) + py.click(button = 'left') + + # 8. Both Index and middle fingers are up : Clicking Mode Left CLick + # if len(fingers) > 2 and fingers[1] == 1 and fingers[2] == 0: + if len(fingers) > 4 and fingers[0] == 0 and fingers[1] == 1 and fingers[2] == 0 and fingers[3] == 0 and fingers[4] == 0: + # 9. Find distance between fingers + length, img, lineInfo = detector.findDistance(8, 12, img) + # print(length) + # 10. Click mouse if distance short + if length > 30: + cv2.circle(img, (lineInfo[4], lineInfo[5]),15, (0, 255, 0), cv2.FILLED) + py.click(button = 'right') + + # Double Click + if len(fingers) > 4 and fingers[1] == 1 and fingers[2] == 1 and fingers[0]==0 and fingers[3]==0 and fingers[4]==0: + # 9. Find distance between fingers + length, img, lineInfo = detector.findDistance(8, 12, img) + # print(length) + # 10. Click mouse if distance short + if length < 30: + cv2.circle(img, (lineInfo[4], lineInfo[5]),15, (0, 255, 0), cv2.FILLED) + py.doubleClick() + + # Scroll Down + if len(fingers) > 4 and fingers[0] == 0 and fingers[1]==1 and fingers[2] == 1 and fingers[3] == 1 and fingers[4] == 0: + length, img, lineInfo = detector.findDistance(4, 8, img) + # print("IN FUN") + cv2.circle(img, (lineInfo[4], lineInfo[5]),15, (0, 255, 0), cv2.FILLED) + py.scroll(-50) + + # Drag and Drop + if len(fingers) > 4 and fingers[0] == 0 and fingers[1] == 0 and fingers[2] == 0 and fingers[3] == 0 and fingers[4] == 0: + length, img, lineInfo = detector.findDistance(8, 12, img) + + # 5. Convert Coordinates + x3 = np.interp(x1, (frameR, wCam - frameR), (0, wScr)) + y3 = np.interp(y1, (frameR, hCam - frameR), (0, hScr)) + # 6. Smoothen Values + clocX = plocX + (x3 - plocX) / smoothening + clocY = plocY + (y3 - plocY) / smoothening + + # 7. Move Mouse + # py.mouseDown(button='left') + if not flag: + print("CALL IN") + flag = True + py.mouseDown(button='left') + print("TEMP") + autopy.mouse.move(wScr - clocX, clocY) + cv2.circle(img, (x1, y1), 15, (255, 0, 255), cv2.FILLED) + cv2.circle(img, (x2, y2), 15, (255, 0, 255), cv2.FILLED) + plocX, plocY = clocX, clocY + + # 11. Frame Rate + cTime = time.time() + fps = 1 / (cTime - pTime) + pTime = cTime + img = cv2.flip(img,1) + cv2.putText(img, str(int(fps)), (20, 50), cv2.FONT_HERSHEY_PLAIN, 3, + (255, 0, 0), 3) + # 12. Display + cv2.imshow("Image", img) + cv2.waitKey(1) + if keyboard.is_pressed('esc'): + cv2.destroyAllWindows() + cap.release() + break \ No newline at end of file diff --git a/HandTrackingModule.py b/HandTrackingModule.py new file mode 100644 index 0000000..4bd0b15 --- /dev/null +++ b/HandTrackingModule.py @@ -0,0 +1,125 @@ +import mediapipe as mp +import time +import math +import numpy as np +import cv2 + +class handDetector(): + def __init__(self, mode=False, maxHands=2, modelComplexity=1,detectionCon=0.5, trackCon=0.5): + self.mode = mode + self.lmList = [] + self.maxHands = maxHands + self.modelComplex = modelComplexity + self.detectionCon = detectionCon + self.trackCon = trackCon + self.mpHands = mp.solutions.hands + self.hands = self.mpHands.Hands(self.mode, self.maxHands, self.modelComplex, self.detectionCon, self.trackCon) + # self.hands = self.mpHands.Hands(self.mode, self.maxHands, self.detectionCon, self.trackCon) + self.mpDraw = mp.solutions.drawing_utils + self.tipIds = [4, 8, 12, 16, 20] + + def findHands(self, img, draw=True): + imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # cv2.cvtColor() method is used to convert an image from one color space to another. + self.results = self.hands.process(imgRGB) #It then processes the RGB image to identify the hands in the image: + # print(self.results.multi_hand_landmarks) + + if self.results.multi_hand_landmarks: + for handLms in self.results.multi_hand_landmarks: + if draw: + self.mpDraw.draw_landmarks(img, handLms,self.mpHands.HAND_CONNECTIONS) + + return img + + def findPosition(self, img, handNo=0, draw=True): + xList = [] + yList = [] + bbox = [] + # self.lmList = [] + self.lmList = [] + # print(type(self.results.multi_hand_landmarks)) + if self.results.multi_hand_landmarks: + myHand = self.results.multi_hand_landmarks[handNo] + for id, lm in enumerate(myHand.landmark): + # print(id, lm) + h, w, c = img.shape # height, width, channel + cx, cy = int(lm.x * w), int(lm.y * h) + xList.append(cx) + yList.append(cy) + # print(id, cx, cy) + self.lmList.append([id, cx, cy]) + if draw: + cv2.circle(img, (cx, cy), 5, (255, 0, 255), cv2.FILLED) + + xmin, xmax = min(xList), max(xList) + ymin, ymax = min(yList), max(yList) + bbox = xmin, ymin, xmax, ymax + + if draw: + cv2.rectangle(img, (xmin - 20, ymin - 20), (xmax + 20, ymax + 20), + (0, 255, 0), 2) + + return self.lmList, bbox + + def fingersUp(self): + fingers = [] + # Thumb + # print(len(self.lmList)) + # print(self.lmList[self.tipIds[0]][1]) + # print(self.lmList[self.tipIds[0] - 1][1]) + if len(self.lmList) > 1: + if self.lmList[self.tipIds[0]][1] > self.lmList[self.tipIds[0] - 1][1]: + fingers.append(1) + else: + fingers.append(0) + + # Fingers + for id in range(1, 5): + if len(self.lmList) > 2: + if self.lmList[self.tipIds[id]][2] < self.lmList[self.tipIds[id] - 2][2]: + fingers.append(1) + else: + fingers.append(0) + + # totalFingers = fingers.count(1) + + return fingers + + def findDistance(self, p1, p2, img, draw=True, r=15, t=3): + x1, y1 = self.lmList[p1][1:] + x2, y2 = self.lmList[p2][1:] + cx, cy = (x1 + x2) // 2, (y1 + y2) // 2 + + if draw: + cv2.line(img, (x1, y1), (x2, y2), (255, 0, 255), t) + cv2.circle(img, (x1, y1), r, (255, 0, 255), cv2.FILLED) + cv2.circle(img, (x2, y2), r, (255, 0, 255), cv2.FILLED) + cv2.circle(img, (cx, cy), r, (0, 0, 255), cv2.FILLED) + length = math.hypot(x2 - x1, y2 - y1) + + return length, img, [x1, y1, x2, y2, cx, cy] + + +def main(): + pTime = 0 + cTime = 0 + cap = cv2.VideoCapture(0) + detector = handDetector() + while True: + success, img = cap.read() + img = detector.findHands(img) + lmList, bbox = detector.findPosition(img) + if len(lmList) != 0: + print(lmList[4]) + + cTime = time.time() + fps = 1 / (cTime - pTime) + pTime = cTime + + cv2.putText(img, str(int(fps)), (10, 70), cv2.FONT_HERSHEY_PLAIN, 3,(255, 0, 255), 3) + + cv2.imshow("Image", img) + cv2.waitKey(1) + + +if __name__ == "__main__": + main() diff --git a/__pycache__/AiVirtualMouseProject.cpython-38.pyc b/__pycache__/AiVirtualMouseProject.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..280a61526af54bf5ce873c3b69995fb5a6ed7a43 GIT binary patch literal 3475 zcmb_f&2QVt73Yu?NqyO}tl08LvQFA=t3wuOQWT3~yQpC&jj@hvY?N(72ry{PSfWjl z+#$8L0um^Y_P9WfJxZ4Xz4cG%X^%Yzb1K@C{)HauzBd#tYum*Z#ZutR{N8Zh{N}wk zGfyw8)sh0w`wxCj|G2Fv|3Gm2(E$7c-Y9{BDwKGNtuW=Bj8&>m2+3rctwEpW>4Sn@ z7#OxOlbf~$ay^sJWJS9q^_1XSI>m_@c7O3$%#ja74T2QZ0@3G2{}V&*g6B3uRaU4oO$9&Dp<58h}EibRQF_)QTu62 zmE(oRqHc=_?ShT|q;LZU{qy1e&pHtsJp5_r#r`pJJZIgwv+I85@_6WY&x2vaX3`JB zk;0)Bu^8 zTCy&trC1pgN+u*NCuQ)XnWz($D6(xO8n$EYT&G1^`jVuTxNvTa&4~g!s_7DZWy$t( zT1zV9Vp0P=*eYQQzFA4@aXDFe12bG`{4dE0EpI5GOZmOJfjU;x2FNN4vODP-XsAq- zbREX7!&vJ=e@nQXtWyGCg3V{Bh~sWhbpe?R$hw6p<0`di85n9EEp4W?bOUU#l+=<9 z3g1Dww4t1-beYz`!^@KbSfDmup(_~S3yi*+G0Hd~nlnN)XM||Z2+^F;S8<)z-{9^6 zkHxj~Rk}(WU(V+;eILieL1TP<*YJZNDTgtkU785Jk zN~{}PN}BWztPtjh*jgK}C)K0~y(JlWnO|0uhV;kUjXyH^on&oMo)nXks$g_4*kBAc z$RkJNh|nV0IuXq+f@p3LM01ObAu9jFBEWuKvLAnY44pT>=2?tuoqr6oVRqp55u>D^>I zHNgMdNsSgKY6@rW_-;~*@5S#Wci#{={qMrA-+|lz9yKQ>@KMJ1>3eW0;mxFsAHXPN z`MvS?>CS}kKFEH6u>yC~`&hpvvkg0`q}s0gGiQT3R;r8roUw5wwK9w|jUfbdR0I zkP8^6!#EE7>5sAjtNFJaTT{HqMS;7$e(e7B`uh5{iGz0zj@m+RKY4!KQl||Zfdx!A zAB`kM;a~vi3`f?j9}2De#UoMq%%v>YbHaGYnb0B@3#}gy>`EV&vd>~jJ_0TbXBY>N zZ5UCPGv-6q;l5@<=ggsY@yzw9T)17q=5YYIlNM2Icr&CXBAj zyB^d}4-OBX>|-^D-2w9|{8`jEABig+d<$UocVVdT#eZlxZ+L z_1K;SMft&ga0xVHcK|fcJU0|(IE>ru3YHheTxh7j{`6Nz?UQFuK7H}*$*Ys&!`*`; zm}Y<(l`tL_zqmz)cC}LEsPzGv((XQwH8rB?KM#ALGV@||c_k`K& zo(uvir*?X_e!1riY`u@AaRwSs2NTG%GOvMg5nsYKW7Qy}*andmfV!7X2AI z6`~Vevt+3gi&%PzROD~TsHi2fq*h3SGzym9CJl9ml(aT{rNb8=YERXMwn;YC8mVa| zQYTILmGm}9OJs*s<}EFkSui@+ax+#pW*V(r2k@!LIhsUO)N5UqWsI4#E+C2yMHLk>BRV$qy{h6 Jv!7}i{|0vnX+Z!0 literal 0 HcmV?d00001 diff --git a/__pycache__/HandTrackingModule.cpython-311.pyc b/__pycache__/HandTrackingModule.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5b768422f910eaa3ad4dc68e36ca635ffaf9c904 GIT binary patch literal 6579 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 literal 0 HcmV?d00001 diff --git a/__pycache__/Utility.cpython-38.pyc b/__pycache__/Utility.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2cfbe8b71f128a098ba96dc9f13c18b62b0666d1 GIT binary patch literal 249 zcmWIL<>g`kf=-Qt$(BI+F^Gc~-AT?m(m%NKrOmS+iu31d5OF&FO zQGQlxa!E{RNoG!FNu^#veUwO{O9c d7tBEz4Pk*4-{P>z%}*)KNwovn3)afQ1OR|~EJgqT literal 0 HcmV?d00001 diff --git a/__pycache__/app.cpython-38.pyc b/__pycache__/app.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..66e23b89a4820c10d4e9f3a1dfeb19c2443e5d13 GIT binary patch literal 1946 zcmbVN&u`l{6eg)3mL1tioh%(T3>dH;s>6KTVHk#PEjsMbAVXHP6O0Lp$i;GGOCf30 z71C33T>ppUn16|<0Rsl)PuNa-kBS{-Lv|PqK9Wx)zwbSMq+j;?Jpv{8;{_l3g#3OT zVY{q1AA?sA+%RUG#*T2$NbGUOopTcV+~pp$9q#iEw1MbOdpzLXb8<%G4c_A$;0<}m z`_T6JfNw%O;9L9ww3~bgRJKj$=_J+Pmiqa>STF#83RQ(*G?~&1c1c2VK(6Rs!351#Fh_hmU1nI5NAHLBj4ja>8@)kM*%Uv*^KwZHO zSFpG1{s*?i9GWid@l93T2mKJ{eAVLyog>EG_l%NyAN(Ee;Uj{N2R<7-)WNjN`|rCT8|WuJ8299|9%%1kgAY(v zugJ+h1;JDD6FFHz-G2@B6`6-C@0`81*CE>6tKBh(zjj7bRePg}o)r;|hoJWIjo^t` zYB5)NIahTrpL4OaGmM{2WH}S2Ta<7yCZ*E(yPOaZP5v_koc{(UV%K>0t~r<=qrkYc zk_+SFWaCz)1Z^L}@?+zwycQ;?N|kFsGJT$_^svA?mraDkyMF`~%A+SyXjrLWeX1v> z!*e-Lfkr1iRMrzD$uBvqOq!E)^LY+1R>951!p-D181NQCR1uYr(6xROrIl9%zR#el z$6yHEp}UmP0P5|}{nHP8>Vs!MeYVAXTCcTl0r#RU1ALHRl9*nSK>Q2jX2K*nS)@ht z#j=rjd+e>3UF@M?Y~VJI*cVI4j*vri@1Q~bOH`snsxA8KyJ_RaCsyIyfVsdjaNy^; qwCCDh^G6YR7DQsa#yi1(y@rl+&(0?JstM(5)V6}ZU=l!bLiRTyT8=FM literal 0 HcmV?d00001 diff --git a/app.py b/app.py new file mode 100644 index 0000000..529b810 --- /dev/null +++ b/app.py @@ -0,0 +1,56 @@ +import eel +import os +from queue import Queue + +class ChatBot: + + started = False + userinputQueue = Queue() + + def isUserInput(): + return not ChatBot.userinputQueue.empty() + + def popUserInput(): + return ChatBot.userinputQueue.get() + + def close_callback(route, websockets): + # if not websockets: + # print('Bye!') + exit() + + @eel.expose + def getUserInput(msg): + ChatBot.userinputQueue.put(msg) + print(msg) + + def close(): + ChatBot.started = False + + def addUserMsg(msg): + eel.addUserMsg(msg) + + def addAppMsg(msg): + eel.addAppMsg(msg) + + def start(): + path = os.path.dirname(os.path.abspath(__file__)) + eel.init(path + r'\web', allowed_extensions=['.js', '.html']) + try: + eel.start('index.html', mode='chrome', + host='localhost', + port=27005, + block=False, + size=(350, 480), + position=(10,100), + disable_cache=True, + close_callback=ChatBot.close_callback) + ChatBot.started = True + while ChatBot.started: + try: + eel.sleep(10.0) + except: + #main thread exited + break + + except: + pass \ No newline at end of file diff --git a/open.py b/open.py new file mode 100644 index 0000000..e4eb705 --- /dev/null +++ b/open.py @@ -0,0 +1,16 @@ +import sys +import os +import tkinter as tk +from tkinter import * + +window=Tk() + +window.title("Running Python Script") +window.geometry('250x250') +def callback(): + with open("AiVirtualMouseProject.py", "r", encoding="utf-8") as file: + exec(file.read()) +b = tk.Button(window,text="Run Virtual Mouse",command=callback) +b.pack() + +window.mainloop() \ No newline at end of file diff --git a/proton.py b/proton.py new file mode 100644 index 0000000..aa3e542 --- /dev/null +++ b/proton.py @@ -0,0 +1,257 @@ +import pyttsx3 +import speech_recognition as sr +from datetime import date +import time +import webbrowser +import datetime +from pynput.keyboard import Key, Controller +import pyautogui +import sys +import os +from os import listdir +from os.path import isfile, join +import smtplib +import wikipedia +# import Gesture_Controller +import AiVirtualMouseProject +#import Gesture_Controller_Gloved as Gesture_Controller +import app +from threading import Thread + + +# -------------Object Initialization--------------- +today = date.today() +r = sr.Recognizer() +keyboard = Controller() +engine = pyttsx3.init('sapi5') +engine = pyttsx3.init() +voices = engine.getProperty('voices') +engine.setProperty('voice', voices[0].id) + +# ----------------Variables------------------------ +file_exp_status = False +files =[] +path = '' +is_awake = True #Bot status + +# ------------------Functions---------------------- +def reply(audio): + app.ChatBot.addAppMsg(audio) + + print(audio) + engine.say(audio) + engine.runAndWait() + + +def wish(): + hour = int(datetime.datetime.now().hour) + + if hour>=0 and hour<12: + reply("Good Morning!") + elif hour>=12 and hour<18: + reply("Good Afternoon!") + else: + reply("Good Evening!") + + reply("I am Proton, how may I help you?") + +# Set Microphone parameters +with sr.Microphone() as source: + r.energy_threshold = 500 + r.dynamic_energy_threshold = False + +# Audio to String +def record_audio(): + with sr.Microphone() as source: + r.pause_threshold = 0.8 + voice_data = '' + audio = r.listen(source, phrase_time_limit=5) + + try: + voice_data = r.recognize_google(audio) + except sr.RequestError: + reply('Sorry my Service is down. Plz check your Internet connection') + except sr.UnknownValueError: + print('cant recognize') + pass + print(voice_data.lower()) + return voice_data.lower() + + +# Executes Commands (input: string) +def respond(voice_data): + global file_exp_status, files, is_awake, path + print(voice_data) + voice_data.replace('proton','') + app.eel.addUserMsg(voice_data) + + if is_awake==False: + if 'wake up' in voice_data: + is_awake = True + wish() + + # STATIC CONTROLS + elif 'hello' in voice_data: + wish() + + elif 'what is your name' in voice_data: + reply('My name is Proton!') + + elif 'date' in voice_data: + reply(today.strftime("%B %d, %Y")) + + elif 'time' in voice_data: + reply(str(datetime.datetime.now()).split(" ")[1].split('.')[0]) + + elif 'search' in voice_data: + reply('Searching for ' + voice_data.split('search')[1]) + url = 'https://google.com/search?q=' + voice_data.split('search')[1] + try: + webbrowser.get().open(url) + reply('This is what I found Sir') + except: + reply('Please check your Internet') + + elif 'location' in voice_data: + reply('Which place are you looking for ?') + temp_audio = record_audio() + app.eel.addUserMsg(temp_audio) + reply('Locating...') + url = 'https://google.nl/maps/place/' + temp_audio + '/&' + try: + webbrowser.get().open(url) + reply('This is what I found Sir') + except: + reply('Please check your Internet') + + elif ('bye' in voice_data) or ('by' in voice_data) or ('bhai' in voice_data): + reply("Good bye Sir! Have a nice day.") + is_awake = False + + elif ('exit' in voice_data) or ('terminate' in voice_data): + # if AiVirtualMouseProject.gc_mode: + # AiVirtualMouseProject.gc_mode = 0 + app.ChatBot.close() + #sys.exit() always raises SystemExit, Handle it in main loop + sys.exit() + + + # DYNAMIC CONTROLS + elif 'launch app' in voice_data: + # if AiVirtualMouseProject.gc_mode: + # reply('Gesture recognition is already active') + # else: + # gc = AiVirtualMouseProject.Gesture_Controller() + # t = Thread(target = gc.start) + # t.start() + reply('Launched Successfully') + AiVirtualMouseProject.Gesture_Controller() + + + elif ('stop app' in voice_data) or ('top app' in voice_data): + if AiVirtualMouseProject.gc_mode: + AiVirtualMouseProject.gc_mode = 0 + reply('Gesture recognition stopped') + else: + reply('Gesture recognition is already inactive') + + elif 'copy' in voice_data: + with keyboard.pressed(Key.ctrl): + keyboard.press('c') + keyboard.release('c') + reply('Copied') + + elif 'page' in voice_data or 'pest' in voice_data or 'paste' in voice_data: + with keyboard.pressed(Key.ctrl): + keyboard.press('v') + keyboard.release('v') + reply('Pasted') + + # File Navigation (Default Folder set to C://) + elif 'list' in voice_data: + # only permission is to access users which is on number 24 + counter = 0 + path = 'C://' + files = listdir(path) + filestr = "" + for f in files: + counter+=1 + print(str(counter) + ': ' + f) + filestr += str(counter) + ': ' + f + '
' + file_exp_status = True + reply('These are the files in your root directory') + app.ChatBot.addAppMsg(filestr) + + elif file_exp_status == True: + counter = 0 + if 'open' in voice_data: + if isfile(join(path,files[int(voice_data.split(' ')[-1])-1])): + os.startfile(path + files[int(voice_data.split(' ')[-1])-1]) + file_exp_status = False + else: + try: + path = path + files[int(voice_data.split(' ')[-1])-1] + '//' + print(path) + files = listdir(path) + filestr = "" + print(files) + for f in files: + counter+=1 + filestr += str(counter) + ': ' + f + '
' + print(str(counter) + ': ' + f) + reply('Opened Successfully') + app.ChatBot.addAppMsg(filestr) + + except: + reply('You do not have permission to access this folder') + + if 'back' in voice_data: + filestr = "" + if path == 'C://': + reply('Sorry, this is the root directory') + else: + a = path.split('//')[:-2] + path = '//'.join(a) + path += '//' + files = listdir(path) + for f in files: + counter+=1 + filestr += str(counter) + ': ' + f + '
' + print(str(counter) + ': ' + f) + reply('ok') + app.ChatBot.addAppMsg(filestr) + + else: + reply('I am not functioned to do this !') + +# ------------------Driver Code-------------------- + +t1 = Thread(target = app.ChatBot.start) +t1.start() + +# Lock main thread until Chatbot has started +while not app.ChatBot.started: + time.sleep(0.5) + +wish() +voice_data = None +while True: + if app.ChatBot.isUserInput(): + #take input from GUI + voice_data = app.ChatBot.popUserInput() + else: + #take input from Voice + voice_data = record_audio() + + #process voice_data + if 'proton' in voice_data: + try: + #Handle sys.exit() + respond(voice_data) + except SystemExit: + reply("Exit Successfull") + break + except: + #some other exception got raised + print("EXCEPTION raised while closing.") + break \ No newline at end of file diff --git a/web/css/back.png b/web/css/back.png new file mode 100644 index 0000000000000000000000000000000000000000..4848dda24b47c4efe3fc6658af7bc8a3cdebcf39 GIT binary patch literal 1186 zcmZQzV30{GsVqn=%S>Yc0uY^>nP!-qnF!*)%1tdv1c?KIVn#|%5roOWP>`8i0%OBy zzJkn>Trh_bNGfIK}2HoS##amz-0ldl$?{Bl2{_dz{MqzrY_6O!oeXW zVARYm=)lM#;K;CL$H8-)e@)S z9Q?}t^MQR2tiz+PT&tcm`J0ie&K}W)jp=!xTfE&$LUvz!V0*yh$B8&2Q`gmx4u9S2 za`gVQ&!!a*E+$KyTl&{Y=A-sH)_GP=Iei+vs|#MUJ0|H>ZCY@aQN`W<*T1L5oEtCo z|NGe7bS7XmlY9QlY}bePA|jsm1ua#W&#pOd8vEh7x-wc@=6+YOQF~ur?j@|aVw=al zq)?uJ{u@tjEarXaQqA-I)^{;;|H)BIZ>B^RuySvyD{Bz6Iz8R0Kr}kzPPCV2`^592 z%EjMSPrPDzaaH;ITo3!__Gzs%)V3>4eZF%7U*PM4t5bi59DTKR>B+`(mwayLGG9M# z9?X=o-qzxtg8Gw#pDX&Ayl1)mf6bTr@elJ!Wu-@1znH#Xoc3>~%BQLQZ?~&!gyf3{ zx2nr;{19+MYVFYjN!KI#b{DOSE-3R}+4pBUgYU~<6K?%r6Rn>5Zaf7`ukHk(HD z;mV)K7cw|DUX7hqq_XIhRNKx^L3a=D3T9kZ(`ezXhUJ14$Ma$}R`XaCh^bKlPBoIW8fqlC$C{n;x! zROe*dgub|0&HSp1J?TK)lvtBr&h|`8g_Cb8))7Dor{!9`|)?Lv1D`$cC>|@adoRixn)82=am!0(&vp6YJ<+xaWEqn7>HRl`q zBNJPGpZt8lC(7(%;=j$y%?^5XaNpOGahPryq>z#Q{jFSVUc(HZZ2nJ|c4&F5W>}EE U@r$;&R`qJ{nF8Ha_GOI`0AY*tD*ylh literal 0 HcmV?d00001 diff --git a/web/css/jquery.convform.css b/web/css/jquery.convform.css new file mode 100644 index 0000000..13ffadd --- /dev/null +++ b/web/css/jquery.convform.css @@ -0,0 +1,363 @@ +* { + margin: 0px; + padding: 0px; + /* font-family: sans-serif; */ + font-family: "Comic Sans MS"; +} + +div.convFormDynamic { + width: calc(100% - 33px); + margin: 10px auto 15px; + padding: 0 !important; + position: relative; + /* box-shadow: 0 0 5px 5px rgba(222, 222, 222, 0.4); */ +} + +div.convFormDynamic input.userInputDynamic { + border: none; + padding: 6px 6px; + outline: none; + font-size: 0.905rem; + float: left; + width: 72%; + height: 25%; + line-height: 1.3em; + min-height: 1.7em; + max-height: 10rem; + display: block; + max-width: 72%; + margin-right: 2.5%; + + background: rgba(24, 24, 16, .2); + border-radius: 2em; + backdrop-filter: blur(15px); + border: 2px solid rgba(255, 255, 255, 0.05); + background-clip: padding-box; + box-shadow: 10px 10px 10px rgba(46, 54, 68, 0.03); +} +div.conv-form-wrapper:after { + content: ''; + display: block; + clear: both; + width: 100%; + height: 1px; +} +div.conv-form-wrapper div#messages { + max-height: 71vh; + padding-left: 10px; + padding-right: 10px; + height: auto !important; + overflow-y: scroll; + scrollbar-width: none; + -ms-overflow-style: none; /* IE 11 */ +} +div.conv-form-wrapper * { + scrollbar-width: none; + -ms-overflow-style: none; +} +div.conv-form-wrapper div#messages:after { + content: ''; + display: table; + clear: both; +} +div.conv-form-wrapper { + position: relative; +} +div.conv-form-wrapper div.wrapper-messages { + position: relative; + height: 600px; + overflow-y: scroll; + transition: margin 0.1s; +} +div.conv-form-wrapper:before { + content: ''; + position: absolute; + width: 100%; + display: block; + height: 10px; + top: 0; + left: 0; + z-index: 2; + background: linear-gradient(#000000, transparent); +} +@media (max-width: 767px) { + div.conv-form-wrapper div.wrapper-messages, div.conv-form-wrapper div#messages { + max-height: 71vh; + } +} + +div.conv-form-wrapper div.wrapper-messages::-webkit-scrollbar, div#feed ul::-webkit-scrollbar, div.conv-form-wrapper div.options::-webkit-scrollbar { + width: 0px; + height: 0px; + /* remove scrollbar space */ + background: transparent; + /* optional: just make scrollbar invisible */ +} + +input.userInputDynamic.error { + color: #ac0000 !important; +} +input.userInputDynamic { + border-radius: 3px; + margin: 7px 10px; +} + +div.conv-form-wrapper div#messages { + position: relative; + bottom: 0; + margin-left: -5px; + height: auto !important; + width: 97%; + padding-bottom: 20px; +} +div.conv-form-wrapper div.options { + word-wrap: normal; + white-space: nowrap; + overflow-x: scroll; + position: absolute; + bottom: 100%; + width: 100%; + transform: translateY(-5px); +} + +div.conv-form-wrapper div.message:after { + content: ''; + display: table; + clear: both; +} +div.conv-form-wrapper div.message.ready.rtol { + animation: slideRtoLIn 0.5s ease; + transform-origin: 0 0 0; +} +div.conv-form-wrapper div.message.ready.ltor { + animation: slideLtoRIn 0.5s ease; + transform-origin: 0 0 0; +} +div.conv-form-wrapper div#messages div.message { + border-radius: 20px; + padding: 12px 22px; + font-size: 0.905rem; + color: #333; + display: inline-block; + padding: 10px 15px 8px; + border-radius: 20px; + margin-bottom: 5px; + float: right; + clear: both; + max-width: 65%; + word-wrap: break-word; +} +/* div.conv-form-wrapper div#messages { + background: linear-gradient(to right, #388eff 29%, #70aeff 81%); + color: #fff; + float: left; + border-top-left-radius: 0; +} */ +div.conv-form-wrapper div#messages div.message.to{ + float:left; + border-top-left-radius: 0; +} +div.message.to { + background: rgba(24, 24, 16, .2); + border-radius: 2em; + backdrop-filter: blur(15px); + border: 2px solid rgba(255, 255, 255, 0.05); + background-clip: padding-box; + box-shadow: 10px 10px 10px rgba(46, 54, 68, 0.03); + color: white; +} + +/* div.conv-form-wrapper div#messages div.message.from { + background: linear-gradient(to left, #38ff84 0%, #98fbbe 100%); + color: #000000; + border-top-right-radius: 0; +} */ +div.conv-form-wrapper div#messages div.message.from{ + float:right; + border-top-left-radius: 0; +} +div.message.from { + background: rgba(24, 24, 16, .2); + border-radius: 2em; + backdrop-filter: blur(15px); + border: 2px solid rgba(255, 255, 255, 0.05); + background-clip: padding-box; + box-shadow: 10px 10px 10px rgba(46, 54, 68, 0.03); + color: white; +} +.message.to+.message.from, .message.from+.message.to { + margin-top: 15px; +} +@keyframes slideRtoLIn { + 0% { + margin-right: -50px; + } + + 100% { + margin-right: 0px; + } +} +@keyframes slideLtoRIn { + 0% { + margin-left: -50px; + } + + 100% { + margin-left: 0; + } +} + +div.convFormDynamic button.submit { + padding: 3px; + border: none; + float: left; + margin: 5px; + color: black; + cursor: pointer; + border-radius: 8px; + font-size: 1.1rem; + width: 36px; + height: 35px; + margin-top: 8px; + /* background: #fff; */ + outline: none !important; + + background: rgba(24, 24, 16, .2); + border-radius: 10px; + backdrop-filter: blur(15px); + border: 2px solid rgba(255, 255, 255, 0.05); + background-clip: padding-box; + box-shadow: 10px 10px 10px rgba(46, 54, 68, 0.03); +} + + +div.convFormDynamic button.submit:hover { + background: rgba(24, 24, 16, 0.5); + border-radius: 10px; + backdrop-filter: blur(15px); + border: 2px solid rgba(255, 255, 255, 0.05); + background-clip: padding-box; + box-shadow: 10px 10px 10px rgba(46, 54, 68, 0.03); +} + +button.submit.glow { + box-shadow: 0 0 10px 5px rgba(6, 197, 166, 0.4); +} +.no-border { + border: none !important; +} +.dragscroll { + cursor: grab; +} +div.conv-form-wrapper div#messages::-webkit-scrollbar, div#feed ul::-webkit-scrollbar { + width: 0px; + /* remove scrollbar space */ + background: transparent; + /* optional: just make scrollbar invisible */ +} +span.clear { + display: block; + clear: both; +} + + +.header-wrapper { + background-color: #000000; + color: white; + width: auto; + height: 20px; + top: 0px; + left: 0px; + padding-left: 10px; + padding-top: 5px; + padding-bottom: 25px; + padding-right: 20px; + text-align: right; +} +.logo{ + position: fixed; + top: 0px; + left: 5%; + padding: 10px; + padding-bottom: 20px; +} + +.chatBody { + overflow:hidden; + + width: 100vw; + min-height: 100vh; + background: linear-gradient(to bottom right, rgba(252, 203, 144, 1), rgba(213, 126, 235, 1)); +} + + +.awesome { + font-family: "Comic Sans MS"; + + width:100%; + margin-top: 12px; + margin-left: 12px; + text-align: center; + + color:#313131; + font-size:16px; + font-weight: bold; + position: absolute; + -webkit-animation:colorchange 20s infinite alternate; +} + +@-webkit-keyframes colorchange { + 0% { + + color: lightblue; + } + + 10% { + + color: #8e44ad; + } + + 20% { + + color: #1abc9c; + } + + 30% { + + color: #7afad8; + } + + 40% { + + color: lightblue; + } + + 50% { + + color: #70b8ff; + } + + 60% { + + color: lightblue; + } + + 70% { + + color: #2980b9; + } + 80% { + + color: #67d962; + } + + 90% { + + color: #62c7d9; + } + + 100% { + + color: #9ee84f; + } +} diff --git a/web/images/icon.png b/web/images/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..0a6c48ecebb6c19477af6714b55b04657ef3e2d1 GIT binary patch literal 106573 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 Hu0mjfs1N?% literal 0 HcmV?d00001 diff --git a/web/index.html b/web/index.html new file mode 100644 index 0000000..48a96d2 --- /dev/null +++ b/web/index.html @@ -0,0 +1,43 @@ + + + + Proton + + + + + +
+
+

PROTON Welcomes you!

+ +
+
+ + +
+ +
+ +
+ +
+
+

+
+
+ +
+
+ + + +
+ +
+ + + + diff --git a/web/js/main.js b/web/js/main.js new file mode 100644 index 0000000..ea111bf --- /dev/null +++ b/web/js/main.js @@ -0,0 +1,49 @@ + +//user clicked button +document.getElementById("userInputButton").addEventListener("click", getUserInput, false); +//user pressed enter '13' +document.getElementById("userInput").addEventListener("keyup", function (event) { + if (event.keyCode === 13) { + //cancel the default action + event.preventDefault(); + //process event + getUserInput(); + } +}); + +eel.expose(addUserMsg); +eel.expose(addAppMsg); + + +function addUserMsg(msg) { + element = document.getElementById("messages"); + element.innerHTML += '
' + msg + '
'; + element.scrollTop = element.scrollHeight - element.clientHeight - 15; + //add delay for animation to complete and then modify class to => "message from" + index = element.childElementCount - 1; + setTimeout(changeClass.bind(null, element, index, "message from"), 500); +} + +function addAppMsg(msg) { + element = document.getElementById("messages"); + element.innerHTML += '
' + msg + '
'; + element.scrollTop = element.scrollHeight - element.clientHeight - 15; + //add delay for animation to complete and then modify class to => "message to" + index = element.childElementCount - 1; + setTimeout(changeClass.bind(null, element, index, "message to"), 500); +} + +function changeClass(element, index, newClass) { + console.log(newClass +' '+ index); + element.children[index].className = newClass; +} + + +function getUserInput() { + element = document.getElementById("userInput"); + msg = element.value; + if (msg.length != 0) { + element.value = ""; + eel.getUserInput(msg); + } +} \ No newline at end of file