添加了<体动标注>的重采样
根据规范修改变量名称
This commit is contained in:
@ -12,6 +12,7 @@ from matplotlib.backends.backend_qtagg import FigureCanvasQTAgg
|
||||
from numpy.fft import fft, fftfreq
|
||||
from overrides import overrides
|
||||
from pandas import read_csv, DataFrame, concat
|
||||
from scipy.signal import resample
|
||||
from yaml import dump, load, FullLoader
|
||||
|
||||
from func.utils.PublicFunc import PublicFunc
|
||||
@ -90,21 +91,21 @@ class SettingWindow(QMainWindow):
|
||||
Config.update({
|
||||
"Path": {
|
||||
"Input_orgBcg": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_ORGBCG_ALIGNED /
|
||||
Path(str(self.sampID)) / Path(ConfigParams.ARTIFACT_LABEL_INPUT_ORGBCG_FILENAME +
|
||||
Path(str(self.sampID)) / Path(ConfigParams.ORGBCG_SYNC +
|
||||
str(Config["InputConfig"]["orgBcgFreq"]) +
|
||||
ConfigParams.ENDSWITH_TXT))),
|
||||
"Input_BCG": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_ORGBCG_ALIGNED /
|
||||
Path(str(self.sampID)) / Path(ConfigParams.ARTIFACT_LABEL_INPUT_BCG_FILENAME +
|
||||
Path(str(self.sampID)) / Path(ConfigParams.BCG_SYNC +
|
||||
str(Config["InputConfig"]["BCGFreq"]) +
|
||||
ConfigParams.ENDSWITH_TXT))),
|
||||
"Save_a": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_LABEL /
|
||||
Path(str(self.sampID)) / Path(ConfigParams.ARTIFACT_LABEL_SAVE_FILENAME_A +
|
||||
Path(str(self.sampID)) / Path(ConfigParams.ARTIFACT_A +
|
||||
ConfigParams.ENDSWITH_TXT))),
|
||||
"Save_b": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_LABEL /
|
||||
Path(str(self.sampID)) / Path(ConfigParams.ARTIFACT_LABEL_SAVE_FILENAME_B +
|
||||
Path(str(self.sampID)) / Path(ConfigParams.ARTIFACT_B +
|
||||
ConfigParams.ENDSWITH_TXT))),
|
||||
"Save_c": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_LABEL /
|
||||
Path(str(self.sampID)) / Path(ConfigParams.ARTIFACT_LABEL_SAVE_FILENAME_C +
|
||||
Path(str(self.sampID)) / Path(ConfigParams.ARTIFACT_C +
|
||||
ConfigParams.ENDSWITH_CSV)))
|
||||
}
|
||||
})
|
||||
@ -145,14 +146,14 @@ class SettingWindow(QMainWindow):
|
||||
str((Path(self.root_path) /
|
||||
ConfigParams.PUBLIC_PATH_ORGBCG_ALIGNED /
|
||||
Path(str(self.sampID)) /
|
||||
Path(ConfigParams.ARTIFACT_LABEL_INPUT_ORGBCG_FILENAME +
|
||||
Path(ConfigParams.ORGBCG_SYNC +
|
||||
str(self.ui.spinBox_input_freq_orgBcg.value()) +
|
||||
ConfigParams.ENDSWITH_TXT))))
|
||||
self.ui.plainTextEdit_file_path_input_BCG.setPlainText(
|
||||
str((Path(self.root_path) /
|
||||
ConfigParams.PUBLIC_PATH_ORGBCG_ALIGNED /
|
||||
Path(str(self.sampID)) /
|
||||
Path(ConfigParams.ARTIFACT_LABEL_INPUT_BCG_FILENAME +
|
||||
Path(ConfigParams.BCG_SYNC +
|
||||
str(self.ui.spinBox_input_freq_BCG.value()) +
|
||||
ConfigParams.ENDSWITH_TXT))))
|
||||
|
||||
@ -240,7 +241,7 @@ class MainWindow_artifact_label(QMainWindow):
|
||||
self.ax0.grid(True)
|
||||
self.ax0.xaxis.set_major_formatter(ConfigParams.FORMATTER)
|
||||
self.ax0.tick_params(axis='x', colors=Constants.PLOT_COLOR_WHITE)
|
||||
self.ax1 = self.fig.add_subplot(self.gs[1], sharex=self.ax0, sharey=self.ax0)
|
||||
self.ax1 = self.fig.add_subplot(self.gs[1], sharex=self.ax0)
|
||||
self.ax1.grid(True)
|
||||
self.ax1.xaxis.set_major_formatter(ConfigParams.FORMATTER)
|
||||
|
||||
@ -344,13 +345,13 @@ class MainWindow_artifact_label(QMainWindow):
|
||||
self.ax0.autoscale(False)
|
||||
self.ax1.autoscale(False)
|
||||
except Exception as e:
|
||||
return Result().failure(info=Constants.DRAWING_FAILURE + "\n" + format_exc())
|
||||
return Result().success(info=Constants.DRAWING_FINISHED)
|
||||
return Result().failure(info=Constants.DRAW_FAILURE + "\n" + format_exc())
|
||||
return Result().success(info=Constants.DRAW_FINISHED)
|
||||
else:
|
||||
self.canvas.draw()
|
||||
self.ax0.autoscale(False)
|
||||
self.ax1.autoscale(False)
|
||||
return Result().failure(info=Constants.DRAWING_FAILURE)
|
||||
return Result().failure(info=Constants.DRAW_FAILURE)
|
||||
|
||||
def __plot_artifact__(self):
|
||||
if len(self.ax0.patches) != 0:
|
||||
@ -524,9 +525,9 @@ class MainWindow_artifact_label(QMainWindow):
|
||||
self.ui.tableWidget_type_5.setItem(self.ui.tableWidget_type_5.rowCount() - 1, 1, QTableWidgetItem(str(data["startTime"])))
|
||||
self.ui.tableWidget_type_5.setItem(self.ui.tableWidget_type_5.rowCount() - 1, 2, QTableWidgetItem(str(data["endTime"])))
|
||||
except Exception as e:
|
||||
return Result().failure(info=Constants.ARTIFACT_LABEL_UPDATE_FAILURE + Constants.ARTIFACT_LABEL_FAILURE_REASON["Update_tableWidget_Exception"] + "\n" + format_exc())
|
||||
return Result().failure(info=Constants.UPDATE_FAILURE + Constants.FAILURE_REASON["Update_tableWidget_Exception"] + "\n" + format_exc())
|
||||
|
||||
return Result().success(info=Constants.ARTIFACT_LABEL_UPDATE_FINISHED)
|
||||
return Result().success(info=Constants.UPDATE_FINISHED)
|
||||
|
||||
def update_Info(self):
|
||||
try:
|
||||
@ -560,9 +561,9 @@ class MainWindow_artifact_label(QMainWindow):
|
||||
self.ui.spinBox_duration_type_4.setValue(artifact_total_duration[3])
|
||||
self.ui.spinBox_duration_type_5.setValue(artifact_total_duration[4])
|
||||
except Exception as e:
|
||||
return Result().failure(info=Constants.ARTIFACT_LABEL_UPDATE_FAILURE + Constants.ARTIFACT_LABEL_FAILURE_REASON["Update_Info_Exception"] + "\n" + format_exc())
|
||||
return Result().failure(info=Constants.UPDATE_FAILURE + Constants.FAILURE_REASON["Update_Info_Exception"] + "\n" + format_exc())
|
||||
|
||||
return Result().success(info=Constants.ARTIFACT_LABEL_UPDATE_FINISHED)
|
||||
return Result().success(info=Constants.UPDATE_FAILURE)
|
||||
|
||||
def __slot_btn_input__(self):
|
||||
PublicFunc.__disableAllButton__(self, ButtonState)
|
||||
@ -573,7 +574,7 @@ class MainWindow_artifact_label(QMainWindow):
|
||||
self.data = Data()
|
||||
|
||||
# 导入数据
|
||||
PublicFunc.progressbar_update(self, 1, 5, Constants.INPUTTING_DATA, 0)
|
||||
PublicFunc.progressbar_update(self, 1, 6, Constants.INPUTTING_DATA, 0)
|
||||
result = self.data.open_file()
|
||||
if not result.status:
|
||||
PublicFunc.text_output(self.ui, "(1/5)" + result.info, Constants.TIPS_TYPE_ERROR)
|
||||
@ -583,49 +584,63 @@ class MainWindow_artifact_label(QMainWindow):
|
||||
else:
|
||||
PublicFunc.text_output(self.ui, "(1/5)" + result.info, Constants.TIPS_TYPE_INFO)
|
||||
|
||||
# 重采样
|
||||
PublicFunc.progressbar_update(self, 2, 6, Constants.RESAMPLING_DATA, 0)
|
||||
result = self.data.resample()
|
||||
if not result.status:
|
||||
PublicFunc.text_output(self.ui, "(2/6)" + result.info, Constants.TIPS_TYPE_ERROR)
|
||||
PublicFunc.msgbox_output(self, result.info, Constants.MSGBOX_TYPE_ERROR)
|
||||
PublicFunc.finish_operation(self, ButtonState)
|
||||
return
|
||||
else:
|
||||
PublicFunc.text_output(self.ui, "(2/6)" + result.info, Constants.TIPS_TYPE_INFO)
|
||||
|
||||
self.__reset__()
|
||||
PublicFunc.finish_operation(self, ButtonState)
|
||||
|
||||
# 获取存档
|
||||
PublicFunc.progressbar_update(self, 2, 5, Constants.ARTIFACT_LABEL_LOADING_ARCHIVE, 50)
|
||||
PublicFunc.progressbar_update(self, 3, 6, Constants.LOADING_ARCHIVE, 50)
|
||||
result = self.data.get_archive()
|
||||
if not result.status:
|
||||
PublicFunc.text_output(self.ui, "(2/5)" + result.info, Constants.TIPS_TYPE_ERROR)
|
||||
PublicFunc.text_output(self.ui, "(3/6)" + result.info, Constants.TIPS_TYPE_ERROR)
|
||||
PublicFunc.msgbox_output(self, result.info, Constants.MSGBOX_TYPE_ERROR)
|
||||
PublicFunc.finish_operation(self, ButtonState)
|
||||
return
|
||||
else:
|
||||
PublicFunc.text_output(self.ui, "(2/5)" + result.info, Constants.TIPS_TYPE_INFO)
|
||||
PublicFunc.text_output(self.ui, "(3/6)" + result.info, Constants.TIPS_TYPE_INFO)
|
||||
|
||||
# 绘图
|
||||
PublicFunc.progressbar_update(self, 3, 5, Constants.DRAWING_DATA, 60)
|
||||
PublicFunc.progressbar_update(self, 4, 6, Constants.DRAWING_DATA, 60)
|
||||
result = self.__plot__()
|
||||
if not result.status:
|
||||
PublicFunc.text_output(self.ui, "(3/5)" + result.info, Constants.TIPS_TYPE_ERROR)
|
||||
PublicFunc.text_output(self.ui, "(4/6)" + result.info, Constants.TIPS_TYPE_ERROR)
|
||||
PublicFunc.msgbox_output(self, result.info, Constants.MSGBOX_TYPE_ERROR)
|
||||
PublicFunc.finish_operation(self, ButtonState)
|
||||
return
|
||||
else:
|
||||
PublicFunc.text_output(self.ui, "(3/5)" + result.info, Constants.TIPS_TYPE_INFO)
|
||||
PublicFunc.text_output(self.ui, "(4/6)" + result.info, Constants.TIPS_TYPE_INFO)
|
||||
|
||||
# 更新表格
|
||||
PublicFunc.progressbar_update(self, 4, 5, Constants.ARTIFACT_LABEL_UPDATING_TABLE, 90)
|
||||
PublicFunc.progressbar_update(self, 5, 6, Constants.UPDATING_TABLEWIDGET, 90)
|
||||
result = self.update_tableWidget()
|
||||
if not result.status:
|
||||
PublicFunc.text_output(self.ui, "(4/5)" + result.info, Constants.TIPS_TYPE_ERROR)
|
||||
PublicFunc.text_output(self.ui, "(5/6)" + result.info, Constants.TIPS_TYPE_ERROR)
|
||||
PublicFunc.msgbox_output(self, result.info, Constants.MSGBOX_TYPE_ERROR)
|
||||
PublicFunc.finish_operation(self, ButtonState)
|
||||
return
|
||||
else:
|
||||
PublicFunc.text_output(self.ui, "(4/5)" + result.info, Constants.TIPS_TYPE_INFO)
|
||||
PublicFunc.text_output(self.ui, "(5/6)" + result.info, Constants.TIPS_TYPE_INFO)
|
||||
|
||||
# 更新信息
|
||||
PublicFunc.progressbar_update(self, 5, 5, Constants.ARTIFACT_LABEL_UPDATING_INFO, 95)
|
||||
PublicFunc.progressbar_update(self, 6, 6, Constants.UPDATING_INFO, 95)
|
||||
result = self.update_Info()
|
||||
if not result.status:
|
||||
PublicFunc.text_output(self.ui, "(5/5)" + result.info, Constants.TIPS_TYPE_ERROR)
|
||||
PublicFunc.text_output(self.ui, "(6/6)" + result.info, Constants.TIPS_TYPE_ERROR)
|
||||
PublicFunc.msgbox_output(self, result.info, Constants.MSGBOX_TYPE_ERROR)
|
||||
PublicFunc.finish_operation(self, ButtonState)
|
||||
return
|
||||
else:
|
||||
PublicFunc.text_output(self.ui, "(5/5)" + result.info, Constants.TIPS_TYPE_INFO)
|
||||
PublicFunc.text_output(self.ui, "(6/6)" + result.info, Constants.TIPS_TYPE_INFO)
|
||||
|
||||
self.__reset__()
|
||||
self.figToolbar.action_Label_Artifact.setEnabled(True)
|
||||
@ -1159,7 +1174,7 @@ class Data:
|
||||
|
||||
def open_file(self):
|
||||
if (not Path(Config["Path"]["Input_orgBcg"]).exists()) or (not Path(Config["Path"]["Input_BCG"]).exists()):
|
||||
return Result().failure(info=Constants.INPUT_FAILURE + Constants.ARTIFACT_LABEL_FAILURE_REASON["Data_Path_Not_Exist"])
|
||||
return Result().failure(info=Constants.INPUT_FAILURE + Constants.FAILURE_REASON["Path_Not_Exist"])
|
||||
|
||||
try:
|
||||
self.orgBcg = read_csv(Config["Path"]["Input_orgBcg"],
|
||||
@ -1169,18 +1184,35 @@ class Data:
|
||||
encoding=ConfigParams.UTF8_ENCODING,
|
||||
header=None).to_numpy().reshape(-1)
|
||||
except Exception as e:
|
||||
return Result().failure(info=Constants.INPUT_FAILURE + Constants.ARTIFACT_LABEL_FAILURE_REASON["Read_Data_Exception"] + "\n" + format_exc())
|
||||
return Result().failure(info=Constants.INPUT_FAILURE + Constants.FAILURE_REASON["Open_Data_Exception"] + "\n" + format_exc())
|
||||
|
||||
# 检查同步后的orgBcg信号和同步后的BCG信号长度是否相同
|
||||
if len(self.orgBcg) != len(self.BCG):
|
||||
return Result().failure(info=Constants.INPUT_FAILURE + Constants.ARTIFACT_LABEL_FAILURE_REASON["Data_Length_not_Correct"])
|
||||
return Result().failure(info=Constants.INPUT_FAILURE + Constants.FAILURE_REASON["Data_Length_not_Correct"])
|
||||
|
||||
return Result().success(info=Constants.INPUT_FINISHED)
|
||||
|
||||
def resample(self):
|
||||
if self.orgBcg is None:
|
||||
Result().failure(info=Constants.RESAMPLE_FAILURE + Constants.FAILURE_REASON["Data_Not_Exist"])
|
||||
|
||||
try:
|
||||
if Config["InputConfig"]["orgBcgFreq"] != Config["InputConfig"]["UseFreq"]:
|
||||
self.orgBcg = resample(self.orgBcg,
|
||||
int(len(self.orgBcg) *
|
||||
(Config["InputConfig"]["UseFreq"] / Config["InputConfig"]["orgBcgFreq"])))
|
||||
else:
|
||||
return Result().success(info=Constants.RESAMPLE_NO_NEED)
|
||||
except Exception as e:
|
||||
Result().failure(info=Constants.RESAMPLE_FAILURE +
|
||||
Constants.FAILURE_REASON["Resample_Exception"] + "\n" + format_exc())
|
||||
|
||||
return Result().success(info=Constants.RESAMPLE_FINISHED)
|
||||
|
||||
def get_archive(self):
|
||||
if not Path(Config["Path"]["Save_a"]).exists():
|
||||
self.Artifact_a = []
|
||||
return Result().success(info=Constants.ARTIFACT_LABEL_ARCHIVE_NOT_EXIST)
|
||||
return Result().success(info=Constants.ARCHIVE_NOT_EXIST)
|
||||
else:
|
||||
self.Artifact_a = read_csv(Config["Path"]["Save_a"],
|
||||
encoding=ConfigParams.UTF8_ENCODING,
|
||||
@ -1188,7 +1220,7 @@ class Data:
|
||||
try:
|
||||
# 检查体动标签正确性,长度
|
||||
if len(self.Artifact_a) % 4 != 0:
|
||||
return Result().failure(info=Constants.INPUT_FAILURE + Constants.ARTIFACT_LABEL_FAILURE_REASON[
|
||||
return Result().failure(info=Constants.INPUT_FAILURE + Constants.FAILURE_REASON[
|
||||
"Artifact_Format_Not_Correct"])
|
||||
for i in range(0, len(self.Artifact_a), 4):
|
||||
unit_data = self.Artifact_a[i:i + 4]
|
||||
@ -1196,10 +1228,10 @@ class Data:
|
||||
break
|
||||
self.df_Artifact_a.loc[len(self.df_Artifact_a)] = [int(unit_data[j]) for j in range(4)]
|
||||
except Exception as e:
|
||||
return Result().failure(info=Constants.INPUT_FAILURE + Constants.ARTIFACT_LABEL_FAILURE_REASON[
|
||||
return Result().failure(info=Constants.INPUT_FAILURE + Constants.FAILURE_REASON[
|
||||
"Get_Artifact_Format_Exception"] + "\n" + format_exc())
|
||||
|
||||
return Result().success(info=Constants.ARTIFACT_LABEL_ARCHIVE_EXIST)
|
||||
return Result().success(info=Constants.ARCHIVE_EXIST)
|
||||
|
||||
def save(self, amount, duration):
|
||||
try:
|
||||
@ -1224,10 +1256,10 @@ class Data:
|
||||
self.df_Artifact_a.to_csv(Path(Config["Path"]["Save_c"]), index=False,
|
||||
encoding=ConfigParams.GBK_ENCODING)
|
||||
except Exception as e:
|
||||
return Result().failure(info=Constants.SAVING_FAILURE + Constants.ARTIFACT_LABEL_FAILURE_REASON[
|
||||
return Result().failure(info=Constants.SAVE_FAILURE + Constants.FAILURE_REASON[
|
||||
"Save_Exception"] + "\n" + format_exc())
|
||||
|
||||
return Result().success(info=Constants.SAVING_FINISHED)
|
||||
return Result().success(info=Constants.SAVE_FINISHED)
|
||||
|
||||
|
||||
class CustomNavigationToolbar(NavigationToolbar2QT):
|
||||
|
||||
Reference in New Issue
Block a user