import os from PyQt5.QtWidgets import QMainWindow from PyQt5.QtCore import pyqtSlot, QTimer, QDateTime from PyQt5 import QtGui from core.camera_thread import CameraThread from core.storage_thread import StorageThread from core.api_process import AIProcess from core.update_thread import UpdateThread from ui.ui import Ui_MainWindow class MainWindow(QMainWindow): def __init__(self): super().__init__() self.ui = Ui_MainWindow() self.ui.setupUi(self) self.images_path = "images" self.pic_dict = { "Male": "male.png", "Female": "female.png", "ANGRY": "ANGRY.png", "DISGUST": "DISGUST.png", "FEAR": "FEAR.png", "HAPPY": "HAPPY.png", "NATURAL": "NATURAL.png", "SAD": "SAD.png", "SURPRISED": "SURPRISED.png", "CONFUSED": "CONFUSED.png", "SHY": "SHY.png", } for key in self.pic_dict.keys(): self.pic_dict[key] = os.path.join(self.images_path, self.pic_dict[key]) self.camera_thread = CameraThread() self.storage_thread = StorageThread() self.ai_process = AIProcess() self.update_thread = UpdateThread(self.ai_process) self.camera_thread.new_frame.connect(self.ui.update_image) self.camera_thread.storage_frame.connect(self.storage_thread.store_frame) self.camera_thread.fps_signal.connect(self.ai_process.update_fps) self.storage_thread.frames_ready.connect(self.ai_process.process_frames) self.ai_process.results_ready.connect(self.update_thread.update_ui) self.update_thread.update_ui_signal.connect(self.update_ui) self.camera_thread.start() self.storage_thread.start() self.ai_process.start() self.update_thread.start() # 设置定时器更新时间显示 self.timer = QTimer(self) self.timer.timeout.connect(self.update_time) self.timer.start(1000) # 每秒更新一次 @pyqtSlot(dict) def update_ui(self, results): # print(results) # print("update ui") Resp = results.get('resp', []) if Resp is not None: Resp[0] = self.ui.last_resp for res in Resp: self.ui.resps.put(res) self.ui.last_resp = Resp[-1] Bvp = results.get('bvp', []) if Bvp is not None: Bvp[0] = self.ui.last_bvp for bvp in Bvp: self.ui.bvps.put(bvp) self.ui.last_bvp = Bvp[-1] # 更新UI上的各项指标 self.ui.sbp_value.setText(str(results.get('sbp', '0'))) self.ui.dbp_value.setText(str(results.get('dbp', '0'))) self.ui.hr_value.setText(str(results.get('hr', '0'))) self.ui.cvrr_value.setText(str(results.get('cvrr', '0'))) self.ui.sdnn_value.setText(str(results.get('sdnn', '0'))) self.ui.rmssd_value.setText(str(results.get('rmssd', '0'))) self.ui.emotion_value.setText(results.get('emotion', '0')) self.ui.rr_value.setText(str(results.get('rr', '0'))) self.ui.spo2_value.setText(str(results.get('spo2', '0'))) if results.get('skin_disease', '健康') != '健康': self.ui.skin_diseance_value.setStyleSheet("background:rgb(13, 29, 66);\n" "font-size:18pt;") else: self.ui.skin_diseance_value.setStyleSheet("background:rgb(13, 29, 66);\n" "font-size:28pt;") self.ui.skin_diseance_value.setText(results.get('skin_disease', '健康')) self.ui.skin_ctype_value.setText(results.get('skin_type', '正常皮肤')) self.ui.age_value.setProperty("value", results.get('age', 30)) self.ui.sex_value.setPixmap(QtGui.QPixmap(self.pic_dict.get(results.get('gender', 'Male')))) self.ui.emotion_value.setText(results.get('emotion', 'NATURAL')) self.ui.emotion_icon.setPixmap(QtGui.QPixmap(self.pic_dict.get(results.get('emotion', 'NATURAL')))) def update_time(self): current_time = QDateTime.currentDateTime() time_display = current_time.toString('yyyy年MM月dd日 hh:mm:ss dddd') self.ui.top.setText(time_display) def closeEvent(self, event): self.camera_thread.stop() self.storage_thread.stop() self.ai_process.stop() self.update_thread.stop() super().closeEvent(event)