From 180aac9e955ca4390236bac7168cbdb9c18eb10c Mon Sep 17 00:00:00 2001 From: Qinchuanqi <2254943770@qq.com> Date: Mon, 9 Mar 2026 17:53:02 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9A=82=E5=81=9C=E4=BD=BF=E7=94=A8=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E6=88=B3=E8=BF=9B=E8=A1=8C=E4=B8=9A=E5=8A=A1=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- biz/checkpoint/checkpoint_biz.py | 75 +++++++++++++++++--------------- 1 file changed, 39 insertions(+), 36 deletions(-) diff --git a/biz/checkpoint/checkpoint_biz.py b/biz/checkpoint/checkpoint_biz.py index 4228b15..9aeabbc 100644 --- a/biz/checkpoint/checkpoint_biz.py +++ b/biz/checkpoint/checkpoint_biz.py @@ -17,7 +17,7 @@ from utils.logger import get_logger from common.constants import MODEL_ROOT_PATH logger = get_logger(__name__) -DETECT_MODEL_PATH = 'YOLO_Weight/Kadian.onnx' +DETECT_MODEL_PATH = 'D:\Python_Save\PoliceProject\Yolo_Weight\Kadian\Kadian_sanshijiazi.onnx' # 默认相对ROI(与原文件一致) #ROI_RELATIVE = np.array([ @@ -52,7 +52,7 @@ PERSON_CAR_INPUT_SIZE = 640 #POSE_INPUT_SIZE = 640 -RTSP_TARGET_FPS = 10.0 +RTSP_TARGET_FPS = 30.0 # ========================= Kadian TrafficMonitor(精简版,专为服务设计) ========================= class KadianDetector: @@ -240,7 +240,7 @@ class KadianDetector: current_time_sec = timestamp - + print('current_time_sec:', current_time_sec) # ========= 主检测(删除pose检测)========= detections = self.detector(frame) @@ -325,17 +325,17 @@ class KadianDetector: # 车辆注册表初始化 if tid not in self.roi_car_registry: self.roi_car_registry[tid] = { - # 'first_seen': self.current_frame_idx, - # 'last_seen': self.current_frame_idx, - 'first_seen': current_time_sec, - 'last_seen': current_time_sec, + 'first_seen': self.current_frame_idx, + 'last_seen': self.current_frame_idx, + # 'first_seen': current_time_sec, + # 'last_seen': current_time_sec, 'trunk_frames': 0, 'is_checked': False, #'frame_buffer': deque(maxlen=self.max_car_frames), # 新增 } else: - #self.roi_car_registry[tid]['last_seen'] = self.current_frame_idx - self.roi_car_registry[tid]['last_seen'] = current_time_sec + self.roi_car_registry[tid]['last_seen'] = self.current_frame_idx + #self.roi_car_registry[tid]['last_seen'] = current_time_sec label += " IN" elif role == "opentrunk": color = (255, 165, 0) # 橙色 @@ -355,13 +355,14 @@ class KadianDetector: # 警察注册表初始化 if tid not in self.roi_police_registry: self.roi_police_registry[tid] = { - # 'first_seen': self.current_frame_idx, - # 'last_seen': self.current_frame_idx, - 'first_seen': current_time_sec, - 'last_seen': current_time_sec, + 'first_seen': self.current_frame_idx, + 'last_seen': self.current_frame_idx, + #'first_seen': current_time_sec, + #'last_seen': current_time_sec, } else: - self.roi_police_registry[tid]['last_seen'] = current_time_sec + #self.roi_police_registry[tid]['last_seen'] = current_time_sec + self.roi_police_registry[tid]['last_seen'] = self.current_frame_idx label += " IN" else: color = (255, 255, 255) # 白色 @@ -377,7 +378,8 @@ class KadianDetector: # 'frame': frame.copy(), # }) self.frame_buffer_ignore_untrunk.append({ - 'frame_idx': current_time_sec, + #'frame_idx': current_time_sec, + 'frame_idx': self.current_frame_idx, 'frame': frame.copy(), }) @@ -407,8 +409,8 @@ class KadianDetector: for car_id, info in self.roi_car_registry.items(): last_seen = info['last_seen'] - # if (self.current_frame_idx - last_seen) <= self.frame_buffer_limit_car: - if (current_time_sec - last_seen) <= self.frame_buffer_limit_car: + if (self.current_frame_idx - last_seen) <= self.frame_buffer_limit_car: + #if (current_time_sec - last_seen) <= self.frame_buffer_limit_car: active_car_ids.append(car_id) else: cars_to_remove.append(car_id) @@ -419,14 +421,15 @@ class KadianDetector: # 处理离场车辆,生成违规告警 for car_id in cars_to_remove: + car_info = self.roi_car_registry[car_id] duration_frames = car_info['last_seen'] - car_info['first_seen'] # 情况1:通过时间太短 -> Ignore (Too Fast) if duration_frames < self.frame_thresh_car_min_duration: logger.info(f"ALARM: Car {car_id} passed too fast -> Regarded as Ignore Checked!") - #self.fast_pass_alerts[car_id] = self.current_frame_idx + int(self.ignore_show_seconds * self.fps) - self.fast_pass_alerts[car_id] = current_time_sec + int(self.ignore_show_seconds * self.fps) + self.fast_pass_alerts[car_id] = self.current_frame_idx + int(self.ignore_show_seconds * self.fps) + #self.fast_pass_alerts[car_id] = current_time_sec + int(self.ignore_show_seconds * self.fps) target_time_sec = car_info['last_seen'] - self.ignored_rollback_time ignored_trunk_frame = self.find_target_frame(target_time_sec) @@ -436,8 +439,8 @@ class KadianDetector: # 情况2:时间够长,但没检查后备箱 -> Unchecked Trunk elif not car_info['is_checked']: logger.info(f"ALARM: Car {car_id} left without checking trunk!") - #self.unchecked_trunk_alerts[car_id] = self.current_frame_idx + int(self.openTrunk_show_seconds * self.fps) - self.unchecked_trunk_alerts[car_id] = current_time_sec + int(self.openTrunk_show_seconds * self.fps) + self.unchecked_trunk_alerts[car_id] = self.current_frame_idx + int(self.openTrunk_show_seconds * self.fps) + #self.unchecked_trunk_alerts[car_id] = current_time_sec + int(self.openTrunk_show_seconds * self.fps) target_time_sec = car_info['last_seen'] - self.untrunk_rollback_time unchecked_trunk_frame = self.find_target_frame(target_time_sec) @@ -456,8 +459,8 @@ class KadianDetector: for police_id, info in self.roi_police_registry.items(): last_seen = info['last_seen'] - #if (self.current_frame_idx - last_seen) <= self.frame_buffer_limit_police: - if (current_time_sec - last_seen) <= self.frame_buffer_limit_police: + if (self.current_frame_idx - last_seen) <= self.frame_buffer_limit_police: + #if (current_time_sec - last_seen) <= self.frame_buffer_limit_police: active_police_ids.append(police_id) else: polices_to_remove.append(police_id) @@ -489,8 +492,8 @@ class KadianDetector: # break # 只显示一次 # B. 显示 Unchecked Trunk (离场未检查后备箱) - #expired_alerts = [cid for cid, end_frame in self.unchecked_trunk_alerts.items() if self.current_frame_idx > end_frame] - expired_alerts = [cid for cid, end_frame in self.unchecked_trunk_alerts.items() if current_time_sec > end_frame] + expired_alerts = [cid for cid, end_frame in self.unchecked_trunk_alerts.items() if self.current_frame_idx > end_frame] + #expired_alerts = [cid for cid, end_frame in self.unchecked_trunk_alerts.items() if current_time_sec > end_frame] for cid in expired_alerts: @@ -507,8 +510,8 @@ class KadianDetector: alert_offset += 100 # C. 显示 Ignore (通过过快) - #expired_fast_alerts = [cid for cid, end_frame in self.fast_pass_alerts.items() if self.current_frame_idx > end_frame] - expired_fast_alerts = [cid for cid, end_frame in self.fast_pass_alerts.items() if current_time_sec > end_frame] + expired_fast_alerts = [cid for cid, end_frame in self.fast_pass_alerts.items() if self.current_frame_idx > end_frame] + #expired_fast_alerts = [cid for cid, end_frame in self.fast_pass_alerts.items() if current_time_sec > end_frame] for cid in expired_fast_alerts: @@ -521,22 +524,22 @@ class KadianDetector: 'action': "Ignore", 'image': ignored_trunk_frame }) - #self.draw_alert(frame, alert_text, (0, 0, 255), offset_y=alert_offset) + self.draw_alert(frame, alert_text, (0, 0, 255), offset_y=alert_offset) alert_offset += 100 # D. 显示警察在场状态 (Nobody/Only One) # 清理过期的 Nobody 告警 - #expired_nobody = [k for k, v in self.nobody_alerts.items() if self.current_frame_idx > v] - expired_nobody = [k for k, v in self.nobody_alerts.items() if current_time_sec > v] + expired_nobody = [k for k, v in self.nobody_alerts.items() if self.current_frame_idx > v] + #expired_nobody = [k for k, v in self.nobody_alerts.items() if current_time_sec > v] for k in expired_nobody: del self.nobody_alerts[k] # 清理过期的 Only One 告警 - # expired_only_one = [k for k, v in self.only_one_alerts.items() if self.current_frame_idx > v] - expired_only_one = [k for k, v in self.only_one_alerts.items() if current_time_sec > v] + expired_only_one = [k for k, v in self.only_one_alerts.items() if self.current_frame_idx > v] + # expired_only_one = [k for k, v in self.only_one_alerts.items() if current_time_sec > v] for k in expired_only_one: del self.only_one_alerts[k] @@ -559,8 +562,8 @@ class KadianDetector: if effective_police_count == 0 and self.nobody_frames >= self.frame_thresh_nobody: alert_text = "Nobody" if "Nobody" not in self.nobody_alerts: - # self.nobody_alerts["Nobody"] = self.current_frame_idx + int(self.police_show_seconds * self.fps) - self.nobody_alerts["Nobody"] = current_time_sec + int(self.police_show_seconds * self.fps) + self.nobody_alerts["Nobody"] = self.current_frame_idx + int(self.police_show_seconds * self.fps) + # self.nobody_alerts["Nobody"] = current_time_sec + int(self.police_show_seconds * self.fps) current_frame_alerts.append({ 'time': current_time_sec, 'action': "Nobody", @@ -570,8 +573,8 @@ class KadianDetector: elif effective_police_count == 1 and self.only_one_frames >= self.frame_thresh_only_one: alert_text = "Only One" if "Only One" not in self.only_one_alerts: - # self.only_one_alerts["Only One"] = self.current_frame_idx + int(self.police_show_seconds * self.fps) - self.only_one_alerts["Only One"] = current_time_sec + int(self.police_show_seconds * self.fps) + self.only_one_alerts["Only One"] = self.current_frame_idx + int(self.police_show_seconds * self.fps) + # self.only_one_alerts["Only One"] = current_time_sec + int(self.police_show_seconds * self.fps) current_frame_alerts.append({ 'time': current_time_sec, 'action': "Only One",