-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathposeFeedbacker.py
More file actions
39 lines (32 loc) · 1.39 KB
/
poseFeedbacker.py
File metadata and controls
39 lines (32 loc) · 1.39 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
# Minhas Kamal (minhaskamal024@gmail.com)
# 20 Mar 24
import movement
import skeleton
import changeDetector
class PoseFeedbacker:
_change_detector = changeDetector.ChangeDetector()
@classmethod
def get_feedback(cls, landmarks, movement: movement.Movement) -> str:
feed_back = cls._check_visibility_of_related_joints(landmarks, movement)
if not feed_back:
feed_back = cls._check_stillness(landmarks, movement)
return feed_back
@classmethod
def _check_visibility_of_related_joints(cls, landmarks, movement: movement.Movement):
feed_back = ""
if landmarks:
for joint in [*movement.tracking_joint_list, *movement.observing_joint_list]:
if landmarks.landmark[skeleton.Skeleton.get_mediapipe_index(joint)].visibility < 0.5:
feed_back = f"{skeleton.Skeleton.get_mediapipe_label(joint)} is not visible"
break
else:
feed_back = "Body is not detected"
return feed_back
@classmethod
def _check_stillness(cls, landmarks, movement: movement.Movement):
feed_back = ""
if cls._change_detector.is_changing(skeleton.Skeleton.calc_angle(
skeleton.Skeleton.get_mediapipe_index(movement.tracking_joint_list[0]),
landmarks.landmark)):
feed_back = "Please maintain a still pose"
return feed_back