diff --git a/QT5_Project/KD_ZM_8_XCF/APPWindow.py b/QT5_Project/KD_ZM_8_XCF/APPWindow.py
index 803f029..b9612b0 100644
--- a/QT5_Project/KD_ZM_8_XCF/APPWindow.py
+++ b/QT5_Project/KD_ZM_8_XCF/APPWindow.py
@@ -19,7 +19,7 @@ import uart_group_config as group_config
from mqtt_device import class_comm_mqtt_thread, class_comm_mqtt_interface
from print_color import *
from Shared_CODE.get_tip_prop import *
-from QT5_Project.Shared_CODE.DialogFaceVerify import VerifyDialog
+from QT5_Project.Shared_CODE.FaceRecognitionProtocol import *
from QT5_Project.Shared_CODE.DialogFaceEnrollItgSingle import EnrollItgSingleDialog
from QT5_Project.Shared_CODE.DialogFaceUserManage import UserManageDialog, save_user, load_users, save_users_list
@@ -441,18 +441,6 @@ class QFaceCameraViewPage(PageTemplate):
self.current_video_mode = 0
self.current_face_box = 0
-
- #信号绑定
- self.btn_video.clicked.connect(self.toggle_video)
- self.btn_video_mode.clicked.connect(self.toggle_video_mode)
- self.chk_face_box.stateChanged.connect(self.toggle_face_box)
- self.btn_save.clicked.connect(self.save_log)
- self.btn_reset.clicked.connect(lambda: self.send(build_reset()))
- self.btn_enroll.clicked.connect(self.do_enroll_itg_single)
- self.btn_users.clicked.connect(self.do_manage_users)
- # self.btn_verify.clicked.connect(self.do_verify)
-
-
# 定时器:串口监控 & 视频重连
self.t_port = QTimer(self)
self.t_port.setInterval(1000)
@@ -464,6 +452,8 @@ class QFaceCameraViewPage(PageTemplate):
self.t_video.timeout.connect(self._check_video)
self.t_video.start()
+ self.face_verify_result = None # 用于存储人脸验证结果
+
self.auto_connect_serial()
# 串口管理
@@ -535,91 +525,6 @@ class QFaceCameraViewPage(PageTemplate):
except Exception as e:
self.log(f"[ERR] write: {e}")
- # 业务功能
- # def do_verify(self):
- # dlg = VerifyDialog(self)
- # if dlg.exec_() == QDialog.Accepted:
- # pd_val, timeout_val = dlg.values()
- # self.send(build_verify(pd_val, timeout_val))
-
-
- # def do_enroll_itg_single(self):
- # dlg = EnrollItgSingleDialog(self)
- # if dlg.exec_() == QDialog.Accepted:
- # admin_val, uname, face_dir, timeout_val, itg_val = dlg.values()
- # self.last_enroll_name = uname
- # self.send(build_enroll_itg_single(admin_val, uname, face_dir, timeout_val, itg_val))
-
- # def do_manage_users(self):
- # UserManageDialog(self, self.send).exec_()
-
- def toggle_video(self):
- running = self.video_worker and self.video_worker.isRunning()
- if running:
- self.video_worker.stop()
- self.video_worker.wait(300)
- self.video_worker = None
- self.video_label.setText("未打开")
- self.video_label.setPixmap(QPixmap())
- self.btn_video.setText("打开视频")
- self.log("[INFO] 视频已关闭")
- inform_box : DialogInform = DialogInform()
- inform_box.information("提示", "视频已关闭")
- return
-
- if self.video_label.width()<50 or self.video_label.height()<50:
- self.video_label.setMinimumSize(360,480)
-
- self.video_worker = VideoWorker(cam_index=0, target_size=self.video_label.size())
- self.video_worker.pixmap_ready.connect(self.video_label.setPixmap)
- self.video_worker.log_message.connect(self.log)
- self.video_worker.start()
- self.btn_video.setText("关闭视频")
- self.log("[INFO] 正在打开视频")
- inform_box : DialogInform = DialogInform()
- inform_box.information("提示", "正在打开视频")
-
- def toggle_video_mode(self):
- if self.current_video_mode==0:
- self.send_uvc(0)
- self.current_video_mode=1
- self.log("[INFO] 已切换到红外视频模式")
- inform_box : DialogInform = DialogInform()
- inform_box.information("提示", "已切换到红外视频模式")
- else:
- self.send_uvc(1)
- self.current_video_mode=0
- self.log("[INFO] 已切换到彩色视频模式")
- inform_box : DialogInform = DialogInform()
- inform_box.information("提示", "已切换到彩色视频模式")
-
- def toggle_face_box(self, state):
- if state==Qt.Checked:
- self.face_box_enabled=True
- self.send_face_box(1)
- self.log("[INFO] 人脸框已开启")
- inform_box : DialogInform = DialogInform()
- inform_box.information("提示", "人脸框已开启")
- else:
- self.face_box_enabled=False
- self.send_face_box(0)
- self.log("[INFO] 人脸框已关闭")
- inform_box : DialogInform = DialogInform()
- inform_box.information("提示", "人脸框已关闭")
-
- # ---------------- 发送指令 ----------------
- def send_uvc(self, mode):
- if self.ser and getattr(self.ser,"is_open",False):
- self.ser.write(build_uvc_view(mode))
- else:
- self.log("[WARN] 串口未连接,无法切换视频模式")
-
- def send_face_box(self, state):
- if self.ser and getattr(self.ser,"is_open",False):
- self.ser.write(build_face_view(state))
- else:
- self.log("[WARN] 串口未连接,无法控制人脸框")
-
# ---------------- 定时器检测 ----------------
def _check_video(self):
if self.video_worker and not self.video_worker.isRunning():
@@ -644,6 +549,15 @@ class QFaceCameraViewPage(PageTemplate):
self.log(f"[INFO] 用户 {user_name}(ID={user_id}) 已保存")
else:
QMessageBox.warning(self, "提示", f"用户ID {user_id} 已存在!")
+ elif info.get("mid") == CMD_VERIFY :
+
+ if info.get("result") == 0x00:
+ user_id = info.get("user_id")
+ print(f"[INFO] 用户(ID={user_id}) 验证通过")
+ self.face_verify_result = True
+ else:
+ self.face_verify_result = False
+
elif msg_id == MID_NOTE:
info = parse_note(data)
self.log(f"[NOTE] {info}")
@@ -847,17 +761,7 @@ class APPWindow(QMainWindow):
#调试的时候用下面两行,全屏就注释
# self.setGeometry(0, 0, 1024, 768)
# self.stack.setGeometry(0, 0, 1024, 768)
-
- self.ser = None
- self.worker = SerialWorker(lambda: self.ser)
- self.worker.frame_received.connect(self.on_frame)
- self.worker.log_message.connect(self.log)
- self.worker.start()
- self.video_worker = None
- self.last_port = None
- self.last_enroll_name = ""
- self.current_video_mode = 0
- self.current_face_box = 0
+
self.showFullScreen()
@@ -923,32 +827,6 @@ class APPWindow(QMainWindow):
test_init = system_parameter()
set_screen_blanking_time(test_init.get_screen_blanking_time())
-###########################################################################
- def on_frame(self, fr: dict):
- self.log("< " + fr["raw"].hex(" "))
- msg_id = fr.get("msg_id")
- data = fr.get("data", b"")
-
- 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")
- user_name = self.last_enroll_name or ""
- if user_id and 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} 已存在!")
- elif msg_id == MID_NOTE:
- info = parse_note(data)
- self.log(f"[NOTE] {info}")
-
- def log(self, s: str):
- ts = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
- print(f"[{ts}] {s}") # 控制台打印日志
-
-##########################################################################
def search_page_widget(self, page) :
for list_item in self.allpages_list:
diff --git a/QT5_Project/KD_ZM_8_XCF/Light_image/Light_CameraView.png b/QT5_Project/KD_ZM_8_XCF/Light_image/Light_CameraView.png
index 124d069..a2ec6d9 100644
Binary files a/QT5_Project/KD_ZM_8_XCF/Light_image/Light_CameraView.png and b/QT5_Project/KD_ZM_8_XCF/Light_image/Light_CameraView.png differ
diff --git a/QT5_Project/KD_ZM_8_XCF/Light_image/Light_DataView.png b/QT5_Project/KD_ZM_8_XCF/Light_image/Light_DataView.png
index d70d6cf..3b99e1e 100644
Binary files a/QT5_Project/KD_ZM_8_XCF/Light_image/Light_DataView.png and b/QT5_Project/KD_ZM_8_XCF/Light_image/Light_DataView.png differ
diff --git a/QT5_Project/KD_ZM_8_XCF/Light_image/Light_DeviceMenu.png b/QT5_Project/KD_ZM_8_XCF/Light_image/Light_DeviceMenu.png
index 4d63c9b..0d98e32 100644
Binary files a/QT5_Project/KD_ZM_8_XCF/Light_image/Light_DeviceMenu.png and b/QT5_Project/KD_ZM_8_XCF/Light_image/Light_DeviceMenu.png differ
diff --git a/QT5_Project/KD_ZM_8_XCF/Light_image/Light_FieldTestAction.png b/QT5_Project/KD_ZM_8_XCF/Light_image/Light_FieldTestAction.png
index 0ebc77d..24df58e 100644
Binary files a/QT5_Project/KD_ZM_8_XCF/Light_image/Light_FieldTestAction.png and b/QT5_Project/KD_ZM_8_XCF/Light_image/Light_FieldTestAction.png differ
diff --git a/QT5_Project/KD_ZM_8_XCF/Light_image/Light_ParamSet.png b/QT5_Project/KD_ZM_8_XCF/Light_image/Light_ParamSet.png
index 5d8aee0..013a4b2 100644
Binary files a/QT5_Project/KD_ZM_8_XCF/Light_image/Light_ParamSet.png and b/QT5_Project/KD_ZM_8_XCF/Light_image/Light_ParamSet.png differ
diff --git a/QT5_Project/KD_ZM_8_XCF/Light_image/Light_SystemSet.png b/QT5_Project/KD_ZM_8_XCF/Light_image/Light_SystemSet.png
index f04e409..c528f42 100644
Binary files a/QT5_Project/KD_ZM_8_XCF/Light_image/Light_SystemSet.png and b/QT5_Project/KD_ZM_8_XCF/Light_image/Light_SystemSet.png differ
diff --git a/QT5_Project/KD_ZM_8_XCF/Light_image/Ligth_FaultQuery.png b/QT5_Project/KD_ZM_8_XCF/Light_image/Ligth_FaultQuery.png
index d168b56..6c2fd64 100644
Binary files a/QT5_Project/KD_ZM_8_XCF/Light_image/Ligth_FaultQuery.png and b/QT5_Project/KD_ZM_8_XCF/Light_image/Ligth_FaultQuery.png differ
diff --git a/QT5_Project/KD_ZM_8_XCF/Light_image/Ligth_SwitchAction.png b/QT5_Project/KD_ZM_8_XCF/Light_image/Ligth_SwitchAction.png
index 478faa8..4413376 100644
Binary files a/QT5_Project/KD_ZM_8_XCF/Light_image/Ligth_SwitchAction.png and b/QT5_Project/KD_ZM_8_XCF/Light_image/Ligth_SwitchAction.png differ
diff --git a/QT5_Project/KD_ZM_8_XCF/UI/P05_01_FaceCameraView.ui b/QT5_Project/KD_ZM_8_XCF/UI/P05_01_FaceCameraView.ui
index 962a1b6..5508ad7 100644
--- a/QT5_Project/KD_ZM_8_XCF/UI/P05_01_FaceCameraView.ui
+++ b/QT5_Project/KD_ZM_8_XCF/UI/P05_01_FaceCameraView.ui
@@ -171,22 +171,6 @@ color: rgb(170, 0, 0);
Qt::AlignCenter
-
-
-
- 200
- 20
- 80
- 23
-
-
-
- Index=0
-
-
- 打开视频
-
-
@@ -229,28 +213,12 @@ color: rgb(170, 0, 0);
- Index=0, Action=Videomode,SelectImag=IMxx_00F.png
+ Index=0, Action=VideoMode,SelectImag=IMxx_00F.png
视频模式
-
-
-
- 12
- 88
- 85
- 21
-
-
-
-
-
-
- 显示人脸框
-
-
@@ -277,7 +245,7 @@ color: rgb(170, 0, 0);
- Index=0, Action=Enroll,SelectImag=IMxx_00F.png
+ Index=0, Action=EnrollItgSingle,SelectImag=IMxx_00F.png
ITG注册
@@ -303,7 +271,7 @@ color: rgb(170, 0, 0);
0
- 210
+ 310
120
25
@@ -334,6 +302,38 @@ color: rgb(177, 229, 252);
false
+
+
+
+ 10
+ 210
+ 80
+ 23
+
+
+
+ Index=0, Action=ConnectCamera,password,SelectImag=IMxx_00F.png
+
+
+ 打开视频
+
+
+
+
+
+ 10
+ 90
+ 80
+ 23
+
+
+
+ Index=0, Action=FaceBox,SelectImag=IMxx_00F.png
+
+
+ 人脸框
+
+
diff --git a/QT5_Project/KD_ZM_8_XCF/UI/P07SystemSet.ui b/QT5_Project/KD_ZM_8_XCF/UI/P07SystemSet.ui
index 9675463..28b135a 100644
--- a/QT5_Project/KD_ZM_8_XCF/UI/P07SystemSet.ui
+++ b/QT5_Project/KD_ZM_8_XCF/UI/P07SystemSet.ui
@@ -864,47 +864,11 @@ color: rgb(207, 0, 13);
-
-
-
- 880
- 640
- 120
- 25
-
-
-
-
- Arial
- 16
-
-
-
- Qt::NoFocus
-
-
- System=FaceRecogTimeout, Action=ModifySystem, Index=13,SelectImag=P4_ParaSelect.png, password
-
-
- background-color: rgba(85, 170, 127,0);
-color: rgb(177, 229, 252);
-
-
- 0
-
-
- Qt::AlignCenter
-
-
- false
-
-
sys_P00_2
sys_P00_3
BindNum_Title
sys_home
sys_menu
- FaceRecogTimeoutEdit
diff --git a/QT5_Project/KD_ZM_8_XCF/UIFrameWork.py b/QT5_Project/KD_ZM_8_XCF/UIFrameWork.py
index 079bdaa..df991f3 100644
--- a/QT5_Project/KD_ZM_8_XCF/UIFrameWork.py
+++ b/QT5_Project/KD_ZM_8_XCF/UIFrameWork.py
@@ -801,37 +801,125 @@ class UIFrameWork(QMainWindow, class_comm_mqtt_interface):
print("密码认证成功")
elif choice == "face":
- # face_page = self.parent_window.P05_01_FaceCameraView
- input = True
+ # 人脸认证异步处理
+ face_frame = self.parent_window.P05_01_FaceCameraView
+ face_frame.face_verify_result = None # 重置标志位
+ self.do_verify() # 发送 CMD_VERIFY
+ timeout = system_parameter().get_verify_timeout()
+ start_time = time.time()
-
+ # 创建定时器轮询标志位
+ self._face_verify_timer = QTimer(self)
+ self._face_verify_timer.setInterval(50) # 每50ms检查一次
+
+ def check_face_result():
+ nonlocal input
+ if face_frame.face_verify_result is not None:
+ self._face_verify_timer.stop()
+ if face_frame.face_verify_result:
+ input = True
+ inform_box = DialogInform()
+ inform_box.information("提示", "人脸认证成功")
+ self._after_face_verify(select_object, action_str)
+ else:
+ input = False
+ inform_box = DialogInform()
+ inform_box.information("提示", "人脸认证失败")
+ elif time.time() - start_time > timeout:
+ self._face_verify_timer.stop()
+ input = False
+ inform_box = DialogInform()
+ inform_box.information("提示", "人脸认证超时")
+
+ self._face_verify_timer.timeout.connect(check_face_result)
+ self._face_verify_timer.start()
+ return # 异步处理,直接返回
else:
+ # 无认证要求,直接通过
input = True
- if input :
- if "CmdExecute" in action_str :
- mqtt_name = get_tip_mqtt_name(tip_str)
- unique_name = self.get_unique_name_from_object(select_object)
- if mqtt_name != None and unique_name != None:
- if len(mqtt_name) > 0 and self.mqtt_thread != None:
- publish_topic = "request/action/" + unique_name
- publish_message = '{"name" : "%s"}'%(mqtt_name)
- self.mqtt_publish_and_wait_response(publish_topic, publish_message, select_object, 1000)
- elif "ModifySystem" in action_str:
- self.on_system_param_modify(tip_str)
- elif "Modify" in action_str :
- if isinstance(select_object, QLineEdit) :
- self.on_line_edit_modify_click(select_object)
- elif "Users" in action_str :
- self.do_manage_users()
- elif "Verify" in action_str :
- self.do_verify()
- elif "EnrollItgSingle" in action_str :
- self.do_enroll_itg_single()
- elif "Reset" in action_str :
- self.reset_command()
-
- self.virtual_widget_action_process(select_object, action_str)
+
+ # ---------------- 认证成功后执行操作 ----------------
+ if input:
+ if "CmdExecute" in action_str:
+ mqtt_name = get_tip_mqtt_name(tip_str)
+ unique_name = self.get_unique_name_from_object(select_object)
+ if mqtt_name and unique_name and self.mqtt_thread and len(mqtt_name) > 0:
+ publish_topic = "request/action/" + unique_name
+ publish_message = '{"name" : "%s"}' % mqtt_name
+ self.mqtt_publish_and_wait_response(publish_topic, publish_message, select_object, 1000)
+
+ elif "ModifySystem" in action_str:
+ self.on_system_param_modify(tip_str)
+
+ elif "Modify" in action_str and isinstance(select_object, QLineEdit):
+ self.on_line_edit_modify_click(select_object)
+
+ elif "Users" in action_str:
+ self.do_manage_users()
+
+ elif "Verify" in action_str:
+ self.do_verify()
+
+ elif "EnrollItgSingle" in action_str:
+ self.do_enroll_itg_single()
+
+ elif "Reset" in action_str:
+ self.reset_command()
+
+ elif "ConnectCamera" in action_str:
+ self.connectcamera()
+
+ elif "VideoMode" in action_str:
+ self.toggle_video_mode()
+
+ elif "FaceBox" in action_str:
+ self.toggle_face_box()
+
+ self.virtual_widget_action_process(select_object, action_str)
+
+
+ # ------------------ 后续操作回调 ------------------
+ def _after_face_verify(self, select_object, action_str):
+ """
+ 人脸认证成功后调用,继续执行后续动作
+ """
+ if "CmdExecute" in action_str:
+ mqtt_name = get_tip_mqtt_name(select_object.statusTip())
+ unique_name = self.get_unique_name_from_object(select_object)
+ if mqtt_name and unique_name and self.mqtt_thread and len(mqtt_name) > 0:
+ publish_topic = "request/action/" + unique_name
+ publish_message = '{"name" : "%s"}' % mqtt_name
+ self.mqtt_publish_and_wait_response(publish_topic, publish_message, select_object, 1000)
+
+ elif "ModifySystem" in action_str:
+ self.on_system_param_modify(select_object.statusTip())
+
+ elif "Modify" in action_str and isinstance(select_object, QLineEdit):
+ self.on_line_edit_modify_click(select_object)
+
+ elif "Users" in action_str:
+ self.do_manage_users()
+
+ elif "Verify" in action_str:
+ self.do_verify()
+
+ elif "EnrollItgSingle" in action_str:
+ self.do_enroll_itg_single()
+
+ elif "Reset" in action_str:
+ self.reset_command()
+
+ elif "ConnectCamera" in action_str:
+ self.connectcamera()
+
+ elif "VideoMode" in action_str:
+ self.toggle_video_mode()
+
+ elif "FaceBox" in action_str:
+ self.toggle_face_box()
+
+ self.virtual_widget_action_process(select_object, action_str)
def search_menu_match_object(self, object) :
match_object : QWidget = None
@@ -850,6 +938,7 @@ class UIFrameWork(QMainWindow, class_comm_mqtt_interface):
timeout_val = system_parameter().get_verify_timeout()
self.send(build_verify(pd_val, timeout_val))
+
def do_enroll_itg_single(self):
dlg = EnrollItgSingleDialog(self)
if dlg.exec_() == QDialog.Accepted:
@@ -862,6 +951,74 @@ class UIFrameWork(QMainWindow, class_comm_mqtt_interface):
def reset_command(self):
self.send(build_reset())
+
+ def connectcamera(self):
+ running = self.video_worker and self.video_worker.isRunning()
+ if running:
+ self.video_worker.stop()
+ self.video_worker.wait(300)
+ self.video_worker = None
+ self.video_label.setText("未打开")
+ self.video_label.setPixmap(QPixmap())
+ self.btn_video.setText("打开视频")
+ self.log("[INFO] 视频已关闭")
+ inform_box : DialogInform = DialogInform()
+ inform_box.information("提示", "视频已关闭")
+ return
+
+ if self.video_label.width()<50 or self.video_label.height()<50:
+ self.video_label.setMinimumSize(360,480)
+
+ self.video_worker = VideoWorker(cam_index=0, target_size=self.video_label.size())
+ self.video_worker.pixmap_ready.connect(self.video_label.setPixmap)
+ self.video_worker.log_message.connect(self.log)
+ self.video_worker.start()
+ self.btn_video.setText("关闭视频")
+ self.log("[INFO] 正在打开视频")
+ inform_box : DialogInform = DialogInform()
+ inform_box.information("提示", "正在打开视频")
+
+ def toggle_video_mode(self):
+ if self.current_video_mode==0:
+ self.send_uvc(1)
+ self.current_video_mode=1
+ self.log("[INFO] 已切换到红外视频模式")
+ inform_box : DialogInform = DialogInform()
+ inform_box.information("提示", "已切换到红外视频模式")
+ else:
+ self.send_uvc(0)
+ self.current_video_mode=0
+ self.log("[INFO] 已切换到彩色视频模式")
+ inform_box : DialogInform = DialogInform()
+ inform_box.information("提示", "已切换到彩色视频模式")
+
+ def toggle_face_box(self):
+ if self.current_face_box==0:
+ self.send_face_box(1)
+ self.current_face_box=1
+ self.log("[INFO] 人脸框已开启")
+ inform_box : DialogInform = DialogInform()
+ inform_box.information("提示", "人脸框已开启")
+ else:
+ self.send_face_box(0)
+ self.current_face_box=0
+ self.log("[INFO] 人脸框已关闭")
+ inform_box : DialogInform = DialogInform()
+ inform_box.information("提示", "人脸框已关闭")
+
+ # ---------------- 发送指令 ----------------
+ def send_uvc(self, mode):
+ if self.ser and getattr(self.ser,"is_open",False):
+ self.ser.write(build_uvc_view(mode))
+ else:
+ self.log("[WARN] 串口未连接,无法切换视频模式")
+
+ def send_face_box(self, state):
+ if self.ser and getattr(self.ser,"is_open",False):
+ self.ser.write(build_face_view(state))
+ else:
+ self.log("[WARN] 串口未连接,无法控制人脸框")
+
################################################################################
#刷新屏幕上的系统信息, 例如时间日期之类
@@ -1009,10 +1166,8 @@ class UIFrameWork(QMainWindow, class_comm_mqtt_interface):
modify_screen_time_str = dialog_modify_text.value
result = frt.set_verify_timeout(modify_screen_time_str)
- if result is not None:
- self.FaceRecogTimeoutEdit.setText(str(result))
- dialog_inform = DialogInform(self)
- dialog_inform.information("人脸识别超时时间修改", "人脸识别超时时间修改成功")
+ dialog_inform = DialogInform(self)
+ dialog_inform.information("人脸识别超时时间修改", "人脸识别超时时间修改成功")
def on_line_edit_modify_click(self, sender :QLineEdit) :
match_object : QLineEdit = None
diff --git a/QT5_Project/KD_ZM_8_XCF/image/CameraView.png b/QT5_Project/KD_ZM_8_XCF/image/CameraView.png
index 9407354..cde5646 100644
Binary files a/QT5_Project/KD_ZM_8_XCF/image/CameraView.png and b/QT5_Project/KD_ZM_8_XCF/image/CameraView.png differ
diff --git a/QT5_Project/KD_ZM_8_XCF/image/DataView.png b/QT5_Project/KD_ZM_8_XCF/image/DataView.png
index bc1ebd9..7ffc7d8 100644
Binary files a/QT5_Project/KD_ZM_8_XCF/image/DataView.png and b/QT5_Project/KD_ZM_8_XCF/image/DataView.png differ
diff --git a/QT5_Project/KD_ZM_8_XCF/image/DeviceList.png b/QT5_Project/KD_ZM_8_XCF/image/DeviceList.png
index 89192a8..dee3436 100644
Binary files a/QT5_Project/KD_ZM_8_XCF/image/DeviceList.png and b/QT5_Project/KD_ZM_8_XCF/image/DeviceList.png differ
diff --git a/QT5_Project/KD_ZM_8_XCF/image/DeviceMenu.png b/QT5_Project/KD_ZM_8_XCF/image/DeviceMenu.png
index d537525..82d2764 100644
Binary files a/QT5_Project/KD_ZM_8_XCF/image/DeviceMenu.png and b/QT5_Project/KD_ZM_8_XCF/image/DeviceMenu.png differ
diff --git a/QT5_Project/KD_ZM_8_XCF/image/FaultQuery.png b/QT5_Project/KD_ZM_8_XCF/image/FaultQuery.png
index a9736fd..0e76f7e 100644
Binary files a/QT5_Project/KD_ZM_8_XCF/image/FaultQuery.png and b/QT5_Project/KD_ZM_8_XCF/image/FaultQuery.png differ
diff --git a/QT5_Project/KD_ZM_8_XCF/image/FieldTestAction.png b/QT5_Project/KD_ZM_8_XCF/image/FieldTestAction.png
index 37471f8..aeb3186 100644
Binary files a/QT5_Project/KD_ZM_8_XCF/image/FieldTestAction.png and b/QT5_Project/KD_ZM_8_XCF/image/FieldTestAction.png differ
diff --git a/QT5_Project/KD_ZM_8_XCF/image/ParamSet.png b/QT5_Project/KD_ZM_8_XCF/image/ParamSet.png
index 1c40246..223769a 100644
Binary files a/QT5_Project/KD_ZM_8_XCF/image/ParamSet.png and b/QT5_Project/KD_ZM_8_XCF/image/ParamSet.png differ
diff --git a/QT5_Project/KD_ZM_8_XCF/image/SwitchAction.png b/QT5_Project/KD_ZM_8_XCF/image/SwitchAction.png
index ff445cb..ac513eb 100644
Binary files a/QT5_Project/KD_ZM_8_XCF/image/SwitchAction.png and b/QT5_Project/KD_ZM_8_XCF/image/SwitchAction.png differ
diff --git a/QT5_Project/KD_ZM_8_XCF/image/SystemSet.png b/QT5_Project/KD_ZM_8_XCF/image/SystemSet.png
index dc91356..7083021 100644
Binary files a/QT5_Project/KD_ZM_8_XCF/image/SystemSet.png and b/QT5_Project/KD_ZM_8_XCF/image/SystemSet.png differ
diff --git a/QT5_Project/Shared_CODE/FaceRecognitionProtocol.py b/QT5_Project/Shared_CODE/FaceRecognitionProtocol.py
index ba8dbcf..14da4ea 100644
--- a/QT5_Project/Shared_CODE/FaceRecognitionProtocol.py
+++ b/QT5_Project/Shared_CODE/FaceRecognitionProtocol.py
@@ -126,6 +126,11 @@ NOTE_NAMES = {
# 帧头同步字
SYNC = b"\xEF\xAA"
+#########################################################################################
+
+
+#########################################################################################
+
def xor_checksum(data: bytes) -> int:
"""
计算异或校验 (XOR),范围为整个帧的 MsgID + Size + Data 部分,
@@ -366,15 +371,15 @@ def parse_reply(data: bytes) -> dict:
info["user_id"] = uid
# 自动生成提示消息
- if info.get("ok"):
- info["message"] = f"{info['mid_name']} 成功"
- inform_box : DialogInform = DialogInform()
- inform_box.information("提示", f"{info['mid_name']} 成功")
+ if info["ok"]:
+ if mid == CMD_VERIFY and "user_id" in info:
+ info["message"] = (
+ f"{info['mid_name']} 成功 - 用户ID: {info['user_id']}"
+ )
+ else:
+ info["message"] = f"{info['mid_name']} 成功"
else:
info["message"] = f"{info['mid_name']} 失败: {info['result_name']}"
- inform_box : DialogInform = DialogInform()
- inform_box.information("提示", f"{info['mid_name']} 失败: {info['result_name']}")
-
return info
diff --git a/QT5_Project/Shared_UI/users.csv b/QT5_Project/Shared_UI/users.csv
index 2f3e6c3..65407b1 100644
--- a/QT5_Project/Shared_UI/users.csv
+++ b/QT5_Project/Shared_UI/users.csv
@@ -1 +1 @@
-1,1,2025-09-11 16:21:21
+1,1,2025-09-13 10:06:01