Skip to content
harikiran138Public

About

youcan control mouse using your hand and camera

Resources

Stars

0 stars

Watchers

1 watching

Forks

Latest commit

 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 

Repository files navigation

The provided Python code utilizes OpenCV (cv2), MediaPipe (mp), and pyautogui libraries to create a virtual mouse controlled by hand gestures using a webcam. Here's a breakdown of the code and its functionality:

Imports:

  • cv2: Imports the OpenCV library for computer vision tasks.
  • mediapipe: Imports the MediaPipe library for hand landmark detection.
  • pyautogui: Imports the pyautogui library for controlling the mouse cursor on the screen.

Capturing Video and Setting Up:

  • cap = cv2.VideoCapture(0): Creates a video capture object to access the webcam (index 0 usually refers to the default webcam).
  • hand_detector = mp.solutions.hands.Hands(): Initializes the MediaPipe hand detection model.
  • drawing_utils = mp.solutions.drawing_utils: Gets the drawing utilities from MediaPipe for visualizing landmarks.
  • screen_width, screen_height = pyautogui.size(): Retrieves the screen resolution using pyautogui.
  • index_y = 0: Initializes a variable to store the index finger's Y-coordinate on the screen (initially 0).

Processing Loop:

  • while True: Starts a loop that continuously reads frames from the webcam.
    • _, frame = cap.read(): Reads a frame from the webcam and discards the return value (a status flag).
    • frame = cv2.flip(frame, 1): Flips the frame horizontally to match the mirror-like webcam view.
    • frame_height, frame_width, _ = frame.shape: Gets the frame's height, width, and number of channels (usually 3 for BGR).
    • rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB): Converts the frame from BGR color space to RGB for MediaPipe, which expects RGB format.
    • output = hand_detector.process(rgb_frame): Processes the frame with the hand detection model.
    • hands = output.multi_hand_landmarks: Extracts the detected hands (if any) from the output.

Hand Detection and Processing:

  • if hands: Checks if any hands were detected in the frame.
    • for hand in hands: Iterates through each detected hand.
      • drawing_utils.draw_landmarks(frame, hand): Draws the hand landmarks (e.g., fingertips) on the frame for visualization.
      • landmarks = hand.landmark: Gets the list of hand landmarks for the current hand.
      • for id, landmark in enumerate(landmarks): Iterates through each landmark in the list.
        • x = int(landmark.x * frame_width): Calculates the landmark's X-coordinate on the frame relative to its width (0-1 decimal scaled to frame width).
        • y = int(landmark.y * frame_height): Calculates the landmark's Y-coordinate on the frame relative to its height.
        • if id == 8: Checks if the landmark ID is 8, which corresponds to the tip of the index finger.
          • cv2.circle(img=frame, center=(x,y), radius=10, color=(0, 255, 255)): Draws a blue circle on the frame at the index fingertip.
          • index_x = screen_width / frame_width * x: Calculates the index finger's X-coordinate on the screen based on its relative position in the frame and the screen resolution.
          • index_y = screen_height / frame_height * y: Calculates the index finger's Y-coordinate on the screen based on its relative position in the frame and the screen resolution.
        • if id == 4: Checks if the landmark ID is 4, which corresponds to the tip of the thumb.
          • cv2.circle(img=frame, center=(x,y), radius=10, color=(0, 255, 255)): Draws a blue circle on the frame at the thumb tip.
          • thumb_x = screen_width / frame_width * x: Calculates the thumb's X-coordinate on the screen based on its relative position in the frame and the screen resolution.
          • thumb_y = screen_height / frame_height * y: Calculates the thumb's Y-coordinate on the screen based on its relative position in the frame and the screen resolution.
          • print('outside', abs(index_y - thumb_y)): Prints the absolute difference between the index finger's

About

youcan control mouse using your hand and camera

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages