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
| class MultiTargetCPD: """ 多目标CPD检测 """ def __init__(self, num_seats=5): self.num_seats = num_seats self.detectors = [RadarCPD() for _ in range(num_seats)] def scan_cabin(self, radar_frame): """ 扫描整个座舱 """ results = [] for seat_id in range(self.num_seats): seat_data = self.extract_seat_region(radar_frame, seat_id) vital_signs = self.detectors[seat_id].detect_vital_signs(seat_data) results.append({ 'seat_id': seat_id, 'presence': vital_signs['presence'], 'respiratory_rate': vital_signs['respiratory_rate'], 'heart_rate': vital_signs['heart_rate'], 'is_child': self.classify_child(vital_signs) }) return results def classify_child(self, vital_signs): """ 判断是否为儿童 """ rr = vital_signs['respiratory_rate'] hr = vital_signs['heart_rate'] if rr > 20 and rr < 35 and hr > 80 and hr < 130: return True return False def extract_seat_region(self, radar_frame, seat_id): """ 提取座椅区域的雷达数据 """ seat_regions = { 0: {'range': (0.5, 1.2), 'angle': (-30, -10)}, 1: {'range': (0.5, 1.2), 'angle': (10, 30)}, 2: {'range': (1.0, 1.8), 'angle': (-20, 0)}, 3: {'range': (1.0, 1.8), 'angle': (0, 20)}, 4: {'range': (1.2, 2.0), 'angle': (-10, 10)} } region = seat_regions[seat_id] range_mask = (radar_frame['range'] >= region['range'][0]) & \ (radar_frame['range'] <= region['range'][1]) angle_mask = (radar_frame['angle'] >= region['angle'][0]) & \ (radar_frame['angle'] <= region['angle'][1]) seat_data = radar_frame[range_mask & angle_mask] return seat_data
|