-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathvirtual_mouse.py
More file actions
53 lines (44 loc) · 1.84 KB
/
virtual_mouse.py
File metadata and controls
53 lines (44 loc) · 1.84 KB
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
import cv2
import mediapipe as mp
import pyautogui
cap=cv2.VideoCapture(0)
hand_detector = mp.solutions.hands.Hands()
drawing_utils=mp.solutions.drawing_utils
screen_width,screen_height=pyautogui.size()
index_y=0
while True:
_,frame=cap.read()
frame=cv2.flip(frame,1)
frame_height,frame_width,_=frame.shape
# print(frame_width,frame_height)
rgb_frame=cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)
output=hand_detector.process(rgb_frame)
hands=output.multi_hand_landmarks
if hands:
for hand in hands:
drawing_utils.draw_landmarks(frame,hand)
landmarks=hand.landmark
# print(landmarks)
for id,landmark in enumerate(landmarks):
x=int(landmark.x*frame_width)
y=int(landmark.y*frame_height)
if id == 8:
cv2.circle(img=frame, center=(x,y), radius=10, color=(0,255,255))
index_x=int((screen_width/frame_width)*x)
index_y=int((screen_height/frame_height)*y)
print('index',index_x,index_y)
pyautogui.moveTo(index_x,index_y)
if id == 4:
cv2.circle(img=frame, center=(x,y), radius=10, color=(0,255,255))
thumb_x=int((screen_width/frame_width)*x)
thumb_y=int((screen_height/frame_height)*y)
print('thumb',thumb_x,thumb_y)
print('outside',abs(thumb_y - index_y))
if abs(index_y-thumb_y)<50:
# print('click')
pyautogui.click()
# pyautogui.sleep(1)
# print(x,y)
# print(hands)
cv2.imshow('Virtual Mouse',frame)
cv2.waitKey(1)