@ -9,7 +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
from numpy import array , append , sum as np_sum , nonzero
from numpy . fft import fft , fftfreq
from overrides import overrides
from pandas import read_csv , DataFrame , concat
@ -655,7 +655,12 @@ class MainWindow_artifact_label(QMainWindow):
def __slot_btn_label__ ( self ) :
sender = self . sender ( )
flag = False
select_row = array ( [ ] ) . astype ( dict )
select_row = [ ]
select_type = array ( [ 0 , 0 , 0 , 0 , 0 ] )
flagf = False
flagb = False
start_time = 0
end_time = 0
if sender == self . ui . pushButton_type_1 :
type = 1
@ -678,61 +683,149 @@ class MainWindow_artifact_label(QMainWindow):
for index , row in self . data . df_Artifact_a . iterrows ( ) :
value_startTime = row [ ' startTime ' ]
value_endTime = row [ ' endTime ' ]
value_type = row [ ' type ' ]
# 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_t ime.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)
if ( ( value_startTime < = int ( self . ui . lineEdit_end_time . text ( ) ) < = value_endTime ) or
( value_startTime < = int ( self . ui . lineEdit_start_time . text ( ) ) < = value _endT ime) or
( value_startTime > = int ( self . ui . lineEdit_start_time . text ( ) ) and value_endTime < = int ( self . ui . lineEdit_end_time . text ( ) ) ) or
( 0 < ( int ( self . ui . lineEdit_start_time . text ( ) ) - value_endTime ) < = ( 2 * Config [ " InputConfig " ] [ " UseFreq " ] ) ) or
( 0 < ( value_startTime - int ( self . ui . lineEdit_end_time . text ( ) ) ) < = ( 2 * Config [ " InputConfig " ] [ " UseFreq " ] ) ) ) :
select_row . append ( row . to_dict ( ) )
if row [ ' type ' ] == 1 :
select_type [ 0 ] = select_type [ 0 ] + 1
elif row [ ' type ' ] == 2 :
select_type [ 1 ] = select_type [ 1 ] + 1
elif row [ ' type ' ] == 3 :
select_type [ 2 ] = select_type [ 2 ] + 1
elif row [ ' type ' ] == 4 :
select_type [ 3 ] = select_type [ 3 ] + 1
elif row [ ' type ' ] == 5 :
select_type [ 4 ] = select_type [ 4 ] + 1
if ( 0 < ( int ( self . ui . lineEdit_start_time . text ( ) ) - value_endTime ) < = ( 2 * Config [ " InputConfig " ] [ " UseFreq " ] ) ) and ( value_type == type ) :
flagf = True
if ( 0 < ( value_startTime - int ( self . ui . lineEdit_end_time . text ( ) ) ) < = ( 2 * Config [ " InputConfig " ] [ " UseFreq " ] ) ) and ( value_type == type ) :
flagb = True
# 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_MERG E , 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
count = np_sum ( select_type > = 1 )
if count > = 2 or ( count == 1 and nonze ro( select_type ) [ 0 ] [ 0 ] + 1 == type ) :
if count > = 2 :
reply = QMessageBox . question ( self , ' 确认 ' ,
' {} {} ' . format ( Constants . ARTIFACT_LABEL_MULTIPLE_ARTIFACT_COVER_OR_DELET E , [ d [ " number" ] for d in select_row ] ) ,
QMessageBox . Yes | QMessageBox . No ,
QMessageBox . No )
if reply == QMessageBox . No :
return
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 = conca t( [ 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 (
if flagf == True and flagb == False :
if type == 1 or type == 2 or type == 3 :
PublicFunc . msgbox_output ( self , Constants . ARTIFACT_LABEL_FRONT_TWO_SECONDS_MERGE ,
Constants . MSGBOX_TYPE_INFO )
start_time = select_row [ 0 ] [ ' startTime ' ]
end_time = in t ( self . ui . lineEdit_end_time . text ( ) )
elif type == 4 or type == 5 :
PublicFunc . msgbox_output ( self , Constants . ARTIFACT_LABEL_FRONT_TWO_SECONDS_WARNING ,
Constants . MSGBOX_TYPE_INFO )
select_row = select_row [ 1 : ]
start_time = int ( self . ui . lineEdit_start_time . text ( ) )
end_time = int ( self . ui . lineEdit_end_time . text ( ) )
if flagf == False and flagb == True :
if type == 1 or type == 2 or type == 3 :
PublicFunc . msgbox_output ( self , Constants . ARTIFACT_LABEL_BACK_TWO_SECONDS_MERGE ,
Constants . MSGBOX_TYPE_INFO )
start_time = int ( self . ui . lineEdit_start_time . text ( ) )
end_time = select_row [ - 1 ] [ ' endTime ' ]
elif type == 4 or type == 5 :
PublicFunc . msgbox_output ( self , Constants . ARTIFACT_LABEL_BACK_TWO_SECONDS_WARNING ,
Constants . MSGBOX_TYPE_INFO )
select_row = select_row [ : - 1 ]
start_time = int ( self . ui . lineEdit_start_time . text ( ) )
end_time = int ( self . ui . lineEdit_end_time . text ( ) )
if flagf == True and flagb == True :
if type == 1 or type == 2 or type == 3 :
PublicFunc . msgbox_output ( self , Constants . ARTIFACT_LABEL_FRONT_AND_BACK_TWO_SECONDS_MERGE ,
Constants . MSGBOX_TYPE_INFO )
start_time = select_row [ 0 ] [ ' startTime ' ]
end_time = select_row [ - 1 ] [ ' endTime ' ]
elif type == 4 or type == 5 :
PublicFunc . msgbox_output ( self , Constants . ARTIFACT_LABEL_FRONT_AND_BACK_TWO_SECONDS_WARNING ,
Constants . MSGBOX_TYPE_INFO )
select_row = select_row [ 1 : - 1 ]
start_time = int ( self . ui . lineEdit_start_time . text ( ) )
end_time = int ( self . ui . lineEdit_end_time . text ( ) )
if flagf == False and flagb == False :
start_time = int ( self . ui . lineEdit_start_time . text ( ) )
end_time = int ( self . ui . lineEdit_end_time . text ( ) )
for select_each_row in select_row :
self . data . df_Artifact_a = self . data . df_Artifact_a [ self . data . df_Artifact_a [ ' number ' ] != select_each_row [ " number " ] ]
else :
select_row = [ ]
select_type = array ( [ 0 , 0 , 0 , 0 , 0 ] )
for index , row in self . data . df_Artifact_a . iterrows ( ) :
value_startTime = row [ ' startTime ' ]
value_endTime = row [ ' endTime ' ]
value_type = row [ ' type ' ]
if ( ( value_startTime < = int ( self . ui . lineEdit_end_time . text ( ) ) < = value_endTime ) or
( value_startTime < = int ( self . ui . lineEdit_start_time . text ( ) ) < = value_endTime ) or
( value_startTime > = int ( self . ui . lineEdit_start_time . text ( ) ) and value_endTime < = int (
self . ui . lineEdit_end_time . text ( ) ) ) ) :
select_row . append ( row . to_dict ( ) )
if row [ ' type ' ] == 1 :
select_type [ 0 ] = select_type [ 0 ] + 1
elif row [ ' type ' ] == 2 :
select_type [ 1 ] = select_type [ 1 ] + 1
elif row [ ' type ' ] == 3 :
select_type [ 2 ] = select_type [ 2 ] + 1
elif row [ ' type ' ] == 4 :
select_type [ 3 ] = select_type [ 3 ] + 1
elif row [ ' type ' ] == 5 :
select_type [ 4 ] = select_type [ 4 ] + 1
count = np_sum ( select_type > = 1 )
if ( count == 1 and nonzero ( select_type ) [ 0 ] [ 0 ] + 1 != type ) :
reply = QMessageBox . question ( self , ' 确认 ' ,
' {} {} ' . format ( Constants . ARTIFACT_LABEL_SINGLE_TYPE_NOT_EQUAL ,
[ d [ " number " ] for d in select_row ] ) ,
QMessageBox . Yes | QMessageBox . No ,
QMessageBox . No )
if reply == QMessageBox . No :
return
start_time = int ( self . ui . lineEdit_start_time . text ( ) )
end_time = int ( self . ui . lineEdit_end_time . text ( ) )
for select_each_row in select_row :
self . data . df_Artifact_a = self . data . df_Artifact_a [ self . data . df_Artifact_a [ ' number ' ] != select_each_row [ " number " ] ]
elif count == 0 :
start_time = int ( self . ui . lineEdit_start_time . text ( ) )
end_time = int ( self . ui . lineEdit_end_time . text ( ) )
else :
raise ValueError ( " count值不存在 " )
new_row = {
' number ' : 1 ,
' type ' : int ( type ) ,
' startTime ' : start_time ,
' endTime ' : end_time
}
self . data . df_Artifact_a = concat ( [ self . data . df_Artifact_a , DataFrame ( [ new_row ] ) ] , ignore_index = True )
self . data . df_Artifact_a [ [ ' type ' , ' startTime ' , ' endTime ' ] ] = 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
self . data . df_Artifact_a [ ' number ' ] = range ( 1 , len ( self . data . df_Artifact_a ) + 1 )
self . update_tableWidget ( )
self . update_Info ( )
self . __plot_artifact__ ( )
target_row = self . data . df_Artifact_a [
self . data . df_Artifact_a . eq ( int ( self . ui . lineEdit_start_time . text ( ) ) ) . any ( axis = 1 ) ]
target_row = self . data . df_Artifact_a [ self . data . df_Artifact_a . eq ( start_time ) . any ( axis = 1 ) ]
if not target_row . empty :
first_column_value = target_row . iloc [ 0 , 0 ] # 获取第1列的值
else :
raise AttributeError ( )
PublicFunc . text_output ( self . ui , f " 新增体动标签 { first_column_value } , 类型 { new_row [ ' type ' ] } ,从 { int ( self . ui . lineEdit_start_time . text ( ) ) } ms到 { int ( self . ui . lineEdit_end_time . text ( ) ) } ms " , Constants . TIPS_TYPE_INFO )
PublicFunc . text_output ( self . ui , f " 新增体动标签 { first_column_value } , 类型 { new_row [ ' type ' ] } ,从 { int ( start_time ) } ms到 { int ( end_time ) } ms " , Constants . TIPS_TYPE_INFO )
self . save ( )