更改部分bug加入人脸识别锁机制

This commit is contained in:
冯佳
2025-09-15 11:37:37 +08:00
parent f12a289c57
commit babab70845
6 changed files with 183 additions and 51 deletions

View File

@ -1,7 +1,7 @@
# This Python file uses the following encoding: utf-8
import sys
import time
from PyQt5.QtWidgets import QFileDialog
from PyQt5.QtWidgets import QFileDialog,QHeaderView
from PyQt5.QtWidgets import QApplication, QMainWindow, QStackedWidget, QWidget, QLayout, QLabel, QLineEdit, QPushButton, QMessageBox, QShortcut, QDialog,QTextEdit
from PyQt5 import uic
from PyQt5.QtCore import Qt, QThread, pyqtSignal, QObject, QRunnable, QMutex, QTimer, QEvent
@ -455,8 +455,18 @@ class QFaceCameraViewPage(PageTemplate):
self.face_verify_result = None # 用于存储人脸验证结果
self.auto_connect_serial()
# 串口管理
self.refresh()
header = self.table.horizontalHeader()
# 用户ID列固定宽度
self.table.setColumnWidth(0, 100)
# 用户名列自适应内容
header.setSectionResizeMode(1, QHeaderView.ResizeToContents)
# 注册时间列填充剩余空间
header.setSectionResizeMode(2, QHeaderView.Stretch)
# 串口管理
def auto_connect_serial(self):
ports = [p.device for p in serial.tools.list_ports.comports()]
if not ports:
@ -540,15 +550,15 @@ class QFaceCameraViewPage(PageTemplate):
if msg_id == MID_REPLY:
info = parse_reply(data)
self.log(f"[REPLY] {info}")
if info.get("mid") in (CMD_ENROLL, CMD_ENROLL_ITG) and info.get("result") == 0x00:
user_id = info.get("user_id")
# 如果用户名为空使用用户ID作为用户名
user_name = self.last_enroll_name if self.last_enroll_name else str(user_id)
if user_id: # 只需检查user_id存在即可因为user_name已确保有值
if save_user(user_id, user_name):
self.log(f"[INFO] 用户 {user_name}(ID={user_id}) 已保存")
else:
QMessageBox.warning(self, "提示", f"用户ID {user_id} 已存在!")
if info.get("mid") == CMD_ENROLL_ITG:
if info.get("result") == 0x00:
user_id = info.get("user_id")
if user_id:
if save_user(user_id):
self.log(f"[INFO] 用户ID={user_id} 已保存")
else:
inform_box : DialogInform = DialogInform()
inform_box.information("提示", f"用户ID {user_id} 已存在!")
elif info.get("mid") == CMD_VERIFY :
if info.get("result") == 0x00:
@ -762,7 +772,9 @@ class APPWindow(QMainWindow):
# self.setGeometry(0, 0, 1024, 768)
# self.stack.setGeometry(0, 0, 1024, 768)
QFaceCameraViewPage.video_worker = None
QFaceCameraViewPage.ser = None
self.showFullScreen()
self.menu_sequence_list : PageTemplate = []
@ -875,10 +887,10 @@ class APPWindow(QMainWindow):
for camera_thread in self.camera_thread_list:
thread_to_stop : CameraThread = camera_thread
if self.video_worker and self.video_worker.isRunning():
self.video_worker.stop()
self.video_worker.wait(300)
if self.ser and getattr(self.ser,"is_open",False):
if QFaceCameraViewPage.video_worker and QFaceCameraViewPage.video_worker.isRunning():
QFaceCameraViewPage.video_worker.stop()
QFaceCameraViewPage.video_worker.wait(300)
if QFaceCameraViewPage.ser and getattr(QFaceCameraViewPage.ser,"is_open",False):
self.close_serial()
if thread_to_stop != None :
thread_to_stop.close()