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
| class ActivityModel: """ 活动模型 """ def __init__(self): self.activities = { 'fatigue': { 'sub_activities': ['yawning', 'eye_closure', 'head_nodding'], 'duration_range': (5, 30), 'frequency': 0.3 }, 'distraction_phone': { 'sub_activities': ['looking_down', 'phone_interaction', 'glancing_away'], 'duration_range': (3, 15), 'frequency': 0.5 }, 'distraction_conversation': { 'sub_activities': ['looking_sideways', 'talking', 'gesturing'], 'duration_range': (10, 60), 'frequency': 0.4 }, 'eating': { 'sub_activities': ['hand_to_mouth', 'chewing', 'drinking'], 'duration_range': (30, 120), 'frequency': 0.2 } } def apply(self, human_model, activity_name, duration): """ 应用活动到人体模型 """ activity = self.activities[activity_name] timeline = self.generate_timeline(activity, duration) for t, sub_activity in timeline: self.apply_sub_activity(human_model, sub_activity, t) def generate_timeline(self, activity, total_duration): """ 生成时间线 """ timeline = [] for sub in activity['sub_activities']: start = random.uniform(0, total_duration * 0.7) duration = random.uniform(1, 5) timeline.append((start, sub)) return sorted(timeline, key=lambda x: x[0])
|