更新接口

This commit is contained in:
2025-10-18 18:56:02 +08:00
parent cf60d96066
commit 6831a8cd01

67
main.py
View File

@@ -1,7 +1,6 @@
import sys import sys
import os import os
import cv2 import cv2
import time
import numpy as np import numpy as np
from collections import defaultdict, deque from collections import defaultdict, deque
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QPushButton, \ from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QPushButton, \
@@ -488,10 +487,6 @@ class MainWindow(QMainWindow):
self.gate_controller = GateController() self.gate_controller = GateController()
self.whitelist_manager = WhitelistManager() self.whitelist_manager = WhitelistManager()
# 记录车牌首次检测时间和上次发送指令时间
self.plate_first_detected = {} # 记录车牌首次检测时间
self.plate_last_command_time = {} # 记录车牌上次发送指令时间
self.init_ui() self.init_ui()
self.init_detector() self.init_detector()
self.init_camera() self.init_camera()
@@ -501,11 +496,6 @@ class MainWindow(QMainWindow):
# 初始化默认识别方法CRNN的模型 # 初始化默认识别方法CRNN的模型
self.change_recognition_method(self.current_recognition_method) 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): def init_ui(self):
"""初始化用户界面""" """初始化用户界面"""
@@ -1338,30 +1328,6 @@ class MainWindow(QMainWindow):
self.gate_controller.manual_close_gate() self.gate_controller.manual_close_gate()
self.add_log("手动关闸指令已发送") 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): def add_plate_to_whitelist(self):
"""添加车牌到白名单""" """添加车牌到白名单"""
dialog = PlateInputDialog("添加车牌", "") dialog = PlateInputDialog("添加车牌", "")
@@ -1428,36 +1394,9 @@ class MainWindow(QMainWindow):
"""处理道闸控制逻辑""" """处理道闸控制逻辑"""
# 检查车牌是否在白名单中 # 检查车牌是否在白名单中
if self.whitelist_manager.is_whitelisted(plate_number): if self.whitelist_manager.is_whitelisted(plate_number):
current_time = time.time() # 使用GateController的auto_open_gate方法它会自动处理时间差
self.gate_controller.auto_open_gate(plate_number)
# 检查是否在10秒内已发送指令 self.add_log(f"车牌 {plate_number} 验证通过,已发送开闸指令")
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}")
else: else:
# 不在白名单中,发送禁行指令 # 不在白名单中,发送禁行指令
self.gate_controller.deny_access(plate_number) self.gate_controller.deny_access(plate_number)