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)