-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathHandPattern.py
More file actions
74 lines (51 loc) · 2.64 KB
/
HandPattern.py
File metadata and controls
74 lines (51 loc) · 2.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import math
class handPattern():
def __init__(self):
self.thumb = [4, 3, 2, 1]
self.index = [8, 7, 6, 5]
self.middle = [12, 11, 10, 9]
self.ring = [16, 15, 14, 13]
self.pinky = [20, 19, 18, 17]
def getDist(self, marker1, marker2, landmarks):
return math.hypot(landmarks[marker1][1] - landmarks[marker2][1], landmarks[marker1][2] - landmarks[marker2][2])
def isFingerCurled(self, finger, landmarks):
dist_tip_mcp = self.getDist(finger[0], finger[3], landmarks)
palm_height = self.getDist(self.middle[3], 0, landmarks)
return dist_tip_mcp <= (0.65 * palm_height)
def isThumbExtended(self, landmarks):
thumbtip = landmarks[self.thumb[0]]
thumbip = landmarks[self.thumb[1]]
thumbmcp = landmarks[self.thumb[2]]
pinkymcp = landmarks[self.pinky[3]]
indexmcp = landmarks[self.index[3]]
if indexmcp[1] > pinkymcp[1]:
return thumbmcp[1] < thumbip[1] < thumbtip[1]
else:
return thumbmcp[1] > thumbip[1] > thumbtip[1]
def isFist(self, landmarks):
if not landmarks or len(landmarks) < 21:
return False
thumbcheck = not self.isThumbExtended(landmarks)
indexcheck = self.isFingerCurled(self.index, landmarks)
middlecheck = self.isFingerCurled(self.middle, landmarks)
ringcheck = self.isFingerCurled(self.ring, landmarks)
pinkycheck = self.isFingerCurled(self.pinky, landmarks)
return thumbcheck and indexcheck and middlecheck and ringcheck and pinkycheck
def isPointer(self, landmarks):
if not landmarks or len(landmarks) < 21:
return False
thumbcheck = not self.isThumbExtended(landmarks)
indexcheck = not self.isFingerCurled(self.index, landmarks)
middlecheck = self.isFingerCurled(self.middle, landmarks)
ringcheck = self.isFingerCurled(self.ring, landmarks)
pinkycheck = self.isFingerCurled(self.pinky, landmarks)
return thumbcheck and indexcheck and middlecheck and ringcheck and pinkycheck
def isGun(self, landmarks):
if not landmarks or len(landmarks) < 21:
return False
indexcheck = not self.isFingerCurled(self.index, landmarks)
middlecheck = self.isFingerCurled(self.middle, landmarks)
ringcheck = self.isFingerCurled(self.ring, landmarks)
pinkycheck = self.isFingerCurled(self.pinky, landmarks)
thumbcheck = self.isThumbExtended(landmarks)
return thumbcheck and indexcheck and middlecheck and ringcheck and pinkycheck