diff --git a/main.py b/main.py index 1616a99..b9b8f21 100644 --- a/main.py +++ b/main.py @@ -1,7 +1,6 @@ import sys import os import cv2 -import time import numpy as np from collections import defaultdict, deque from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QPushButton, \ @@ -488,10 +487,6 @@ class MainWindow(QMainWindow): self.gate_controller = GateController() self.whitelist_manager = WhitelistManager() - # 记录车牌首次检测时间和上次发送指令时间 - self.plate_first_detected = {} # 记录车牌首次检测时间 - self.plate_last_command_time = {} # 记录车牌上次发送指令时间 - self.init_ui() self.init_detector() self.init_camera() @@ -500,11 +495,6 @@ class MainWindow(QMainWindow): # 初始化默认识别方法(CRNN)的模型 self.change_recognition_method(self.current_recognition_method) - - # 设置定时器,每30秒清理一次过期的车牌记录 - self.cleanup_timer = QTimer(self) - self.cleanup_timer.timeout.connect(self.cleanup_plate_records) - self.cleanup_timer.start(30000) # 30秒 def init_ui(self): @@ -1338,30 +1328,6 @@ class MainWindow(QMainWindow): self.gate_controller.manual_close_gate() self.add_log("手动关闸指令已发送") - def cleanup_plate_records(self): - """清理过期的车牌记录""" - current_time = time.time() - - # 清理超过30秒的首次检测记录 - expired_plates = [] - for plate, first_time in self.plate_first_detected.items(): - if current_time - first_time > 30: - expired_plates.append(plate) - - for plate in expired_plates: - del self.plate_first_detected[plate] - self.add_log(f"清理过期的首次检测记录: {plate}") - - # 清理超过1小时的指令发送记录 - expired_commands = [] - for plate, last_time in self.plate_last_command_time.items(): - if current_time - last_time > 3600: - expired_commands.append(plate) - - for plate in expired_commands: - del self.plate_last_command_time[plate] - self.add_log(f"清理过期的指令记录: {plate}") - def add_plate_to_whitelist(self): """添加车牌到白名单""" dialog = PlateInputDialog("添加车牌", "") @@ -1428,36 +1394,9 @@ class MainWindow(QMainWindow): """处理道闸控制逻辑""" # 检查车牌是否在白名单中 if self.whitelist_manager.is_whitelisted(plate_number): - current_time = time.time() - - # 检查是否在10秒内已发送过指令 - if plate_number in self.plate_last_command_time: - time_since_last_command = current_time - self.plate_last_command_time[plate_number] - if time_since_last_command < 10: # 10秒内不再发送指令 - self.add_log(f"车牌 {plate_number} 在10秒内已发送过指令,跳过") - return - - # 记录车牌首次检测时间 - if plate_number not in self.plate_first_detected: - self.plate_first_detected[plate_number] = current_time - self.add_log(f"车牌 {plate_number} 首次检测,等待2秒稳定确认") - return - - # 检查是否已稳定2秒 - time_since_first_detected = current_time - self.plate_first_detected[plate_number] - if time_since_first_detected >= 2: # 稳定2秒后发送指令 - # 使用GateController的auto_open_gate方法,它会自动处理时间差 - self.gate_controller.auto_open_gate(plate_number) - self.add_log(f"车牌 {plate_number} 验证通过,已发送开闸指令") - - # 更新上次发送指令时间 - self.plate_last_command_time[plate_number] = current_time - # 清除首次检测时间,以便下次重新检测 - if plate_number in self.plate_first_detected: - del self.plate_first_detected[plate_number] - else: - # 还未稳定2秒,继续等待 - self.add_log(f"车牌 {plate_number} 检测中,已等待 {time_since_first_detected:.1f} 秒") + # 使用GateController的auto_open_gate方法,它会自动处理时间差 + self.gate_controller.auto_open_gate(plate_number) + self.add_log(f"车牌 {plate_number} 验证通过,已发送开闸指令") else: # 不在白名单中,发送禁行指令 self.gate_controller.deny_access(plate_number)