3737from skimage .draw .draw import polygon
3838
3939
40+ class QtBoxStyleProgressBar (QtWidgets .QProgressBar ):
41+ # copy from qtbox
42+ def __init__ (self ):
43+ super (QtBoxStyleProgressBar , self ).__init__ ()
44+ self .setTextVisible (False )
45+ self .setStyleSheet ("""
46+ QProgressBar {
47+ border: 2px solid #888783;
48+ border-radius: 5px;
49+ }
50+
51+ QProgressBar::chunk {
52+ background-color: #74d65f;
53+ border-radius: 2px;
54+ width: 9px;
55+ margin: 0.5px;
56+ }
57+ """ )
58+
59+
4060def calculate_area (points ):
4161 area = 0
4262 num_points = len (points )
@@ -146,6 +166,11 @@ def run(self):
146166 print ('self.start_frame_idx: ' , self .start_frame_idx )
147167 print ('self.max_frame_num_to_track: ' , self .max_frame_num_to_track )
148168
169+ if self .max_frame_num_to_track is not None :
170+ total = self .max_frame_num_to_track
171+ else :
172+ total = len (self .mainwindow .files_list ) - self .start_frame_idx + 1
173+
149174 with torch .inference_mode (), torch .autocast (self .mainwindow .segany_video .device ,
150175 dtype = self .mainwindow .segany_video .model_dtype ):
151176
@@ -194,7 +219,7 @@ def run(self):
194219 group_object_dict [group ]['mask' ] = group_object_dict [group ]['mask' ] + mask
195220
196221 if len (group_object_dict ) < 1 :
197- self .tag .emit (0 , self . max_frame_num_to_track , True , True , 'Please label objects before video segment.' )
222+ self .tag .emit (0 , total , True , True , 'Please label objects before video segment.' )
198223 return
199224 try :
200225 for group , object_dict in group_object_dict .items ():
@@ -274,12 +299,12 @@ def run(self):
274299
275300 annotation .objects = objects
276301 annotation .save_annotation ()
277- self .tag .emit (index , self . max_frame_num_to_track , False , False , '' )
302+ self .tag .emit (index , total , False , False , '' )
278303
279- self .tag .emit (index , self . max_frame_num_to_track , True , False , '' )
304+ self .tag .emit (index , total , True , False , '' )
280305
281306 except Exception as e :
282- self .tag .emit (index , self . max_frame_num_to_track , True , True , '{}' .format (e ))
307+ self .tag .emit (index , total , True , True , '{}' .format (e ))
283308
284309
285310class InitSegAnyThread (QThread ):
@@ -531,6 +556,7 @@ def seg_video_start(self, max_frame_num_to_track=None):
531556 return
532557
533558 self .setEnabled (False )
559+ self .statusbar_change_status (is_message = False )
534560 self .segany_video_thread .start_frame_idx = self .current_index
535561 self .segany_video_thread .max_frame_num_to_track = max_frame_num_to_track
536562 self .segany_video_thread .start ()
@@ -540,7 +566,11 @@ def seg_video_finish(self, current, total, finished, is_error, message):
540566 QtWidgets .QMessageBox .warning (self , 'warning' , message )
541567
542568 print ('Segment video: {}/{}' .format (current , total ))
569+ self .progressbar .setMaximum (total )
570+ self .progressbar .setValue (current )
543571 if finished :
572+ self .statusbar_change_status (is_message = True )
573+ self .progressbar .setValue (0 )
544574 self .setEnabled (True )
545575
546576
@@ -629,6 +659,12 @@ def init_ui(self):
629659 """ )
630660 self .statusbar .addPermanentWidget (self .modeState )
631661
662+ self .progressbar = QtBoxStyleProgressBar ()
663+ self .progressbar .setTextVisible (False )
664+ self .progressbar .setFixedWidth (500 )
665+ self .progressbar .setVisible (False )
666+ self .statusbar .addPermanentWidget (self .progressbar )
667+
632668 self .update_menuSAM ()
633669
634670 # mask alpha
@@ -697,6 +733,13 @@ def init_ui(self):
697733
698734 self .trans = QtCore .QTranslator ()
699735
736+ def statusbar_change_status (self , is_message :bool = True ):
737+ self .labelGPUResource .setVisible (is_message )
738+ self .labelData .setVisible (is_message )
739+ self .labelCoord .setVisible (is_message )
740+ self .modeState .setVisible (is_message )
741+ self .progressbar .setVisible (not is_message )
742+
700743 def update_menuSAM (self ):
701744 #
702745 self .menuSAM_model .clear ()
0 commit comments