Amazing-Python-Scripts

Форк
0
81 строка · 2.6 Кб
1
import cv2
2
import time
3
import os
4
import HandTrackingModule as htm
5

6

7
class fingerCounter():
8
    def __init__(self):
9
        self.wCam = 640
10
        self.hCam = 480
11
        self.folderPath = "./Finger-Counter/FingerImages"
12
        self.previousTime = 0
13
        # self.currentTime = time.time()
14
        # 4 for thumb, 8 for index, 12 for middle, 16 for ring, 20 for pinky finger
15
        self.tipIds = [4, 8, 12, 16, 20]
16
        self.overlayList = []
17
        self.image_read(self)
18
        self.process(self, self)
19

20
    def image_read(self, overlayList):
21
        myList = os.listdir(self.folderPath)
22
        print(myList)
23

24
        for imPath in myList:
25
            image = cv2.imread(f'{self.folderPath}/{imPath}')
26
            self.overlayList.append(image)
27
        print(len(self.overlayList))
28

29
    def process(self, tipIds, overlayList):
30
        cap = cv2.VideoCapture(0)
31
        cap.set(3, self.wCam)
32
        cap.set(4, self.hCam)
33
        detector = htm.handDetector(detectionCon=0.75)
34
        while True:
35
            success, img = cap.read()
36
            img = detector.findHands(img)
37
            lmList = detector.findPosition(img, draw=False)
38
            print(lmList)
39

40
            if len(lmList) != 0:
41
                fingers = []
42

43
                # Thumb
44
                if lmList[self.tipIds[0]][1] > lmList[self.tipIds[0] - 1][2]:
45
                    fingers.append(1)
46
                else:
47
                    fingers.append(0)
48
                # Four fingers
49
                for id in range(1, 5):
50
                    if lmList[self.tipIds[id]][2] < lmList[self.tipIds[id] - 2][2]:
51
                        fingers.append(1)
52
                    else:
53
                        fingers.append(0)
54

55
                totalFingers = fingers.count(1)
56
                print(totalFingers)
57

58
                h, w, c = self.overlayList[totalFingers - 1].shape
59
                img[0:h, 0:w] = self.overlayList[totalFingers - 1]
60
                cv2.rectangle(img, (20, 225), (170, 425),
61
                              (0, 255, 0), cv2.FILLED)
62
                cv2.putText(img, str(totalFingers), (45, 375),
63
                            cv2.FONT_HERSHEY_PLAIN, 10, (255, 0, 0), 25)
64

65
            self.currentTime = time.time()
66
            fps = 1/(self.currentTime - self.previousTime)
67
            self.previousTime = self.currentTime
68

69
            cv2.putText(img, f'FPS: {int(fps)}', (400, 70),
70
                        cv2.FONT_HERSHEY_PLAIN, 3, (255, 0, 0), 3)
71

72
            cv2.imshow("Image", img)
73

74
            if cv2.waitKey(1) == ord('q'):
75
                break
76

77

78
cv2.destroyAllWindows()
79

80
if __name__ == "__main__":
81
    counter = fingerCounter()
82

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.