From f5386bb0b3a49697e64fa85270e42c930401ac64 Mon Sep 17 00:00:00 2001
From: Yorusora <2944763079@qq.com>
Date: Thu, 9 Jan 2025 13:59:03 +0800
Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4=E4=BA=86=E6=89=80=E6=9C=89?=
=?UTF-8?q?=E4=BD=BF=E7=94=A8PSG=5Flabel=E7=9A=84=E6=93=8D=E4=BD=9C?=
=?UTF-8?q?=EF=BC=8C=E6=89=80=E6=9C=89=E6=A0=87=E7=AD=BE=E5=B0=86=E4=BB=85?=
=?UTF-8?q?=E4=BD=BF=E7=94=A8BCG=5Flabel=E8=BF=9B=E8=A1=8C=E6=93=8D?=
=?UTF-8?q?=E4=BD=9C=E3=80=82PSG=5Flabel=5F2=5FBCG=5Flabel=E5=9C=A8?=
=?UTF-8?q?=E4=B9=8B=E5=90=8E=E5=8F=AF=E6=95=B4=E5=90=88=E5=88=B0=E4=B8=BB?=
=?UTF-8?q?=E7=A8=8B=E5=BA=8F=E4=B8=AD=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
MainWindow.py | 334 ++++++++++++------------
MainWindow.ui | 504 +++++++++++++++++-------------------
Main_Quality_Relabel_GUI.py | 177 +++----------
PSG_label_2_BCG_label.py | 48 ++++
4 files changed, 483 insertions(+), 580 deletions(-)
create mode 100644 PSG_label_2_BCG_label.py
diff --git a/MainWindow.py b/MainWindow.py
index 68053cc..117eab9 100644
--- a/MainWindow.py
+++ b/MainWindow.py
@@ -255,80 +255,6 @@ class Ui_MainWindow(object):
self.groupBox_4.setObjectName("groupBox_4")
self.gridLayout_2 = QtWidgets.QGridLayout(self.groupBox_4)
self.gridLayout_2.setObjectName("gridLayout_2")
- self.lineEdit_remark = QtWidgets.QLineEdit(self.groupBox_4)
- sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.lineEdit_remark.sizePolicy().hasHeightForWidth())
- self.lineEdit_remark.setSizePolicy(sizePolicy)
- font = QtGui.QFont()
- font.setFamily("Times New Roman")
- font.setPointSize(14)
- self.lineEdit_remark.setFont(font)
- self.lineEdit_remark.setObjectName("lineEdit_remark")
- self.gridLayout_2.addWidget(self.lineEdit_remark, 5, 2, 1, 3)
- self.pushButton_left = QtWidgets.QPushButton(self.groupBox_4)
- sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.pushButton_left.sizePolicy().hasHeightForWidth())
- self.pushButton_left.setSizePolicy(sizePolicy)
- font = QtGui.QFont()
- font.setFamily("Times New Roman")
- font.setPointSize(14)
- self.pushButton_left.setFont(font)
- self.pushButton_left.setObjectName("pushButton_left")
- self.gridLayout_2.addWidget(self.pushButton_left, 15, 0, 1, 1)
- self.lineEdit_correctStart = QtWidgets.QLineEdit(self.groupBox_4)
- sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.lineEdit_correctStart.sizePolicy().hasHeightForWidth())
- self.lineEdit_correctStart.setSizePolicy(sizePolicy)
- font = QtGui.QFont()
- font.setFamily("Times New Roman")
- font.setPointSize(14)
- self.lineEdit_correctStart.setFont(font)
- self.lineEdit_correctStart.setObjectName("lineEdit_correctStart")
- self.gridLayout_2.addWidget(self.lineEdit_correctStart, 7, 2, 1, 3)
- self.label_correctStart = QtWidgets.QLabel(self.groupBox_4)
- sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.label_correctStart.sizePolicy().hasHeightForWidth())
- self.label_correctStart.setSizePolicy(sizePolicy)
- font = QtGui.QFont()
- font.setFamily("Times New Roman")
- font.setPointSize(14)
- self.label_correctStart.setFont(font)
- self.label_correctStart.setObjectName("label_correctStart")
- self.gridLayout_2.addWidget(self.label_correctStart, 7, 0, 1, 1)
- self.checkBox_examineLabeled = QtWidgets.QCheckBox(self.groupBox_4)
- font = QtGui.QFont()
- font.setFamily("Times New Roman")
- font.setPointSize(14)
- self.checkBox_examineLabeled.setFont(font)
- self.checkBox_examineLabeled.setObjectName("checkBox_examineLabeled")
- self.gridLayout_2.addWidget(self.checkBox_examineLabeled, 0, 0, 1, 4)
- self.label_quick_remark_input = QtWidgets.QLabel(self.groupBox_4)
- font = QtGui.QFont()
- font.setFamily("Times New Roman")
- font.setPointSize(14)
- self.label_quick_remark_input.setFont(font)
- self.label_quick_remark_input.setObjectName("label_quick_remark_input")
- self.gridLayout_2.addWidget(self.label_quick_remark_input, 6, 0, 1, 1)
- self.lineEdit_correctEnd = QtWidgets.QLineEdit(self.groupBox_4)
- sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.lineEdit_correctEnd.sizePolicy().hasHeightForWidth())
- self.lineEdit_correctEnd.setSizePolicy(sizePolicy)
- font = QtGui.QFont()
- font.setFamily("Times New Roman")
- font.setPointSize(14)
- self.lineEdit_correctEnd.setFont(font)
- self.lineEdit_correctEnd.setObjectName("lineEdit_correctEnd")
- self.gridLayout_2.addWidget(self.lineEdit_correctEnd, 9, 2, 1, 3)
self.label_correctEnd = QtWidgets.QLabel(self.groupBox_4)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
@@ -340,7 +266,84 @@ class Ui_MainWindow(object):
font.setPointSize(14)
self.label_correctEnd.setFont(font)
self.label_correctEnd.setObjectName("label_correctEnd")
- self.gridLayout_2.addWidget(self.label_correctEnd, 9, 0, 1, 1)
+ self.gridLayout_2.addWidget(self.label_correctEnd, 8, 0, 1, 1)
+ self.lineEdit_correctEnd = QtWidgets.QLineEdit(self.groupBox_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.lineEdit_correctEnd.sizePolicy().hasHeightForWidth())
+ self.lineEdit_correctEnd.setSizePolicy(sizePolicy)
+ font = QtGui.QFont()
+ font.setFamily("Times New Roman")
+ font.setPointSize(14)
+ self.lineEdit_correctEnd.setFont(font)
+ self.lineEdit_correctEnd.setObjectName("lineEdit_correctEnd")
+ self.gridLayout_2.addWidget(self.lineEdit_correctEnd, 8, 2, 1, 3)
+ self.horizontalLayout_12 = QtWidgets.QHBoxLayout()
+ self.horizontalLayout_12.setObjectName("horizontalLayout_12")
+ self.label_score = QtWidgets.QLabel(self.groupBox_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.label_score.sizePolicy().hasHeightForWidth())
+ self.label_score.setSizePolicy(sizePolicy)
+ font = QtGui.QFont()
+ font.setFamily("Times New Roman")
+ font.setPointSize(14)
+ self.label_score.setFont(font)
+ self.label_score.setObjectName("label_score")
+ self.horizontalLayout_12.addWidget(self.label_score)
+ self.radioButton_1_class = QtWidgets.QRadioButton(self.groupBox_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.radioButton_1_class.sizePolicy().hasHeightForWidth())
+ self.radioButton_1_class.setSizePolicy(sizePolicy)
+ font = QtGui.QFont()
+ font.setFamily("Times New Roman")
+ font.setPointSize(14)
+ self.radioButton_1_class.setFont(font)
+ self.radioButton_1_class.setObjectName("radioButton_1_class")
+ self.horizontalLayout_12.addWidget(self.radioButton_1_class)
+ self.radioButton_2_class = QtWidgets.QRadioButton(self.groupBox_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.radioButton_2_class.sizePolicy().hasHeightForWidth())
+ self.radioButton_2_class.setSizePolicy(sizePolicy)
+ font = QtGui.QFont()
+ font.setFamily("Times New Roman")
+ font.setPointSize(14)
+ self.radioButton_2_class.setFont(font)
+ self.radioButton_2_class.setObjectName("radioButton_2_class")
+ self.horizontalLayout_12.addWidget(self.radioButton_2_class)
+ self.radioButton_3_class = QtWidgets.QRadioButton(self.groupBox_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.radioButton_3_class.sizePolicy().hasHeightForWidth())
+ self.radioButton_3_class.setSizePolicy(sizePolicy)
+ font = QtGui.QFont()
+ font.setFamily("Times New Roman")
+ font.setPointSize(14)
+ self.radioButton_3_class.setFont(font)
+ self.radioButton_3_class.setObjectName("radioButton_3_class")
+ self.horizontalLayout_12.addWidget(self.radioButton_3_class)
+ self.gridLayout_2.addLayout(self.horizontalLayout_12, 3, 0, 1, 5)
+ spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
+ self.gridLayout_2.addItem(spacerItem3, 14, 1, 1, 1)
+ self.lineEdit_correctStart = QtWidgets.QLineEdit(self.groupBox_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.lineEdit_correctStart.sizePolicy().hasHeightForWidth())
+ self.lineEdit_correctStart.setSizePolicy(sizePolicy)
+ font = QtGui.QFont()
+ font.setFamily("Times New Roman")
+ font.setPointSize(14)
+ self.lineEdit_correctStart.setFont(font)
+ self.lineEdit_correctStart.setObjectName("lineEdit_correctStart")
+ self.gridLayout_2.addWidget(self.lineEdit_correctStart, 6, 2, 1, 3)
self.label_BCG_event = QtWidgets.QLabel(self.groupBox_4)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
@@ -356,14 +359,47 @@ class Ui_MainWindow(object):
self.label_BCG_event.setText("")
self.label_BCG_event.setAlignment(QtCore.Qt.AlignCenter)
self.label_BCG_event.setObjectName("label_BCG_event")
- self.gridLayout_2.addWidget(self.label_BCG_event, 2, 0, 1, 5)
+ self.gridLayout_2.addWidget(self.label_BCG_event, 1, 0, 1, 5)
self.pushButton_quick_remark_input_waitingForTalk = QtWidgets.QPushButton(self.groupBox_4)
font = QtGui.QFont()
font.setFamily("Times New Roman")
font.setPointSize(14)
self.pushButton_quick_remark_input_waitingForTalk.setFont(font)
self.pushButton_quick_remark_input_waitingForTalk.setObjectName("pushButton_quick_remark_input_waitingForTalk")
- self.gridLayout_2.addWidget(self.pushButton_quick_remark_input_waitingForTalk, 6, 2, 1, 3)
+ self.gridLayout_2.addWidget(self.pushButton_quick_remark_input_waitingForTalk, 5, 2, 1, 3)
+ self.pushButton_right = QtWidgets.QPushButton(self.groupBox_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.pushButton_right.sizePolicy().hasHeightForWidth())
+ self.pushButton_right.setSizePolicy(sizePolicy)
+ font = QtGui.QFont()
+ font.setFamily("Times New Roman")
+ font.setPointSize(14)
+ self.pushButton_right.setFont(font)
+ self.pushButton_right.setObjectName("pushButton_right")
+ self.gridLayout_2.addWidget(self.pushButton_right, 15, 0, 1, 1)
+ spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
+ self.gridLayout_2.addItem(spacerItem4, 15, 1, 1, 1)
+ self.label_remark = QtWidgets.QLabel(self.groupBox_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.label_remark.sizePolicy().hasHeightForWidth())
+ self.label_remark.setSizePolicy(sizePolicy)
+ font = QtGui.QFont()
+ font.setFamily("Times New Roman")
+ font.setPointSize(14)
+ self.label_remark.setFont(font)
+ self.label_remark.setObjectName("label_remark")
+ self.gridLayout_2.addWidget(self.label_remark, 4, 0, 1, 1)
+ self.label_quick_remark_input = QtWidgets.QLabel(self.groupBox_4)
+ font = QtGui.QFont()
+ font.setFamily("Times New Roman")
+ font.setPointSize(14)
+ self.label_quick_remark_input.setFont(font)
+ self.label_quick_remark_input.setObjectName("label_quick_remark_input")
+ self.gridLayout_2.addWidget(self.label_quick_remark_input, 5, 0, 1, 1)
self.horizontalLayout_radioButton = QtWidgets.QHBoxLayout()
self.horizontalLayout_radioButton.setObjectName("horizontalLayout_radioButton")
self.label_events = QtWidgets.QLabel(self.groupBox_4)
@@ -426,98 +462,38 @@ class Ui_MainWindow(object):
self.radioButton_HPY.setFont(font)
self.radioButton_HPY.setObjectName("radioButton_HPY")
self.horizontalLayout_radioButton.addWidget(self.radioButton_HPY)
- self.gridLayout_2.addLayout(self.horizontalLayout_radioButton, 3, 0, 1, 5)
- self.label_PSG_event = QtWidgets.QLabel(self.groupBox_4)
- sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred)
+ self.gridLayout_2.addLayout(self.horizontalLayout_radioButton, 2, 0, 1, 5)
+ self.lineEdit_remark = QtWidgets.QLineEdit(self.groupBox_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.label_PSG_event.sizePolicy().hasHeightForWidth())
- self.label_PSG_event.setSizePolicy(sizePolicy)
- font = QtGui.QFont()
- font.setFamily("Times New Roman")
- font.setPointSize(12)
- font.setBold(False)
- font.setWeight(50)
- self.label_PSG_event.setFont(font)
- self.label_PSG_event.setText("")
- self.label_PSG_event.setAlignment(QtCore.Qt.AlignCenter)
- self.label_PSG_event.setObjectName("label_PSG_event")
- self.gridLayout_2.addWidget(self.label_PSG_event, 1, 0, 1, 5)
- self.label_remark = QtWidgets.QLabel(self.groupBox_4)
- sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.label_remark.sizePolicy().hasHeightForWidth())
- self.label_remark.setSizePolicy(sizePolicy)
+ sizePolicy.setHeightForWidth(self.lineEdit_remark.sizePolicy().hasHeightForWidth())
+ self.lineEdit_remark.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setFamily("Times New Roman")
font.setPointSize(14)
- self.label_remark.setFont(font)
- self.label_remark.setObjectName("label_remark")
- self.gridLayout_2.addWidget(self.label_remark, 5, 0, 1, 1)
- self.pushButton_right = QtWidgets.QPushButton(self.groupBox_4)
+ self.lineEdit_remark.setFont(font)
+ self.lineEdit_remark.setObjectName("lineEdit_remark")
+ self.gridLayout_2.addWidget(self.lineEdit_remark, 4, 2, 1, 3)
+ self.pushButton_left = QtWidgets.QPushButton(self.groupBox_4)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.pushButton_right.sizePolicy().hasHeightForWidth())
- self.pushButton_right.setSizePolicy(sizePolicy)
+ sizePolicy.setHeightForWidth(self.pushButton_left.sizePolicy().hasHeightForWidth())
+ self.pushButton_left.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setFamily("Times New Roman")
font.setPointSize(14)
- self.pushButton_right.setFont(font)
- self.pushButton_right.setObjectName("pushButton_right")
- self.gridLayout_2.addWidget(self.pushButton_right, 16, 0, 1, 1)
- self.horizontalLayout_12 = QtWidgets.QHBoxLayout()
- self.horizontalLayout_12.setObjectName("horizontalLayout_12")
- self.label_score = QtWidgets.QLabel(self.groupBox_4)
- sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.label_score.sizePolicy().hasHeightForWidth())
- self.label_score.setSizePolicy(sizePolicy)
+ self.pushButton_left.setFont(font)
+ self.pushButton_left.setObjectName("pushButton_left")
+ self.gridLayout_2.addWidget(self.pushButton_left, 14, 0, 1, 1)
+ self.checkBox_examineLabeled = QtWidgets.QCheckBox(self.groupBox_4)
font = QtGui.QFont()
font.setFamily("Times New Roman")
font.setPointSize(14)
- self.label_score.setFont(font)
- self.label_score.setObjectName("label_score")
- self.horizontalLayout_12.addWidget(self.label_score)
- self.radioButton_1_class = QtWidgets.QRadioButton(self.groupBox_4)
- sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.radioButton_1_class.sizePolicy().hasHeightForWidth())
- self.radioButton_1_class.setSizePolicy(sizePolicy)
- font = QtGui.QFont()
- font.setFamily("Times New Roman")
- font.setPointSize(14)
- self.radioButton_1_class.setFont(font)
- self.radioButton_1_class.setObjectName("radioButton_1_class")
- self.horizontalLayout_12.addWidget(self.radioButton_1_class)
- self.radioButton_2_class = QtWidgets.QRadioButton(self.groupBox_4)
- sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.radioButton_2_class.sizePolicy().hasHeightForWidth())
- self.radioButton_2_class.setSizePolicy(sizePolicy)
- font = QtGui.QFont()
- font.setFamily("Times New Roman")
- font.setPointSize(14)
- self.radioButton_2_class.setFont(font)
- self.radioButton_2_class.setObjectName("radioButton_2_class")
- self.horizontalLayout_12.addWidget(self.radioButton_2_class)
- self.radioButton_3_class = QtWidgets.QRadioButton(self.groupBox_4)
- sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.radioButton_3_class.sizePolicy().hasHeightForWidth())
- self.radioButton_3_class.setSizePolicy(sizePolicy)
- font = QtGui.QFont()
- font.setFamily("Times New Roman")
- font.setPointSize(14)
- self.radioButton_3_class.setFont(font)
- self.radioButton_3_class.setObjectName("radioButton_3_class")
- self.horizontalLayout_12.addWidget(self.radioButton_3_class)
- self.gridLayout_2.addLayout(self.horizontalLayout_12, 4, 0, 1, 5)
+ self.checkBox_examineLabeled.setFont(font)
+ self.checkBox_examineLabeled.setObjectName("checkBox_examineLabeled")
+ self.gridLayout_2.addWidget(self.checkBox_examineLabeled, 0, 0, 1, 4)
self.pushButton_confirmLabel = QtWidgets.QPushButton(self.groupBox_4)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
@@ -529,11 +505,19 @@ class Ui_MainWindow(object):
font.setPointSize(14)
self.pushButton_confirmLabel.setFont(font)
self.pushButton_confirmLabel.setObjectName("pushButton_confirmLabel")
- self.gridLayout_2.addWidget(self.pushButton_confirmLabel, 15, 2, 2, 3)
- spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
- self.gridLayout_2.addItem(spacerItem3, 16, 1, 1, 1)
- spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
- self.gridLayout_2.addItem(spacerItem4, 15, 1, 1, 1)
+ self.gridLayout_2.addWidget(self.pushButton_confirmLabel, 14, 2, 2, 3)
+ self.label_correctStart = QtWidgets.QLabel(self.groupBox_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.label_correctStart.sizePolicy().hasHeightForWidth())
+ self.label_correctStart.setSizePolicy(sizePolicy)
+ font = QtGui.QFont()
+ font.setFamily("Times New Roman")
+ font.setPointSize(14)
+ self.label_correctStart.setFont(font)
+ self.label_correctStart.setObjectName("label_correctStart")
+ self.gridLayout_2.addWidget(self.label_correctStart, 6, 0, 1, 1)
self.verticalLayout_left.addWidget(self.groupBox_4)
spacerItem5 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_left.addItem(spacerItem5)
@@ -739,14 +723,20 @@ class Ui_MainWindow(object):
self.lineEdit_back_add_second.setText(_translate("MainWindow", "60"))
self.lineEdit_back_add_second.setPlaceholderText(_translate("MainWindow", "信号显示事件后多少秒"))
self.groupBox_4.setTitle(_translate("MainWindow", "打标操作"))
- self.pushButton_left.setText(_translate("MainWindow", "上一个事件(A)"))
- self.pushButton_left.setShortcut(_translate("MainWindow", "A"))
- self.label_correctStart.setText(_translate("MainWindow", "修正后起始时间(s)"))
- self.checkBox_examineLabeled.setText(_translate("MainWindow", "仅检查未确定打标参数的事件"))
- self.label_quick_remark_input.setText(_translate("MainWindow", "快速备注输入"))
self.label_correctEnd.setText(_translate("MainWindow", "修正后终止时间(s)"))
+ self.label_score.setText(_translate("MainWindow", "标签类型"))
+ self.radioButton_1_class.setText(_translate("MainWindow", "一类(U)"))
+ self.radioButton_1_class.setShortcut(_translate("MainWindow", "U"))
+ self.radioButton_2_class.setText(_translate("MainWindow", "二类(I)"))
+ self.radioButton_2_class.setShortcut(_translate("MainWindow", "I"))
+ self.radioButton_3_class.setText(_translate("MainWindow", "删除(O)"))
+ self.radioButton_3_class.setShortcut(_translate("MainWindow", "O"))
self.pushButton_quick_remark_input_waitingForTalk.setText(_translate("MainWindow", "待讨论(J)"))
self.pushButton_quick_remark_input_waitingForTalk.setShortcut(_translate("MainWindow", "J"))
+ self.pushButton_right.setText(_translate("MainWindow", "下一个事件(D)"))
+ self.pushButton_right.setShortcut(_translate("MainWindow", "D"))
+ self.label_remark.setText(_translate("MainWindow", "备注"))
+ self.label_quick_remark_input.setText(_translate("MainWindow", "快速备注输入"))
self.label_events.setText(_translate("MainWindow", "事件类型"))
self.radioButton_OSA.setText(_translate("MainWindow", "OSA"))
self.radioButton_OSA.setShortcut(_translate("MainWindow", "1"))
@@ -756,17 +746,11 @@ class Ui_MainWindow(object):
self.radioButton_MSA.setShortcut(_translate("MainWindow", "3"))
self.radioButton_HPY.setText(_translate("MainWindow", "HPY"))
self.radioButton_HPY.setShortcut(_translate("MainWindow", "4"))
- self.label_remark.setText(_translate("MainWindow", "备注"))
- self.pushButton_right.setText(_translate("MainWindow", "下一个事件(D)"))
- self.pushButton_right.setShortcut(_translate("MainWindow", "D"))
- self.label_score.setText(_translate("MainWindow", "标签类型"))
- self.radioButton_1_class.setText(_translate("MainWindow", "一类(U)"))
- self.radioButton_1_class.setShortcut(_translate("MainWindow", "U"))
- self.radioButton_2_class.setText(_translate("MainWindow", "二类(I)"))
- self.radioButton_2_class.setShortcut(_translate("MainWindow", "I"))
- self.radioButton_3_class.setText(_translate("MainWindow", "删除(O)"))
- self.radioButton_3_class.setShortcut(_translate("MainWindow", "O"))
+ self.pushButton_left.setText(_translate("MainWindow", "上一个事件(A)"))
+ self.pushButton_left.setShortcut(_translate("MainWindow", "A"))
+ self.checkBox_examineLabeled.setText(_translate("MainWindow", "仅检查未确定打标参数的事件"))
self.pushButton_confirmLabel.setText(_translate("MainWindow", "确定打标参数(S)"))
+ self.label_correctStart.setText(_translate("MainWindow", "修正后起始时间(s)"))
self.groupBox_5.setTitle(_translate("MainWindow", "逐帧检查"))
self.pushButton_next10s.setText(_translate("MainWindow", "+10s"))
self.pushButton_previous10s.setText(_translate("MainWindow", "-10s"))
diff --git a/MainWindow.ui b/MainWindow.ui
index d33fce4..7642cb7 100644
--- a/MainWindow.ui
+++ b/MainWindow.ui
@@ -437,122 +437,7 @@
打标操作
- -
-
-
-
- 0
- 0
-
-
-
-
- Times New Roman
- 14
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- Times New Roman
- 14
-
-
-
- 上一个事件(A)
-
-
- A
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- Times New Roman
- 14
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- Times New Roman
- 14
-
-
-
- 修正后起始时间(s)
-
-
-
- -
-
-
-
- Times New Roman
- 14
-
-
-
- 仅检查未确定打标参数的事件
-
-
-
- -
-
-
-
- Times New Roman
- 14
-
-
-
- 快速备注输入
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- Times New Roman
- 14
-
-
-
-
- -
+
-
@@ -571,7 +456,141 @@
- -
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+ Times New Roman
+ 14
+
+
+
+
+ -
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+ Times New Roman
+ 14
+
+
+
+ 标签类型
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ Times New Roman
+ 14
+
+
+
+ 一类(U)
+
+
+ U
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ Times New Roman
+ 14
+
+
+
+ 二类(I)
+
+
+ I
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ Times New Roman
+ 14
+
+
+
+ 删除(O)
+
+
+ O
+
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ Times New Roman
+ 14
+
+
+
+
+ -
@@ -595,7 +614,7 @@
- -
+
-
@@ -611,7 +630,74 @@
- -
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+ Times New Roman
+ 14
+
+
+
+ 下一个事件(D)
+
+
+ D
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ Times New Roman
+ 14
+
+
+
+ 备注
+
+
+
+ -
+
+
+
+ Times New Roman
+ 14
+
+
+
+ 快速备注输入
+
+
+
+ -
-
@@ -722,34 +808,10 @@
- -
-
+
-
+
-
- 0
- 0
-
-
-
-
- Times New Roman
- 12
- 50
- false
-
-
-
-
-
-
- Qt::AlignCenter
-
-
-
- -
-
-
-
+
0
0
@@ -760,13 +822,10 @@
14
-
- 备注
-
- -
-
+
-
+
0
@@ -780,103 +839,27 @@
- 下一个事件(D)
+ 上一个事件(A)
- D
+ A
- -
-
-
-
-
-
-
- 0
- 0
-
-
-
-
- Times New Roman
- 14
-
-
-
- 标签类型
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- Times New Roman
- 14
-
-
-
- 一类(U)
-
-
- U
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- Times New Roman
- 14
-
-
-
- 二类(I)
-
-
- I
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- Times New Roman
- 14
-
-
-
- 删除(O)
-
-
- O
-
-
-
-
+ -
+
+
+
+ Times New Roman
+ 14
+
+
+
+ 仅检查未确定打标参数的事件
+
+
- -
+
-
@@ -895,31 +878,24 @@
- -
-
-
- Qt::Horizontal
+
-
+
+
+
+ 0
+ 0
+
-
-
- 40
- 20
-
+
+
+ Times New Roman
+ 14
+
-
-
- -
-
-
- Qt::Horizontal
+
+ 修正后起始时间(s)
-
-
- 40
- 20
-
-
-
+
diff --git a/Main_Quality_Relabel_GUI.py b/Main_Quality_Relabel_GUI.py
index a2617b5..137ffee 100644
--- a/Main_Quality_Relabel_GUI.py
+++ b/Main_Quality_Relabel_GUI.py
@@ -157,12 +157,11 @@ class MainWindow(QMainWindow, Ui_MainWindow):
if self.dir_path:
logging.info("Loading Data Path...")
self.PSG_Data_Path = Path(os.path.join(self.dir_path, "PSG"))
- self.PSG_Label_Path = Path(os.path.join(self.dir_path, "PSG_label"))
self.BCG_Data_Path = Path(os.path.join(self.dir_path, "BCG"))
self.BCG_Label_Path = Path(os.path.join(self.dir_path, "BCG_label"))
self.Artifact_Label_Path = Path(os.path.join(self.dir_path, "Artifact_label"))
self.Artifact_Offset_Path = Path(os.path.join(self.dir_path, "Artifact_label", "20220421Artifact_offset_value.xlsx"))
- if self.PSG_Data_Path.exists() and self.PSG_Label_Path.exists() and self.BCG_Data_Path.exists() and self.BCG_Label_Path.exists() and self.Artifact_Label_Path.exists() and self.Artifact_Label_Path.exists():
+ if self.PSG_Data_Path.exists() and self.BCG_Data_Path.exists() and self.BCG_Label_Path.exists() and self.Artifact_Label_Path.exists() and self.Artifact_Label_Path.exists():
sampIDs = os.listdir(self.BCG_Data_Path)
sampID_for_comboBox = []
for sampID in sampIDs:
@@ -171,7 +170,6 @@ class MainWindow(QMainWindow, Ui_MainWindow):
bcg_path = self.BCG_Data_Path / f"{sampID}samp.npy"
ecg_path = self.PSG_Data_Path / f"A{str(sampID).rjust(7, '0')}.edf"
bcg_label_path = self.BCG_Label_Path / f"export{sampID}_all.csv"
- ecg_label_path = self.PSG_Label_Path / f"export{sampID}.csv"
if not bcg_path.exists():
logging.error(f"Can't find {bcg_path}!")
self.msgBox.setText(f"找不到数据{bcg_path}")
@@ -190,12 +188,6 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.msgBox.setIcon(QMessageBox.Critical)
self.msgBox.exec()
return
- if not ecg_label_path.exists():
- logging.error(f"Can't find {ecg_label_path}!")
- self.msgBox.setText(f"找不到数据{ecg_label_path}")
- self.msgBox.setIcon(QMessageBox.Critical)
- self.msgBox.exec()
- return
self.comboBox_sampID.setEnabled(True)
self.lineEdit_start_bcg_index.setEnabled(True)
self.comboBox_sampID.addItems(sampID_for_comboBox)
@@ -307,7 +299,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.msgBox.setIcon(QMessageBox.Information)
self.msgBox.exec()
self.pd.to_csv(Path(os.path.join(self.BCG_Label_Path, f"export{self.comboBox_sampID.currentText()}_all.csv")), mode='w', index=None, encoding="gbk")
- self.show_one_event(self.plotEventIndex, self.plotEventIndex, front_add_second=self.front_add_second, back_add_second=self.back_add_second)
+ self.show_one_event(self.plotEventIndex, front_add_second=self.front_add_second, back_add_second=self.back_add_second)
if not str(self.pd.at[self.bcg_event_label_index_list[self.plotEventIndex], "remark"]) == "nan":
self.lineEdit_remark.setText(str(self.pd.at[self.bcg_event_label_index_list[self.plotEventIndex], "remark"]))
else:
@@ -329,7 +321,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
if self.checkBox_examineLabeled.isChecked() == True:
while self.pd.at[self.bcg_event_label_index_list[self.plotEventIndex], "isLabeled"] == 1 and self.plotEventIndex > self.start_bcg_index:
self.plotEventIndex = self.plotEventIndex - 1
- self.show_one_event(self.plotEventIndex, self.plotEventIndex, front_add_second=self.front_add_second,
+ self.show_one_event(self.plotEventIndex, front_add_second=self.front_add_second,
back_add_second=self.back_add_second)
if not str(self.pd.at[self.bcg_event_label_index_list[self.plotEventIndex], "remark"]) == "nan":
self.lineEdit_remark.setText(str(self.pd.at[self.bcg_event_label_index_list[self.plotEventIndex], "remark"]))
@@ -362,7 +354,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
if self.checkBox_examineLabeled.isChecked() == True:
while self.pd.at[self.bcg_event_label_index_list[self.plotEventIndex], "isLabeled"] == 1 and self.plotEventIndex < len(self.bcg_event_label_filtered_df) - 1:
self.plotEventIndex = self.plotEventIndex + 1
- self.show_one_event(self.plotEventIndex, self.plotEventIndex, front_add_second=self.front_add_second,
+ self.show_one_event(self.plotEventIndex, front_add_second=self.front_add_second,
back_add_second=self.back_add_second)
if not str(self.pd.at[self.bcg_event_label_index_list[self.plotEventIndex], "remark"]) == "nan":
self.lineEdit_remark.setText(str(self.pd.at[self.bcg_event_label_index_list[self.plotEventIndex], "remark"]))
@@ -459,7 +451,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.textBrowser_update("操作:向前10秒")
self.radioButton_OSA.setChecked(True)
self.time_move_count = self.time_move_count - 10
- self.show_new_event(self.plotEventIndex, self.plotEventIndex, front_add_second=self.front_add_second,
+ self.show_new_event(self.plotEventIndex, front_add_second=self.front_add_second,
back_add_second=self.back_add_second, time_move_count = self.time_move_count)
# -30s的槽函数
@@ -469,7 +461,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.textBrowser_update("操作:向前30秒")
self.radioButton_OSA.setChecked(True)
self.time_move_count = self.time_move_count - 30
- self.show_new_event(self.plotEventIndex, self.plotEventIndex, front_add_second=self.front_add_second,
+ self.show_new_event(self.plotEventIndex, front_add_second=self.front_add_second,
back_add_second=self.back_add_second, time_move_count = self.time_move_count)
# -60s的槽函数
@@ -479,7 +471,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.textBrowser_update("操作:向前60秒")
self.radioButton_OSA.setChecked(True)
self.time_move_count = self.time_move_count - 60
- self.show_new_event(self.plotEventIndex, self.plotEventIndex, front_add_second=self.front_add_second,
+ self.show_new_event(self.plotEventIndex, front_add_second=self.front_add_second,
back_add_second=self.back_add_second, time_move_count = self.time_move_count)
# +10s的槽函数
@@ -489,7 +481,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.textBrowser_update("操作:向后10秒")
self.radioButton_OSA.setChecked(True)
self.time_move_count = self.time_move_count + 10
- self.show_new_event(self.plotEventIndex, self.plotEventIndex, front_add_second=self.front_add_second,
+ self.show_new_event(self.plotEventIndex, front_add_second=self.front_add_second,
back_add_second=self.back_add_second, time_move_count = self.time_move_count)
# +30s的槽函数
@@ -499,7 +491,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.textBrowser_update("操作:向后30秒")
self.radioButton_OSA.setChecked(True)
self.time_move_count = self.time_move_count + 30
- self.show_new_event(self.plotEventIndex, self.plotEventIndex, front_add_second=self.front_add_second,
+ self.show_new_event(self.plotEventIndex, front_add_second=self.front_add_second,
back_add_second=self.back_add_second, time_move_count = self.time_move_count)
# +30s的槽函数
@@ -509,7 +501,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.textBrowser_update("操作:向后60秒")
self.radioButton_OSA.setChecked(True)
self.time_move_count = self.time_move_count + 60
- self.show_new_event(self.plotEventIndex, self.plotEventIndex, front_add_second=self.front_add_second,
+ self.show_new_event(self.plotEventIndex, front_add_second=self.front_add_second,
back_add_second=self.back_add_second, time_move_count = self.time_move_count)
# +60s的槽函数
@@ -603,20 +595,14 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.start_bcg_index = int(self.lineEdit_start_bcg_index.text())
self.plotEventIndex = self.start_bcg_index
- self.ecg_start_time = None
-
# 用来显示颜色时按点匹配事件
- self.ecg_event_label = None
self.bcg_event_label = None
- self.spo2_event_label = None
self.artifact_event_label = None
# 仅包含关注暂停事件的列表
- self.ecg_event_label_filtered_df = None
self.bcg_event_label_filtered_df = None
# 所有事件列表
- self.ecg_event_label_df = None
self.bcg_event_label_df = None
# 各通道信号
@@ -659,13 +645,6 @@ class MainWindow(QMainWindow, Ui_MainWindow):
signal_label = file.getSignalLabels()
logging.debug(f"{self.sampNo} EDF file signal label : {signal_label}")
- self.ecg_start_time = file.getStartdatetime()
-
- # 根据PSG记录长度生成事件表
- self.ecg_event_label = np.zeros(
- int(file.getFileDuration()) * self.frequency + self.extend_second * self.frequency)
- self.spo2_event_label = np.zeros(
- int(file.getFileDuration()) * self.frequency + self.extend_second * self.frequency)
# 打印PSG信息
file.file_info_long()
@@ -723,56 +702,15 @@ class MainWindow(QMainWindow, Ui_MainWindow):
def read_event(self):
bcg_label_path = self.BCG_Label_Path / f"export{self.sampNo}_all.csv"
- ecg_label_path = self.PSG_Label_Path / f"export{self.sampNo}.csv"
if not bcg_label_path.exists():
logging.error(f"Can't find {bcg_label_path} !")
raise FileNotFoundError(f"Can't find {bcg_label_path} !")
- if not ecg_label_path.exists():
- logging.error(f"Can't find {ecg_label_path} !")
- raise FileNotFoundError(f"Can't find {ecg_label_path} !")
-
- df = pd.read_csv(ecg_label_path, encoding="gbk")
- self.ecg_event_label_df = df
-
- # 过滤不关注的事件
- df2 = df[df["Event type"].isin(self.focus_event_list)]
- # 根据epoch进行排列方便索引
- df2 = df2.sort_values(by='Epoch')
- self.ecg_event_label_filtered_df = df2
-
- logging.info("Traversaling PSG events...")
- self.textBrowser_update("提示:正在遍历PSG事件")
- for one_data in tqdm(df.index, ncols=80):
- one_data = df.loc[one_data]
-
- # 通过开始时间推算事件起始点与结束点
- event_start_time = datetime.strptime(one_data["Date"] + " " + one_data["Time"], '%Y/%m/%d %H:%M:%S')
- SP = (event_start_time - self.ecg_start_time).seconds
- # 对括号进行切分,避免Duration 20 (20) 这种带括号的问题
- EP = int(SP + float(one_data["Duration"].split("(")[0]))
- SP *= self.frequency
- EP *= self.frequency
-
- # 对事件重新编码并存到事件记录表中
- if one_data["Event type"] == "Hypopnea":
- self.ecg_event_label[SP:EP] = 1
- elif one_data["Event type"] == "Central apnea":
- self.ecg_event_label[SP:EP] = 2
- elif one_data["Event type"] == "Obstructive apnea":
- self.ecg_event_label[SP:EP] = 3
- elif one_data["Event type"] == "Mixed apnea":
- self.ecg_event_label[SP:EP] = 4
- elif one_data["Event type"] == "Desaturation":
- self.spo2_event_label[SP:EP] = 5
- logging.info("Finished Traversal PSG events")
- self.textBrowser_update("提示:完成遍历PSG事件")
-
# 读取心晓事件
df = pd.read_csv(bcg_label_path, encoding="gbk")
- df["new_start"] = df["new_start"].astype("int")
- df["new_end"] = df["new_end"].astype("int")
+ df["Start"] = df["Start"].astype("int")
+ df["End"] = df["End"].astype("int")
self.bcg_event_label_df = df
# 过滤不关注事件
@@ -784,8 +722,8 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.textBrowser_update("提示:正在遍历心晓事件")
for one_data in tqdm(df.index):
one_data = df.loc[one_data]
- SP = one_data["new_start"] * self.frequency
- EP = one_data["new_end"] * self.frequency
+ SP = one_data["Start"] * self.frequency
+ EP = one_data["End"] * self.frequency
if one_data["Event type"] == "Hypopnea":
self.bcg_event_label[SP:EP] = 1
@@ -820,53 +758,32 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.artifact_event_label[SP:EP] = artifact_type
- # assert len(self.ecg_event_label_filtered_df) == len(self.bcg_event_label_filtered_df), \
- # f"PSG与心晓事件数量不一致, PSG事件数量{len(self.ecg_event_label_filtered_df)},
- # 心晓事件数量{len(self.bcg_event_label_filtered_df)}"
-
- def show_one_event(self, bcg_index: int, ecg_index: int, front_add_second: int, back_add_second: int):
+ def show_one_event(self, bcg_index: int, front_add_second: int, back_add_second: int):
"""
:param bcg_index: 心晓事件在csv中行号
- :param ecg_index: PSG事件在csv中序号
:param front_add_second: 向前延伸时间
:param back_add_second: 向后延伸时间
:return:
"""
# 获取事件实际在csv文件中的序号
bcg_real_index = self.bcg_event_label_filtered_df.index[bcg_index],
- ecg_real_index = self.ecg_event_label_filtered_df.index[ecg_index],
one_bcg_data = self.bcg_event_label_df.loc[bcg_real_index]
- one_ecg_data = self.ecg_event_label_df.loc[ecg_real_index]
-
- # 获取ECG事件开始与结束时间
- event_start_time = datetime.strptime(one_ecg_data["Date"] + " " + one_ecg_data["Time"], '%Y/%m/%d %H:%M:%S')
- ecg_SP = (event_start_time - self.ecg_start_time).seconds
- ecg_duration = int(float(str(one_ecg_data["Duration"]).split("(")[0]) + 0.5)
- ecg_EP = ecg_SP + ecg_duration
# 获取BCG事件开始与结束时间
- bcg_SP = one_bcg_data["new_start"]
- bcg_EP = one_bcg_data["new_end"]
+ bcg_SP = one_bcg_data["Start"]
+ bcg_EP = one_bcg_data["End"]
self.bcg_SP = bcg_SP
self.bcg_EP = bcg_EP
bcg_duration = bcg_EP - bcg_SP
logging.info(f"sampNo:{self.sampNo} "
f"bcg[index:{bcg_index} epoch:{one_bcg_data['Epoch']} event:{one_bcg_data['Event type']}] "
- f"ecg:[index:{ecg_index} epoch:{one_ecg_data['Epoch']} event:{one_ecg_data['Event type']}]")
-
- if one_bcg_data['Event type'] != one_ecg_data['Event type']:
- logging.error(f"sampNo:{self.sampNo} PSG事件与心晓时间不一致,请排查"
- f"bcg[index:{bcg_index} epoch:{one_bcg_data['Epoch']} event:{one_bcg_data['Event type']}] "
- f"ecg:[index:{ecg_index} epoch:{one_ecg_data['Epoch']} event:{one_ecg_data['Event type']}]")
- raise ValueError()
+ f"ecg:[index:{bcg_index} epoch:{one_bcg_data['Epoch']} event:{one_bcg_data['Event type']}]")
self.lineEdit_correctStart.setText(str(self.bcg_SP))
self.lineEdit_correctEnd.setText(str(self.bcg_EP))
# 进行向两边延展
- ecg_SP = ecg_SP - front_add_second
- ecg_EP = ecg_EP + back_add_second
bcg_SP = bcg_SP - front_add_second
bcg_EP = bcg_EP + back_add_second
@@ -880,20 +797,20 @@ class MainWindow(QMainWindow, Ui_MainWindow):
# 绘制 Flow1
self.ax0 = self.figure.add_subplot(gs[0])
- self.plt_channel(plt_=plt, SP=ecg_SP, EP=ecg_EP, channel="Flow T")
+ self.plt_channel(plt_=plt, SP=bcg_SP, EP=bcg_EP, channel="Flow T")
# 绘制 Flow2
self.ax1 = self.figure.add_subplot(gs[1], sharex=self.ax0)
- self.plt_channel(plt_=plt, SP=ecg_SP, EP=ecg_EP, channel="Flow P")
+ self.plt_channel(plt_=plt, SP=bcg_SP, EP=bcg_EP, channel="Flow P")
self.ax2 = self.figure.add_subplot(gs[2], sharex=self.ax0)
- self.plt_channel(plt_=plt, SP=ecg_SP, EP=ecg_EP, channel="Effort Tho")
+ self.plt_channel(plt_=plt, SP=bcg_SP, EP=bcg_EP, channel="Effort Tho")
self.ax3 = self.figure.add_subplot(gs[3], sharex=self.ax0)
- self.plt_channel(plt_=plt, SP=ecg_SP, EP=ecg_EP, channel="Effort Abd")
+ self.plt_channel(plt_=plt, SP=bcg_SP, EP=bcg_EP, channel="Effort Abd")
self.ax4 = self.figure.add_subplot(gs[4], sharex=self.ax0)
- self.plt_channel(plt_=plt, SP=ecg_SP, EP=ecg_EP, channel="SpO2", event_code=[5])
+ self.plt_channel(plt_=plt, SP=bcg_SP, EP=bcg_EP, channel="SpO2", event_code=[5])
self.ax5 = self.figure.add_subplot(gs[5], sharex=self.ax0)
self.plt_channel(plt_=plt, SP=bcg_SP, EP=bcg_EP, channel="orgdata",
@@ -906,9 +823,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
event_show_under=False,
title=f"sampNo:{self.sampNo} Index:{bcg_index + 1}/{len(self.bcg_event_label_filtered_df)}")
- self.label_PSG_event.setText(f"PSG sampNo:{self.sampNo} Index:{ecg_index + 1}/{len(self.ecg_event_label_filtered_df)} "
- f"Epoch:{one_ecg_data['Epoch']} Duration:{ecg_duration}s")
- self.label_BCG_event.setText(f"心晓 sampNo:{self.sampNo} Index:{bcg_index + 1}/{len(self.bcg_event_label_filtered_df)} "
+ self.label_BCG_event.setText(f"sampNo:{self.sampNo} Index:{bcg_index + 1}/{len(self.bcg_event_label_filtered_df)} "
f"Epoch:{one_bcg_data['Epoch']} Duration:{bcg_duration}s")
# figManager = plt.get_current_fig_manager()
@@ -939,7 +854,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
for j in event_code:
if channel == "SpO2":
- mask = self.spo2_event_label[SP * self.frequency:EP * self.frequency] == j
+ mask = self.bcg_event_label[SP * self.frequency:EP * self.frequency] == j
elif channel == "orgdata" or channel == "0.7lowpass_resp":
if j <= 5:
mask = self.bcg_event_label[SP * self.frequency:EP * self.frequency] == j
@@ -947,7 +862,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
mask = self.artifact_event_label[SP * self.frequency:EP * self.frequency] == j
linestyle = "-"
else:
- mask = self.ecg_event_label[SP * self.frequency:EP * self.frequency] == j
+ mask = self.bcg_event_label[SP * self.frequency:EP * self.frequency] == j
if event_show_under:
min_point = self.signal_select[channel][SP * self.frequency:EP * self.frequency].min()
@@ -973,10 +888,9 @@ class MainWindow(QMainWindow, Ui_MainWindow):
# print(xticks)
# plt_.xticks(*xticks) # 去掉x轴
- def show_new_event(self, bcg_index: int, ecg_index: int, front_add_second: int, back_add_second: int, time_move_count: int):
+ def show_new_event(self, bcg_index: int, front_add_second: int, back_add_second: int, time_move_count: int):
"""
:param bcg_index: 心晓事件在csv中行号
- :param ecg_index: PSG事件在csv中序号
:param front_add_second: 向前延伸时间
:param back_add_second: 向后延伸时间
:param time_move_count: 时间轴移动的时间
@@ -984,34 +898,18 @@ class MainWindow(QMainWindow, Ui_MainWindow):
"""
# 获取事件实际在csv文件中的序号
bcg_real_index = self.bcg_event_label_filtered_df.index[bcg_index],
- ecg_real_index = self.ecg_event_label_filtered_df.index[ecg_index],
one_bcg_data = self.bcg_event_label_df.loc[bcg_real_index]
- one_ecg_data = self.ecg_event_label_df.loc[ecg_real_index]
-
- # 获取ECG事件开始与结束时间
- event_start_time = datetime.strptime(one_ecg_data["Date"] + " " + one_ecg_data["Time"], '%Y/%m/%d %H:%M:%S')
- ecg_SP = (event_start_time - self.ecg_start_time).seconds
- ecg_duration = int(float(str(one_ecg_data["Duration"]).split("(")[0]) + 0.5)
- ecg_EP = ecg_SP + ecg_duration
# 获取BCG事件开始与结束时间
- bcg_SP = one_bcg_data["new_start"]
- bcg_EP = one_bcg_data["new_end"]
+ bcg_SP = one_bcg_data["Start"]
+ bcg_EP = one_bcg_data["End"]
bcg_duration = bcg_EP - bcg_SP
logging.info(f"sampNo:{self.sampNo} "
f"bcg[index:{bcg_index} epoch:{one_bcg_data['Epoch']} event:{one_bcg_data['Event type']}] "
- f"ecg:[index:{ecg_index} epoch:{one_ecg_data['Epoch']} event:{one_ecg_data['Event type']}]")
-
- if one_bcg_data['Event type'] != one_ecg_data['Event type']:
- logging.error(f"sampNo:{self.sampNo} PSG事件与心晓时间不一致,请排查"
- f"bcg[index:{bcg_index} epoch:{one_bcg_data['Epoch']} event:{one_bcg_data['Event type']}] "
- f"ecg:[index:{ecg_index} epoch:{one_ecg_data['Epoch']} event:{one_ecg_data['Event type']}]")
- raise ValueError()
+ f"ecg:[index:{bcg_index} epoch:{one_bcg_data['Epoch']} event:{one_bcg_data['Event type']}]")
# 进行向两边延展
- ecg_SP = ecg_SP - front_add_second + time_move_count
- ecg_EP = ecg_EP + back_add_second + time_move_count
bcg_SP = bcg_SP - front_add_second + time_move_count
bcg_EP = bcg_EP + back_add_second + time_move_count
@@ -1030,20 +928,20 @@ class MainWindow(QMainWindow, Ui_MainWindow):
# 绘制 Flow1
self.ax0 = self.figure.add_subplot(gs[0])
- self.plt_channel(plt_=plt, SP=ecg_SP, EP=ecg_EP, channel="Flow T")
+ self.plt_channel(plt_=plt, SP=bcg_SP, EP=bcg_EP, channel="Flow T")
# 绘制 Flow2
self.ax1 = self.figure.add_subplot(gs[1], sharex=self.ax0)
- self.plt_channel(plt_=plt, SP=ecg_SP, EP=ecg_EP, channel="Flow P")
+ self.plt_channel(plt_=plt, SP=bcg_SP, EP=bcg_EP, channel="Flow P")
self.ax2 = self.figure.add_subplot(gs[2], sharex=self.ax0)
- self.plt_channel(plt_=plt, SP=ecg_SP, EP=ecg_EP, channel="Effort Tho")
+ self.plt_channel(plt_=plt, SP=bcg_SP, EP=bcg_EP, channel="Effort Tho")
self.ax3 = self.figure.add_subplot(gs[3], sharex=self.ax0)
- self.plt_channel(plt_=plt, SP=ecg_SP, EP=ecg_EP, channel="Effort Abd")
+ self.plt_channel(plt_=plt, SP=bcg_SP, EP=bcg_EP, channel="Effort Abd")
self.ax4 = self.figure.add_subplot(gs[4], sharex=self.ax0)
- self.plt_channel(plt_=plt, SP=ecg_SP, EP=ecg_EP, channel="SpO2", event_code=[5])
+ self.plt_channel(plt_=plt, SP=bcg_SP, EP=bcg_EP, channel="SpO2", event_code=[5])
self.ax5 = self.figure.add_subplot(gs[5], sharex=self.ax0)
self.plt_channel(plt_=plt, SP=bcg_SP, EP=bcg_EP, channel="orgdata",
@@ -1056,11 +954,8 @@ class MainWindow(QMainWindow, Ui_MainWindow):
event_show_under=False,
title=f"sampNo:{self.sampNo} Index:{bcg_index + 1}/{len(self.bcg_event_label_filtered_df)}")
- self.label_PSG_event.setText(
- f"PSG sampNo:{self.sampNo} Index:{ecg_index + 1}/{len(self.ecg_event_label_filtered_df)} "
- f"Epoch:{one_ecg_data['Epoch']} Duration:{ecg_duration}s")
self.label_BCG_event.setText(
- f"心晓 sampNo:{self.sampNo} Index:{bcg_index + 1}/{len(self.bcg_event_label_filtered_df)} "
+ f"sampNo:{self.sampNo} Index:{bcg_index + 1}/{len(self.bcg_event_label_filtered_df)} "
f"Epoch:{one_bcg_data['Epoch']} Duration:{bcg_duration}s")
# figManager = plt.get_current_fig_manager()
diff --git a/PSG_label_2_BCG_label.py b/PSG_label_2_BCG_label.py
new file mode 100644
index 0000000..ebfc11c
--- /dev/null
+++ b/PSG_label_2_BCG_label.py
@@ -0,0 +1,48 @@
+import os
+import pandas as pd
+import pyedflib
+from pathlib import Path
+
+def get_time_to_seconds(time_str):
+ h, m, s = map(int, time_str.split(":"))
+ return h * 3600 + m * 60 + s
+
+base_event = ["Hypopnea", "Central apnea", "Obstructive apnea", "Mixed apnea"]
+
+# 输入设置
+sampID = 888
+dir_path = r"E:\data_annotation\6SleepApnea_annotation_GUI_demo\data"
+
+# 数据路径设置
+PSG_Data_Path = Path(os.path.join(dir_path, "PSG"))
+PSG_Label_Path = Path(os.path.join(dir_path, "PSG_label"))
+BCG_Data_Path = Path(os.path.join(dir_path, "BCG"))
+BCG_Label_Path = Path(os.path.join(dir_path, "BCG_label"))
+# Artifact_Label_Path = Path(os.path.join(dir_path, "Artifact_label"))
+# Artifact_Offset_Path = Path(os.path.join(dir_path, "Artifact_label", "20220421Artifact_offset_value.xlsx"))
+
+# 读取PSG标签
+df_PSG_label = pd.read_csv(PSG_Label_Path / (f"export" + str(sampID) + ".csv"), encoding="gbk")
+df_PSG_label = df_PSG_label.loc[:, ~df_PSG_label.columns.str.contains('^Unnamed')]
+df_PSG_label = df_PSG_label[df_PSG_label["Event type"].isin(base_event)]
+df_PSG_label['Duration'] = df_PSG_label['Duration'].str.replace(r' \(.*?\)', '', regex=True)
+
+# 读取EDF文件
+edf_File = pyedflib.EdfReader(str(PSG_Data_Path / f"A{str(sampID).rjust(7, '0')}.edf"))
+
+# 获取PSG记录开始时间
+start_time = str(edf_File.getStartdatetime()).split(" ")[1]
+start_time_abs = get_time_to_seconds(start_time)
+
+# 计算起始时间秒数和终止时间秒数
+df_PSG_label['Start'] = (df_PSG_label['Time'].apply(get_time_to_seconds) - start_time_abs).apply(lambda x: x + 24 * 3600 if x < 0 else x).astype(int)
+df_PSG_label['End'] = df_PSG_label['Start'] + df_PSG_label['Duration'].astype(float).round(0).astype(int)
+
+# 打印结果
+print(df_PSG_label)
+
+# 写入csv文件
+df_PSG_label.to_csv(r"E:\data_annotation\6SleepApnea_annotation_GUI_demo\data\BCG_label\export" + str(sampID) + "_all.csv", index=False, encoding="gbk")
+
+# 打印结果
+print("sampID_" + str(sampID) + "写入csv成功")
\ No newline at end of file