From 4ec1a69093e7b1e4f28b9b0ff0e47558eb009770 Mon Sep 17 00:00:00 2001 From: Yorusora <2944763079@qq.com> Date: Wed, 21 May 2025 13:09:16 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=93=E5=8A=A8=E9=80=89=E5=8F=96=E5=8C=BA?= =?UTF-8?q?=E5=9F=9F=E7=9A=84=E5=88=A4=E5=88=AB=E5=B0=9A=E6=9C=AA=E5=81=9A?= =?UTF-8?q?=E7=9A=84=E5=BE=88=E5=AE=8C=E6=95=B4=EF=BC=8C=E9=80=89=E4=B8=AD?= =?UTF-8?q?=E5=A4=9A=E4=B8=AA=E5=B7=B2=E6=9C=89=E7=9A=84=E4=BD=93=E5=8A=A8?= =?UTF-8?q?=E7=9A=84=E5=8C=BA=E5=9F=9F=E6=97=B6=E5=8F=AF=E8=83=BD=E4=BC=9A?= =?UTF-8?q?=E5=87=BA=E7=8E=B0=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 +++ func/Module_artifact_label.py | 44 +++++++++++++++++++++++++++++++---- func/utils/Constants.py | 1 + 3 files changed, 43 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index cdb8f90..1b5bdd7 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,10 @@ 每个功能运行时,若./Config目录下不存在该功能对应的yaml配置文件,则程序将创建一份默认的配置文件。配置文件的内容主要涉及一些对应功能的界面默认初始值的设置,此配置文件可以根据用户需要自行修改,或是在修改了相应参数后,在导入设置界面中单击“确定”即可保存相关参数到yaml文件中。 +## TODO LIST: +1、根据选定区域获取峰值时,将绘制的区域设置为有上限和下限的矩形,根据矩形获取到的横纵区域来计算峰值 +2、体动选取区域的判别尚未做的很完整,选中多个已有的体动的区域时可能会出现问题 ## 1、主菜单 diff --git a/func/Module_artifact_label.py b/func/Module_artifact_label.py index 204f83f..8611a7f 100644 --- a/func/Module_artifact_label.py +++ b/func/Module_artifact_label.py @@ -9,6 +9,7 @@ from PySide6.QtWidgets import QMessageBox, QMainWindow, QApplication, QTableWidg from matplotlib import gridspec, patches from matplotlib.backends.backend_qt import NavigationToolbar2QT from matplotlib.backends.backend_qtagg import FigureCanvasQTAgg +from numpy import array, append from numpy.fft import fft, fftfreq from overrides import overrides from pandas import read_csv, DataFrame, concat @@ -661,6 +662,8 @@ class MainWindow_artifact_label(QMainWindow): def __slot_btn_label__(self): sender = self.sender() + flag = False + select_row = array([]).astype(dict) if sender == self.ui.pushButton_type_1: type = 1 @@ -683,15 +686,46 @@ class MainWindow_artifact_label(QMainWindow): for index, row in self.data.df_Artifact_a.iterrows(): value_startTime = row['startTime'] value_endTime = row['endTime'] + + # if ((value_endTime >= int(self.ui.lineEdit_start_time.text()) and value_startTime <= int(self.ui.lineEdit_start_time.text())) or + # (value_endTime >= int(self.ui.lineEdit_end_time.text()) and value_startTime <= int(self.ui.lineEdit_end_time.text())) or + # (value_startTime >= int(self.ui.lineEdit_start_time.text()) and value_endTime <= int(self.ui.lineEdit_end_time.text())) or + # (value_startTime <= int(self.ui.lineEdit_start_time.text()) and value_endTime >= int(self.ui.lineEdit_end_time.text()))): + # select_row = append(select_row, row) + + # TODO:体动选取区域的判别尚未做的很完整,选中多个已有的体动的区域时可能会出现问题 + if (type == 1 and row['type'] == 1) or (type == 2 and row['type'] == 2) or (type == 3 and row['type'] == 3): + if ((value_startTime > int(self.ui.lineEdit_start_time.text()) and (value_startTime - int(self.ui.lineEdit_end_time.text()) <= 2 * Config["InputConfig"]["UseFreq"])) or + (value_endTime < int(self.ui.lineEdit_end_time.text()) and (int(self.ui.lineEdit_end_time.text()) - value_endTime <= 2 * Config["InputConfig"]["UseFreq"]))): + reply = QMessageBox.question(self, '确认', '{}{},是否确认合并?'.format(Constants.ARTIFACT_LABEL_MERGE, row['number']), QMessageBox.Yes | QMessageBox.No, + QMessageBox.No) + if reply == QMessageBox.Yes: + self.data.df_Artifact_a.loc[self.data.df_Artifact_a['number'] == row['number'], + ['number', 'type', 'startTime', 'endTime']] = [ + int(row['number']), + int(type), + int(self.ui.lineEdit_start_time.text()) if int(self.ui.lineEdit_start_time.text()) < int(row['startTime']) else int(row['startTime']), + int(self.ui.lineEdit_end_time.text()) if int(self.ui.lineEdit_end_time.text()) > int(row['endTime']) else int(row['endTime']) + ] + new_row = {'number': int(row['number']), + 'type': int(type), + 'startTime': int(self.ui.lineEdit_start_time.text()), + 'endTime': int(self.ui.lineEdit_end_time.text())} + flag = True + break + else: + return if value_startTime <= int(self.ui.lineEdit_end_time.text()) and int( self.ui.lineEdit_start_time.text()) <= value_endTime: PublicFunc.msgbox_output(self, f"{Constants.ARTIFACT_LABEL_OVERLAPPING}{row['number']}", Constants.MSGBOX_TYPE_ERROR) return - new_row = {'number': int(len(self.data.df_Artifact_a) + 1), - 'type': int(type), - 'startTime': int(self.ui.lineEdit_start_time.text()), - 'endTime': int(self.ui.lineEdit_end_time.text())} - self.data.df_Artifact_a = concat([self.data.df_Artifact_a, DataFrame([new_row])], ignore_index=True) + + if not flag: + new_row = {'number': int(len(self.data.df_Artifact_a) + 1), + 'type': int(type), + 'startTime': int(self.ui.lineEdit_start_time.text()), + 'endTime': int(self.ui.lineEdit_end_time.text())} + self.data.df_Artifact_a = concat([self.data.df_Artifact_a, DataFrame([new_row])], ignore_index=True) sorted_part = self.data.df_Artifact_a[['type', 'startTime', 'endTime']].sort_values(by='startTime').reset_index( drop=True) self.data.df_Artifact_a[['type', 'startTime', 'endTime']] = sorted_part diff --git a/func/utils/Constants.py b/func/utils/Constants.py index 6bfd0ac..c68dd92 100644 --- a/func/utils/Constants.py +++ b/func/utils/Constants.py @@ -320,6 +320,7 @@ class Constants: ARTIFACT_LABEL_RECOVER_SCALE: str = "尺度恢复" ARTIFACT_LABEL_MISS_ARGS: str = "打标参数未填写" ARTIFACT_LABEL_OVERLAPPING: str = "当前所打标的片段存在重合,重合片段序号:" + ARTIFACT_LABEL_MERGE: str = "当前所打标的片段距离附近片段不到2秒,片段序号:" ARTIFACT_LABEL_DELETE_ARTIFACT_SUCCESSFULLY: str = "体动被删除" ARTIFACT_LABEL_DELETE_ARTIFACT_FAILURE: str = "需要被删除的体动不存在" ARTIFACT_LABEL_ACTION_LABEL: str = f"标注体动({ConfigParams.ARTIFACT_LABEL_ACTION_LABEL_ARTIFACT_SHORTCUT_KEY})"