From c6778b55486fc6aae2e598cebca4ab271a0cb01c Mon Sep 17 00:00:00 2001 From: Yorusora <2944763079@qq.com> Date: Thu, 22 May 2025 10:38:47 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BA=86=E5=AF=BC=E5=85=A5?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E7=9A=84=E4=BB=A3=E7=A0=81=20=E6=9B=B4?= =?UTF-8?q?=E6=96=B0README?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 + func/Module_SA_label.py | 23 ++++++----- func/Module_artifact_label.py | 3 -- func/Module_detect_Jpeak.py | 3 -- func/Module_detect_Rpeak.py | 3 -- func/Module_label_check.py | 26 ++++++++---- func/Module_precisely_align.py | 75 +++++++++++++++++++--------------- func/Module_preprocess.py | 3 -- func/utils/ConfigParams.py | 34 +++++++++++++-- func/utils/Constants.py | 30 +++++++++----- 10 files changed, 125 insertions(+), 77 deletions(-) diff --git a/README.md b/README.md index 1b5bdd7..76d5310 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,8 @@ 2、体动选取区域的判别尚未做的很完整,选中多个已有的体动的区域时可能会出现问题 +3、部分模块在导入失败后重新导入时会出现问题,已知模块有<人工纠正>、<体动标注>、<呼吸可用性及间期标注>、<睡眠呼吸暂停事件标注>,主要是涉及到按钮状态的设置,有待后续优化 + ## 1、主菜单 ![](/img/0.png) diff --git a/func/Module_SA_label.py b/func/Module_SA_label.py index 53c6a72..8f4c466 100644 --- a/func/Module_SA_label.py +++ b/func/Module_SA_label.py @@ -1266,7 +1266,7 @@ class Data: def open_file(self): if Path(Config["Path"]["Input_OrgBCG"]).is_file(): - Config["Path"]["Input_OrgBCG"] = str(Path(Config["Path"]["Input_orgBcg"]).parent) + Config["Path"]["Input_OrgBCG"] = str(Path(Config["Path"]["Input_OrgBCG"]).parent) if Path(Config["Path"]["Input_Tho"]).is_file(): Config["Path"]["Input_Tho"] = str(Path(Config["Path"]["Input_Tho"]).parent) if Path(Config["Path"]["Input_Abd"]).is_file(): @@ -1282,16 +1282,6 @@ class Data: if Path(Config["Path"]["Input_Label"]).is_file(): Config["Path"]["Input_Label"] = str(Path(Config["Path"]["Input_Label"]).parent) - if ((not Path(Config["Path"]["Input_OrgBCG"]).exists()) - or (not Path(Config["Path"]["Input_Tho"]).exists()) - or (not Path(Config["Path"]["Input_Abd"]).exists()) - or (not Path(Config["Path"]["Input_FlowT"]).exists()) - or (not Path(Config["Path"]["Input_FlowP"]).exists()) - or (not Path(Config["Path"]["Input_SpO2"]).exists()) - or (not Path(Config["Path"]["Input_Artifact"]).exists())): - return Result().failure(info=Constants.INPUT_FAILURE + - Constants.FAILURE_REASON["Path_Not_Exist"]) - result = PublicFunc.examine_file(Config["Path"]["Input_OrgBCG"], ConfigParams.ORGBCG_SYNC) if result.status: Config["Path"]["Input_OrgBCG"] = result.data["path"] @@ -1338,6 +1328,17 @@ class Data: Config["Path"]["Save_2"] = str( Path(Config["Path"]["Save_2"]) / Path(ConfigParams.SA_LABEL_ADD + ConfigParams.ENDSWITH_CSV)) + if not Path(Config["Path"]["Input_Artifact"]).exists(): + return Result().failure(info=Constants.INPUT_FAILURE + "\n" + + ConfigParams.ARTIFACT_A + ":" + + Config["Path"]["Input_Artifact"] + + Constants.FAILURE_REASON["Path_Not_Exist"]) + if not Path(Config["Path"]["Input_Label"]).exists(): + return Result().failure(info=Constants.INPUT_FAILURE + "\n" + + ConfigParams.SA_LABEL_SYNC + ":" + + Config["Path"]["Input_Label"] + + Constants.FAILURE_REASON["Path_Not_Exist"]) + try: self.OrgBCG = read_csv(Config["Path"]["Input_OrgBCG"], encoding=ConfigParams.UTF8_ENCODING, diff --git a/func/Module_artifact_label.py b/func/Module_artifact_label.py index f79f52b..e0ce628 100644 --- a/func/Module_artifact_label.py +++ b/func/Module_artifact_label.py @@ -1209,9 +1209,6 @@ class Data: if Path(Config["Path"]["Input_BCG"]).is_file(): Config["Path"]["Input_BCG"] = str(Path(Config["Path"]["Input_BCG"]).parent) - if (not Path(Config["Path"]["Input_orgBcg"]).exists()) or (not Path(Config["Path"]["Input_BCG"]).exists()): - return Result().failure(info=Constants.INPUT_FAILURE + Constants.FAILURE_REASON["Path_Not_Exist"]) - result = PublicFunc.examine_file(Config["Path"]["Input_orgBcg"], ConfigParams.ORGBCG_SYNC) if result.status: Config["Path"]["Input_orgBcg"] = result.data["path"] diff --git a/func/Module_detect_Jpeak.py b/func/Module_detect_Jpeak.py index 6f6c5b0..d8b8710 100644 --- a/func/Module_detect_Jpeak.py +++ b/func/Module_detect_Jpeak.py @@ -398,9 +398,6 @@ class Data: if Path(Config["Path"]["Input"]).is_file(): Config["Path"]["Input"] = str(Path(Config["Path"]["Input"]).parent) - if not Path(Config["Path"]["Input"]).exists(): - return Result().failure(info=Constants.INPUT_FAILURE + Constants.FAILURE_REASON["Path_Not_Exist"]) - result = PublicFunc.examine_file(Config["Path"]["Input"], ConfigParams.BCG_FILTER) if result.status: Config["Path"]["Input"] = result.data["path"] diff --git a/func/Module_detect_Rpeak.py b/func/Module_detect_Rpeak.py index 9b73f7d..7100d16 100644 --- a/func/Module_detect_Rpeak.py +++ b/func/Module_detect_Rpeak.py @@ -399,9 +399,6 @@ class Data: if Path(Config["Path"]["Input"]).is_file(): Config["Path"]["Input"] = str(Path(Config["Path"]["Input"]).parent) - if not Path(Config["Path"]["Input"]).exists(): - return Result().failure(info=Constants.INPUT_FAILURE + Constants.FAILURE_REASON["Path_Not_Exist"]) - result = PublicFunc.examine_file(Config["Path"]["Input"], ConfigParams.ECG_FILTER) if result.status: Config["Path"]["Input"] = result.data["path"] diff --git a/func/Module_label_check.py b/func/Module_label_check.py index ec22501..962c031 100644 --- a/func/Module_label_check.py +++ b/func/Module_label_check.py @@ -933,18 +933,28 @@ class Data: result = PublicFunc.examine_file(Config["Path"]["Input_Signal"], signal) if result.status: Config["Path"]["Input_Signal"] = result.data["path"] - Config["Path"]["Input_Peak"] = str( - Path(Config["Path"]["Input_Peak"]) / Path(peak + str(Config["InputConfig"]["Freq"]) + ConfigParams.ENDSWITH_TXT)) Config["InputConfig"]["Freq"] = result.data["freq"] - Config["Path"]["Input_Approximately_Align"] = str( - Path(Config["Path"]["Input_Approximately_Align"]) / Path(ConfigParams.APPROXIMATELY_ALIGN_INFO + ConfigParams.ENDSWITH_CSV)) - Config["Path"]["Save"] = str( - Path(Config["Path"]["Save"]) / Path(save + str(Config["InputConfig"]["Freq"]) + ConfigParams.ENDSWITH_TXT)) else: return result - if (not Path(Config["Path"]["Input_Signal"]).exists()) or (not Path(Config["Path"]["Input_Peak"]).exists()): - return Result().failure(info=Constants.INPUT_FAILURE + Constants.FAILURE_REASON["Path_Not_Exist"]) + Config["Path"]["Input_Peak"] = str( + Path(Config["Path"]["Input_Peak"]) / Path(peak + str(Config["InputConfig"]["Freq"]) + ConfigParams.ENDSWITH_TXT)) + Config["Path"]["Input_Approximately_Align"] = str( + Path(Config["Path"]["Input_Approximately_Align"]) / Path( + ConfigParams.APPROXIMATELY_ALIGN_INFO + ConfigParams.ENDSWITH_CSV)) + Config["Path"]["Save"] = str( + Path(Config["Path"]["Save"]) / Path(save + str(Config["InputConfig"]["Freq"]) + ConfigParams.ENDSWITH_TXT)) + + if not Path(Config["Path"]["Input_Peak"]).exists(): + return Result().failure(info=Constants.INPUT_FAILURE + "\n" + + peak + ":" + + Config["Path"]["Input_Peak"] + + Constants.FAILURE_REASON["Path_Not_Exist"]) + if not Path(Config["Path"]["Input_Approximately_Align"]).exists(): + return Result().failure(info=Constants.INPUT_FAILURE + "\n" + + ConfigParams.APPROXIMATELY_ALIGN_INFO + ":" + + Config["Path"]["Input_Approximately_Align"] + + Constants.FAILURE_REASON["Path_Not_Exist"]) try: self.raw_data = read_csv(Config["Path"]["Input_Signal"], diff --git a/func/Module_precisely_align.py b/func/Module_precisely_align.py index 44e9af2..41f67ad 100644 --- a/func/Module_precisely_align.py +++ b/func/Module_precisely_align.py @@ -687,7 +687,7 @@ class MainWindow_precisely_align(QMainWindow): PublicFunc.finish_operation(self, ButtonState) def __slot_btn_calculate_correlation__(self, test1=None, shift_front=None, shift_back=None): - # TODO:这里有个未知的问BUG,虽然不影响功能,但会影响代码整洁性,第一个形参赋值为None时,之后使用变量时将会变成False,不知道为什么 + # TODO:这里有个未知的BUG,虽然不影响功能,但会影响代码整洁性,第一个形参赋值为None时,之后使用变量时将会变成False,不知道为什么 PublicFunc.__disableAllButton__(self, ButtonState) sender = self.sender() @@ -1458,52 +1458,63 @@ class Data: if result.status: Config["Path"]["Input_OrgBCG"] = result.data["path"] Config["InputConfig"]["orgBcgFreq"] = result.data["freq"] - Config["Path"]["Input_Approximately_Align"] = str( - Path(Config["Path"]["Input_Approximately_Align"]) / Path( - ConfigParams.APPROXIMATELY_ALIGN_INFO + ConfigParams.ENDSWITH_CSV)) - Config["Path"]["Save_AlignInfo"] = str( - Path(Config["Path"]["Save_AlignInfo"]) / Path( - ConfigParams.PRECISELY_ALIGN_INFO + ConfigParams.ENDSWITH_TXT)) - Config["Path"]["Save_OrgBCG"] = str( - Path(Config["Path"]["Save_OrgBCG"]) / Path( - ConfigParams.ORGBCG_SYNC + str(Config["InputConfig"]["orgBcgFreq"]) + ConfigParams.ENDSWITH_TXT)) else: return result + Config["Path"]["Input_Approximately_Align"] = str( + Path(Config["Path"]["Input_Approximately_Align"]) / Path( + ConfigParams.APPROXIMATELY_ALIGN_INFO + ConfigParams.ENDSWITH_CSV)) + Config["Path"]["Save_AlignInfo"] = str( + Path(Config["Path"]["Save_AlignInfo"]) / Path( + ConfigParams.PRECISELY_ALIGN_INFO + ConfigParams.ENDSWITH_TXT)) + Config["Path"]["Save_OrgBCG"] = str( + Path(Config["Path"]["Save_OrgBCG"]) / Path( + ConfigParams.ORGBCG_SYNC + str(Config["InputConfig"]["orgBcgFreq"]) + ConfigParams.ENDSWITH_TXT)) result = PublicFunc.examine_file(Config["Path"]["Input_BCG"], ConfigParams.BCG_FILTER) if result.status: Config["Path"]["Input_BCG"] = result.data["path"] Config["InputConfig"]["BCGFreq"] = result.data["freq"] - Config["Path"]["Input_Jpeak"] = str( - Path(Config["Path"]["Input_Jpeak"]) / Path(ConfigParams.JPEAK_REVISE_CORRECTED + str(Config["InputConfig"]["BCGFreq"]) + ConfigParams.ENDSWITH_TXT)) - Config["Path"]["Save_BCG"] = str( - Path(Config["Path"]["Save_BCG"]) / Path( - ConfigParams.BCG_SYNC + str(Config["InputConfig"]["BCGFreq"]) + ConfigParams.ENDSWITH_TXT)) - Config["Path"]["Save_Jpeak"] = str( - Path(Config["Path"]["Save_Jpeak"]) / Path( - ConfigParams.JPEAK_SYNC + str(Config["InputConfig"]["BCGFreq"]) + ConfigParams.ENDSWITH_TXT)) else: return result + Config["Path"]["Input_Jpeak"] = str( + Path(Config["Path"]["Input_Jpeak"]) / Path(ConfigParams.JPEAK_REVISE_CORRECTED + str( + Config["InputConfig"]["BCGFreq"]) + ConfigParams.ENDSWITH_TXT)) + Config["Path"]["Save_BCG"] = str( + Path(Config["Path"]["Save_BCG"]) / Path( + ConfigParams.BCG_SYNC + str(Config["InputConfig"]["BCGFreq"]) + ConfigParams.ENDSWITH_TXT)) + Config["Path"]["Save_Jpeak"] = str( + Path(Config["Path"]["Save_Jpeak"]) / Path( + ConfigParams.JPEAK_SYNC + str(Config["InputConfig"]["BCGFreq"]) + ConfigParams.ENDSWITH_TXT)) result = PublicFunc.examine_file(Config["Path"]["Input_ECG"], ConfigParams.ECG_FILTER) if result.status: Config["Path"]["Input_ECG"] = result.data["path"] Config["InputConfig"]["ECGFreq"] = result.data["freq"] - Config["Path"]["Input_Rpeak"] = str( - Path(Config["Path"]["Input_Rpeak"]) / Path(ConfigParams.RPEAK_FINAL_CORRECTED + str(Config["InputConfig"]["ECGFreq"]) + ConfigParams.ENDSWITH_TXT)) - Config["Path"]["Save_ECG"] = str( - Path(Config["Path"]["Save_ECG"]) / Path( - ConfigParams.ECG_SYNC + str(Config["InputConfig"]["ECGFreq"]) + ConfigParams.ENDSWITH_TXT)) - Config["Path"]["Save_Rpeak"] = str( - Path(Config["Path"]["Save_Rpeak"]) / Path( - ConfigParams.RPEAK_SYNC + str(Config["InputConfig"]["ECGFreq"]) + ConfigParams.ENDSWITH_TXT)) else: return result + Config["Path"]["Input_Rpeak"] = str( + Path(Config["Path"]["Input_Rpeak"]) / Path( + ConfigParams.RPEAK_FINAL_CORRECTED + str(Config["InputConfig"]["ECGFreq"]) + ConfigParams.ENDSWITH_TXT)) + Config["Path"]["Save_ECG"] = str( + Path(Config["Path"]["Save_ECG"]) / Path( + ConfigParams.ECG_SYNC + str(Config["InputConfig"]["ECGFreq"]) + ConfigParams.ENDSWITH_TXT)) + Config["Path"]["Save_Rpeak"] = str( + Path(Config["Path"]["Save_Rpeak"]) / Path( + ConfigParams.RPEAK_SYNC + str(Config["InputConfig"]["ECGFreq"]) + ConfigParams.ENDSWITH_TXT)) - if ((not Path(Config["Path"]["Input_OrgBCG"]).exists()) - or (not Path(Config["Path"]["Input_BCG"]).exists()) - or (not Path(Config["Path"]["Input_Jpeak"]).exists()) - or (not Path(Config["Path"]["Input_ECG"]).exists()) - or (not Path(Config["Path"]["Input_Rpeak"]).exists())): - return Result().failure(info=Constants.INPUT_FAILURE + Constants.FAILURE_REASON["Data_Not_Exist"]) + if not Path(Config["Path"]["Input_Jpeak"]).exists(): + return Result().failure(info=Constants.INPUT_FAILURE + "\n" + + ConfigParams.JPEAK_REVISE_CORRECTED + ":" + + Config["Path"]["Input_Jpeak"] + + Constants.FAILURE_REASON["Path_Not_Exist"]) + if not Path(Config["Path"]["Input_Rpeak"]).exists(): + return Result().failure(info=Constants.INPUT_FAILURE + "\n" + + ConfigParams.RPEAK_FINAL_CORRECTED + ":" + + Config["Path"]["Input_Rpeak"] + + Constants.FAILURE_REASON["Path_Not_Exist"]) + if not Path(Config["Path"]["Input_Approximately_Align"]).exists(): + return Result().failure(info=Constants.INPUT_FAILURE + "\n" + + ConfigParams.APPROXIMATELY_ALIGN_INFO + ":" + + Config["Path"]["Input_Approximately_Align"] + + Constants.FAILURE_REASON["Path_Not_Exist"]) try: self.raw_orgBcg = read_csv(Config["Path"]["Input_OrgBCG"], diff --git a/func/Module_preprocess.py b/func/Module_preprocess.py index dbf6921..8e37866 100644 --- a/func/Module_preprocess.py +++ b/func/Module_preprocess.py @@ -410,9 +410,6 @@ class Data: if Path(Config["Path"]["Input"]).is_file(): Config["Path"]["Input"] = str(Path(Config["Path"]["Input"]).parent) - if not Path(Config["Path"]["Input"]).exists(): - return Result().failure(info=Constants.INPUT_FAILURE + Constants.FAILURE_REASON["Path_Not_Exist"]) - result = PublicFunc.examine_file(Config["Path"]["Input"], signal) if result.status: Config["Path"]["Input"] = result.data["path"] diff --git a/func/utils/ConfigParams.py b/func/utils/ConfigParams.py index 254fa36..04582c6 100644 --- a/func/utils/ConfigParams.py +++ b/func/utils/ConfigParams.py @@ -68,6 +68,8 @@ class ConfigParams: SA_LABEL_SYNC: str = "SA Label_Sync" SA_LABEL_CORRECTED: str = "SA Label_corrected" SA_LABEL_ADD: str = "SA Label_add" + RESP_QUALITY_LABEL: str = "Resp_quality_label" + THO_PEAK: str = "Tho_peak_" # 数据粗同步 APPROXIMATELY_ALIGN_CONFIG_FILE_PATH: str = "./config/Config_approximately_align.yaml" @@ -250,6 +252,32 @@ class ConfigParams: ARTIFACT_LABEL_LABEL_TRANSPARENCY: float = 0.3 ARTIFACT_LABEL_ACTION_LABEL_ARTIFACT_SHORTCUT_KEY: str = "Z" + # 呼吸可用性及间期标注 + RESP_QUALITY_LABEL_CONFIG_FILE_PATH: str = "./config/Config_resp_quality_label.yaml" + RESP_QUALITY_LABEL_CONFIG_NEW_CONTENT: dict = { + "InputConfig": { + "OrgBCGFreq": 1000, + "ThoFreq": 100, + "OrgBCGUseFreq": 1000, + "ThoUseFreq": 100 + }, + "Threshold": { + "Low": 0.65, + "High": 0.8 + }, + "FindPeaks" : { + "MinInterval": 300, + "MinHeight": 0.1 + }, + "Filter": { + "BandPassLow": 0.1, + "BandPassHigh": 1 + } + } + RESP_QUALITY_LABEL_PREPROCESS_FC: int = 1 + RESP_QUALITY_LABEL_LABEL_TRANSPARENCY: float = 0.2 + RESP_QUALITY_LABEL_ACTION_LABEL_MULTIPLE_SHORTCUT_KEY: str = "Z" + # 睡眠呼吸暂停事件标注 SA_LABEL_CONFIG_FILE_PATH: str = "./config/Config_SA_label.yaml" SA_LABEL_CONFIG_NEW_CONTENT: dict = { @@ -314,7 +342,7 @@ class ConfigParams: RESP_QUALITY_LABEL_INPUT_THO_DEFAULT_FS: int = 200 RESP_QUALITY_LABEL_PARTS_TIME_SEC: int = 30 - RESP_QUALITY_LABEL_PREPROCESS_FC: int = 1 + RESP_QUALITY_LABEL_THRESHOLD1_DEFAULT: float = 0.65 RESP_QUALITY_LABEL_THRESHOLD2_DEFAULT: float = 0.8 @@ -323,9 +351,9 @@ class ConfigParams: RESP_QUALITY_LABEL_CUSTOM_LOW_DEFAULT: float = 0.1 RESP_QUALITY_LABEL_CUSTOM_HIGH_DEFAULT: float = 1 - RESP_QUALITY_LABEL_LABEL_TRANSPARENCY: float = 0.2 - RESP_QUALITY_LABEL_ACTION_LABEL_MULTIPLE_SHORTCUT_KEY: str = "Z" + + # 睡眠呼吸暂停事件打标 diff --git a/func/utils/Constants.py b/func/utils/Constants.py index 717a91b..ad4749a 100644 --- a/func/utils/Constants.py +++ b/func/utils/Constants.py @@ -133,6 +133,7 @@ class Constants: "Update_tableWidget_Exception": "(更新表格异常)", "Update_Info_Exception": "(更新信息异常)", "Label_Format_Exception": "(获取标签格式异常)", + "Calculate_Peak_Exception": "(计算峰值异常)", "res_orgBcg_Not_Exist": "(切割后orgBcg不存在)", "res_BCG_Not_Exist": "(切割后BCG不存在)", @@ -377,6 +378,23 @@ class Constants: background-color: #00ff00; /* 鼠标悬停时的背景颜色 */ }""" + # 呼吸可用性及间期标注 + RESP_QUALITY_LABEL_CALCULATING_PEAK: str = "正在计算峰值" + RESP_QUALITY_LABEL_CALCULATE_FINISHED: str = "计算完成" + RESP_QUALITY_LABEL_CALCULATE_FAILURE: str = "计算失败" + + RESP_QUALITY_LABEL_PLOT_LABEL_ORGBCG: str = "BDR_Sync by filter OrgBCG_Sync" + RESP_QUALITY_LABEL_PLOT_LABEL_THO: str = "THO_Sync after preprocess" + RESP_QUALITY_LABEL_PLOT_LABEL_THO_PEAKS: str = "Tho_peak" + RESP_QUALITY_LABEL_PLOT_LABEL_ARTIFACT: str = "Artifact" + RESP_QUALITY_LABEL_SPECTRUM_BDR_TITLE: str = "Spectrum of BDR_sync by filter OrgBCG_Sync" + RESP_QUALITY_LABEL_SPECTRUM_THO_TITLE: str = "Spectrum of THO_sync after preprocess" + RESP_QUALITY_LABEL_SPECTRUM_ORGBCG_LABEL: str = "orgBcg" + RESP_QUALITY_LABEL_SPECTRUM_BDR_LABEL: str = "BDR" + RESP_QUALITY_LABEL_SPECTRUM_THO_LABEL: str = "THO" + + RESP_QUALITY_LABEL_ACTION_LABEL_MULTIPLE_NAME: str = f"批量更改标签({ConfigParams.RESP_QUALITY_LABEL_ACTION_LABEL_MULTIPLE_SHORTCUT_KEY})" + # 睡眠呼吸暂停事件标注 SA_LABEL_JUMP: str = "跳转到事件" SA_LABEL_VIEWING_FIRST: str = "你正在查看第1个事件" @@ -477,14 +495,8 @@ class Constants: RESP_QUALITY_LABEL_INPUT_ARTIFACT_FAILURE_FORMAT: str = "导入体动失败,请检查体动标签格式" RESP_QUALITY_LABEL_INPUT_ARTIFACT_FAILURE_LENGTH: str = "导入体动失败,请检查体动长度是否为4的倍数" - RESP_QUALITY_LABEL_RUNNING: str = "开始执行任务<呼吸可用性及间期标注>" - RESP_QUALITY_LABEL_PLOT_LABEL_ORGBCG: str = "BDR_sync by filter orgBcg_sync" - RESP_QUALITY_LABEL_PLOT_LABEL_THO: str = "THO_sync after preprocess" - RESP_QUALITY_LABEL_PLOT_LABEL_THO_PEAKS: str = "THO_peak" - RESP_QUALITY_LABEL_PLOT_LABEL_ARTIFACT: str = "Artifact" RESP_QUALITY_LABEL_VIEWING_THE_FIRST_PART: str = "你正在查看第1段信号" RESP_QUALITY_LABEL_VIEWING_THE_LAST_PART: str = "你正在查看最后1段信号" - RESP_QUALITY_LABEL_ACTION_LABEL_MULTIPLE_NAME: str = f"批量更改标签({ConfigParams.RESP_QUALITY_LABEL_ACTION_LABEL_MULTIPLE_SHORTCUT_KEY})" RESP_QUALITY_LABEL_CUSTOM_NAVIGATIONTOOLBAR_WIDGET_NAME: str = "MainWindow" RESP_QUALITY_LABEL_BUTTON_PRESS_EVENT: str = "button_press_event" RESP_QUALITY_LABEL_BUTTON_RELEASE_EVENT: str = "button_release_event" @@ -503,11 +515,7 @@ class Constants: RESP_QUALITY_LABEL_C_QUALITY: int = -1 RESP_QUALITY_LABEL_LABELED: str = "已标注" RESP_QUALITY_LABEL_TOBELABELED: str = "未标注" - RESP_QUALITY_LABEL_SPECTRUM_BDR_TITLE: str = "Spectrum of BDR_sync by filter orgBcg_sync" - RESP_QUALITY_LABEL_SPECTRUM_THO_TITLE: str = "Spectrum of THO_sync after preprocess" - RESP_QUALITY_LABEL_SPECTRUM_ORGBCG_LABEL: str = "orgBcg" - RESP_QUALITY_LABEL_SPECTRUM_BDR_LABEL: str = "BDR" - RESP_QUALITY_LABEL_SPECTRUM_THO_LABEL: str = "THO" + RESP_QUALITY_LABEL_CUSTOM_FILTER_ARGS_ERROR: str = "orgBcg带通滤波频率设置范围应为数字,范围是0~1" RESP_QUALITY_LABEL_AUTOLABEL_ARGS_ERROR: str = "人工标注阈值设置范围应为数字,范围是0~1" RESP_QUALITY_LABEL_CHECK_ARGS_QUESTION_CONTENT: str = "你确定要执行此操作吗,请确保参数输入正确"