MCPcopy Create free account
hub / github.com/akira-l/SEEG / MotionPreprocessor

Class MotionPreprocessor

scripts/data_loader/motion_preprocessor.py:4–87  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2
3
4class MotionPreprocessor:
5 def __init__(self, skeletons, mean_pose):
6 self.skeletons = np.array(skeletons)
7 self.mean_pose = np.array(mean_pose).reshape(-1, 3)
8 self.filtering_message = "PASS"
9
10 def get(self):
11 assert (self.skeletons is not None)
12
13 # filtering
14 if self.skeletons != []:
15 if self.check_pose_diff():
16 self.skeletons = []
17 self.filtering_message = "pose"
18 elif self.check_spine_angle():
19 self.skeletons = []
20 self.filtering_message = "spine angle"
21 elif self.check_static_motion():
22 self.skeletons = []
23 self.filtering_message = "motion"
24
25 if self.skeletons != []:
26 self.skeletons = self.skeletons.tolist()
27 for i, frame in enumerate(self.skeletons):
28 assert not np.isnan(self.skeletons[i]).any() # missing joints
29
30 return self.skeletons, self.filtering_message
31
32 def check_static_motion(self, verbose=False):
33 def get_variance(skeleton, joint_idx):
34 wrist_pos = skeleton[:, joint_idx]
35 variance = np.sum(np.var(wrist_pos, axis=0))
36 return variance
37
38 left_arm_var = get_variance(self.skeletons, 6)
39 right_arm_var = get_variance(self.skeletons, 9)
40
41 th = 0.0014 # exclude 13110
42 # th = 0.002 # exclude 16905
43 if left_arm_var < th and right_arm_var < th:
44 if verbose:
45 print('skip - check_static_motion left var {}, right var {}'.format(left_arm_var, right_arm_var))
46 return True
47 else:
48 if verbose:
49 print('pass - check_static_motion left var {}, right var {}'.format(left_arm_var, right_arm_var))
50 return False
51
52 def check_pose_diff(self, verbose=False):
53 diff = np.abs(self.skeletons - self.mean_pose)
54 diff = np.mean(diff)
55
56 # th = 0.017
57 th = 0.02 # exclude 3594
58 if diff < th:
59 if verbose:
60 print('skip - check_pose_diff {:.5f}'.format(diff))
61 return True

Callers 1

_sample_from_clipMethod · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected