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 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
| class MultimodalFusion: """ 多模态融合疲劳检测 Springer 2026综述核心: - 视觉 + 生理 + 车辆行为融合 - CNN + LSTM混合架构 - 准确率从80-90%提升到>95% 融合策略: - 早期融合:特征拼接 - 晚期融合:决策融合 - 混合融合:注意力机制 """ def __init__(self): self.visual_weight = 0.4 self.physio_weight = 0.35 self.vehicle_weight = 0.25 def late_fusion(self, visual_result: dict, physio_result: dict, vehicle_result: dict) -> dict: """ 晚期融合(决策级) Args: visual_result: 视觉检测结果 physio_result: 生理检测结果 vehicle_result: 车辆检测结果 Returns: fused_result: 融合结果 """ visual_level = visual_result.get("fatigue_level", "low") physio_level = physio_result.get("fatigue_level", "low") vehicle_level = vehicle_result.get("fatigue_level", "low") level_map = {"low": 0, "medium": 1, "high": 2} visual_score = level_map.get(visual_level, 0) * self.visual_weight physio_score = level_map.get(physio_level, 0) * self.physio_weight vehicle_score = level_map.get(vehicle_level, 0) * self.vehicle_weight total_score = visual_score + physio_score + vehicle_score if total_score > 1.2: fused_level = "high" elif total_score > 0.5: fused_level = "medium" else: fused_level = "low" confidence = (visual_result.get("confidence", 0.5) * self.visual_weight + physio_result.get("confidence", 0.5) * self.physio_weight + vehicle_result.get("confidence", 0.5) * self.vehicle_weight) return { "fatigue_level": fused_level, "confidence": confidence, "visual_contribution": visual_score, "physio_contribution": physio_score, "vehicle_contribution": vehicle_score }
if __name__ == "__main__": fusion = MultimodalFusion() visual_result = {"fatigue_level": "high", "confidence": 0.85} physio_result = {"fatigue_level": "medium", "confidence": 0.75} vehicle_result = {"fatigue_level": "high", "confidence": 0.80} print("=== 多模态融合 ===") fused = fusion.late_fusion(visual_result, physio_result, vehicle_result) print(f"融合疲劳等级: {fused['fatigue_level']}") print(f"置信度: {fused['confidence']:.2f}") print(f"视觉贡献: {fused['visual_contribution']:.2f}") print(f"生理贡献: {fused['physio_contribution']:.2f}") print(f"车辆贡献: {fused['vehicle_contribution']:.2f}")
|