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
| import numpy as np
class SeeingMachinesImpairmentDetector: """Seeing Machines损伤检测器""" def __init__(self): self.dms_features = DMSFeatureExtractor() self.fusion_module = MultiModalFusion() def detect(self, camera_data, vehicle_data=None, steering_data=None) -> dict: """ 多模态损伤检测 Args: camera_data: 摄像头数据 vehicle_data: 车辆动力学数据(可选) steering_data: 方向盘数据(可选) Returns: impairment_score: 损伤评分 """ dms_features = self.dms_features.extract(camera_data) if vehicle_data and steering_data: fused_score = self.fusion_module.fuse( dms_features, vehicle_data, steering_data ) else: fused_score = self.dms_features.classify(dms_features) return { 'impairment_score': fused_score, 'confidence': self._calc_confidence(fused_score), 'modality': 'multi-modal' if vehicle_data else 'vision-only' } def _calc_confidence(self, score): return min(abs(score - 0.5) * 2, 1.0)
class DMSFeatureExtractor: def extract(self, data): return { 'gaze_entropy': np.random.rand(), 'blink_pattern': np.random.rand(), 'pupil_response': np.random.rand(), 'facial_rigidity': np.random.rand(), } def classify(self, features): weights = {'gaze_entropy': 0.3, 'blink_pattern': 0.25, 'pupil_response': 0.25, 'facial_rigidity': 0.2} return sum(w * features[k] for k, w in weights.items())
class MultiModalFusion: def fuse(self, dms, vehicle, steering): dms_score = sum(dms.values()) / len(dms) return 0.6 * dms_score + 0.2 * vehicle + 0.2 * steering
|