From d539d614c50d12f59204e715ef96bde0101ee21a Mon Sep 17 00:00:00 2001 From: Srinadh Vura <83588454+SrinadhVura@users.noreply.github.com> Date: Sat, 21 Oct 2023 12:59:00 +0530 Subject: [PATCH] Create HTrack.py --- Volume_hand_controller/HTrack.py | 61 ++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 Volume_hand_controller/HTrack.py diff --git a/Volume_hand_controller/HTrack.py b/Volume_hand_controller/HTrack.py new file mode 100644 index 0000000..969560c --- /dev/null +++ b/Volume_hand_controller/HTrack.py @@ -0,0 +1,61 @@ +""" +This file uses mediapipe - a framework by google to detect the landmarks of hand (21) +in the image captured from webcam using openCV +The functionality wrapped as handDetector class containing methods drawHands() and getPositions() +drawHands() --> To draw land marks of detected hands +getPositions() --> To return the found landmarks as a list +""" +import cv2 +import mediapipe as mp +import time + +class handDetector(): + def __init__(self, mode=False, maxHands=2, detectionCon=0.5, trackCon=0.5): + self.mode = mode + self.maxHands = maxHands + self.detectionCon = detectionCon + self.trackCon = trackCon + self.mpDraw = mp.solutions.drawing_utils + self.hands = mp.solutions.hands.Hands(static_image_mode=self.mode,max_num_hands= self.maxHands,min_detection_confidence=self.detectionCon,min_tracking_confidence= self.trackCon) + def drawHands(self, img, draw=True): + imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) + self.res = self.hands.process(imgRGB) + if self.res.multi_hand_landmarks: + for handLms in self.res.multi_hand_landmarks: + if draw: + self.mpDraw.draw_landmarks(img, handLms,mp.solutions.hands.HAND_CONNECTIONS) + return img + + def getPositions(self, img, handId=0): + self.xList=[] + self.yList=[] + self.lmList = [] + if self.res.multi_hand_landmarks: + decHand = self.res.multi_hand_landmarks[handId] + for index, lmark in enumerate(decHand.landmark): + h, w, c = img.shape + cx, cy = int(lmark.x * w), int(lmark.y * h) + self.xList.append(cx) + self.yList.append(cy) + self.lmList.append([index, cx, cy]) + return self.lmList + +def main(): + prevTime = 0 + currTime = 0 + cap = cv2.VideoCapture(0) + detector = handDetector() + while True: + _, img = cap.read() + img = detector.drawHands(img) + lms= detector.getPositions(img) + print(lms) + currTime = time.time() + fps = 1 / (cTime - pTime) + prevTime = cTime + cv2.putText(img, str(int(fps)), (10, 70), cv2.FONT_HERSHEY_PLAIN, 3,(51, 0, 255), 3) + cv2.imshow("Image", img) + cv2.waitKey(1) + +if __name__ == "__main__": + main()