#!/usr/bin/env python import math import cv2 import mediapipe as mp mp_drawing = mp.solutions.drawing_utils mp_drawing_styles = mp.solutions.drawing_styles mp_hands = mp.solutions.hands # For webcam input: # cv2.namedWindow("window", cv2.WND_PROP_FULLSCREEN) # cv2.setWindowProperty("window",cv2.WND_PROP_FULLSCREEN,cv2.WINDOW_FULLSCREEN) cap = cv2.VideoCapture(0) count = 0 with mp_hands.Hands( model_complexity=0, min_detection_confidence=0.5, min_tracking_confidence=0.5, max_num_hands=20) as hands: framecount = 0 previous_x = 0 previous_y = 0 timeout = 0 while cap.isOpened(): success, image = cap.read() if not success: print("Ignoring empty camera frame.") # If loading a video, use 'break' instead of 'continue'. continue # To improve performance, optionally mark the image as not writeable to # pass by reference. image.flags.writeable = False image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) results = hands.process(image) # Draw the hand annotations on the image. image.flags.writeable = True image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR) if results.multi_hand_landmarks: for hand_landmarks in results.multi_hand_landmarks: x = hand_landmarks.landmark[mp_hands.HandLandmark.INDEX_FINGER_TIP].x y = hand_landmarks.landmark[mp_hands.HandLandmark.INDEX_FINGER_TIP].y if (framecount % 5) == 0: # print(f'{abs(previous_x - x)} {abs(previous_y - y)}') previous_x = x previous_y = y if abs(previous_x - x) < 0.01 and abs(previous_y - y) < 0.01 and timeout <= 0: print("Still") cv2.circle(image,(int(x),int(y)), 63, (0,0,255), -1) print(x, y) timeout = 5 timeout -= 1 framecount += 1 mp_drawing.draw_landmarks( image, hand_landmarks, mp_hands.HAND_CONNECTIONS, mp_drawing_styles.get_default_hand_landmarks_style(), mp_drawing_styles.get_default_hand_connections_style()) # Flip the image horizontally for a selfie-view display. cv2.imshow('window', cv2.flip(image, 1)) if cv2.waitKey(5) & 0xFF == ord('q'): break cap.release()