Download mouse.py from WalidAlHassan/Virtual-Control: direct link, hf CLI and curl.
- Browser
- Download file 1.99 kB
-
https://huggingface.co/WalidAlHassan/Virtual-Control/resolve/main/mouse.py
- Command line
-
hf download hf://WalidAlHassan/Virtual-Control/mouse.py
-
curl -L -o mouse.py https://huggingface.co/WalidAlHassan/Virtual-Control/resolve/main/mouse.py
1.99 kB
| import cv2 | |
| import mediapipe as mp | |
| import pyautogui | |
| cap = cv2.VideoCapture(0) # Open Camera | |
| mpHands = mp.solutions.hands | |
| hand_detector = mpHands.Hands(False) | |
| 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 | |
| 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 | |
| for id, landmark in enumerate(landmarks): | |
| x = int(landmark.x*frame_width) | |
| y = int(landmark.y*frame_height) | |
| if id == 4: | |
| cv2.circle(frame,(x, y), 15, (255,255,0), cv2.FILLED) | |
| index_x = screen_width/frame_width*x | |
| index_y = screen_height/frame_height*y | |
| if id == 6: | |
| cv2.circle(frame,(x, y), 15, (255,255,0), cv2.FILLED) | |
| thumb_x = screen_width/frame_width*x | |
| thumb_y = screen_height/frame_height*y | |
| print('outside', abs(index_y - thumb_y)) | |
| if abs(index_y - thumb_y) < 40: | |
| pyautogui.click() | |
| pyautogui.sleep(0.1) | |
| # if(abs(index_y - thumb_y) < 50): | |
| # print('outside', abs(index_y - thumb_y)) | |
| elif abs(index_y - thumb_y) < 250: | |
| pyautogui.moveTo(thumb_x, thumb_y) | |
| drawing_utils.draw_landmarks(frame, hand, mpHands.HAND_CONNECTIONS) | |
| cv2.imshow('Virtual Mouse', frame) | |
| cv2.waitKey(1) |