Created
March 27, 2021 10:44
-
-
Save martingaido/43860891e74460ff892567f0b773f156 to your computer and use it in GitHub Desktop.
Hands Tracker using OpenCV & MediaPipe
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# pip install mediapipe | |
import cv2 | |
import mediapipe as mp | |
import time | |
cap = cv2.VideoCapture(0) | |
mpHands = mp.solutions.hands | |
hands = mpHands.Hands() # using default paramaters of 'Hands()' | |
mpDraw = mp.solutions.drawing_utils | |
pTime = 0 | |
cTime = 0 | |
while True: | |
success, img = cap.read() | |
imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) | |
results = hands.process(imgRGB) | |
# print(results.multi_hand_landmarks) | |
if results.multi_hand_landmarks: | |
for handLms in results.multi_hand_landmarks: | |
for id, lm in enumerate(handLms.landmark): | |
# print(id, lm) | |
h, w, c = img.shape | |
cx, cy = int(lm.x * w), int(lm.y * h) | |
# print(id, cx, cy) | |
if id == 0: # change the ID | |
cv2.circle(img, (cx, cy), 10, (255, 0, 255), cv2.FILLED) | |
if id == 4: # finger 1 | |
cv2.circle(img, (cx, cy), 10, (255, 0, 255), cv2.FILLED) | |
# cv2.circle(img, (cx, cy), 10, (255, 0, 255), cv2.FILLED) # show all | |
mpDraw.draw_landmarks(img, handLms, mpHands.HAND_CONNECTIONS) | |
cTime = time.time() | |
fps = 1/(cTime - pTime) | |
pTime = cTime | |
cv2.putText(img, str(int(fps)), (10, 70), cv2.FONT_HERSHEY_PLAIN, 3, (255, 0, 255), 3) | |
cv2.imshow("Image", img) | |
cv2.waitKey(1) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment