@@ -464,24 +464,34 @@ def plot_scores(self, name: str, dpi : int = 300) -> None:
464464 figure .savefig (fname = name , dpi = dpi , bbox_inches = 'tight' )
465465
466466
467- def delete_last_tracking_predictions (self , bboxes : dict , num :int ) -> dict :
467+ def correct_bboxes (self , bboxes : dict , num :int ) -> dict :
468468 """ Delete the latest tracking predictions e.g. to clear bad tracking values
469469
470470 Args:
471- bboxes (dict): the raw bboxes
471+ bboxes (dict): the raw bboxes
472472 num (int): number of frames to remove from predicted boxes
473473
474474 Returns:
475475 dict: the filtered bboxes
476476 """
477+ if self .params .track_men :
478+ last_relevant_prediction = min ((
479+ max ([0 ]+ [k for k in bboxes ['Woman' ].keys ()]),
480+ max ([0 ]+ [k for k in bboxes ['Men' ].keys ()])
481+ ))
482+ else :
483+ last_relevant_prediction = max ([0 ]+ [k for k in bboxes ['Woman' ].keys ()])
484+
477485 if len (bboxes ['Woman' ].keys ()) > 0 :
478- keys = [k for k in bboxes ['Woman' ].keys ()]
479- del_keys = [k for k in keys if k > max (keys ) - num ]
480- for k in del_keys :
481- try :
482- del bboxes ['Woman' ][k ]
483- if self .params .track_men : del bboxes ['Men' ][k ]
486+ for k in [k for k in bboxes ['Woman' ].keys () if k > last_relevant_prediction - num ]:
487+ try : del bboxes ['Woman' ][k ]
484488 except : pass
489+
490+ if len (bboxes ['Men' ].keys ()) > 0 :
491+ for k in [k for k in bboxes ['Men' ].keys () if k > last_relevant_prediction - num ]:
492+ try : del bboxes ['Men' ][k ]
493+ except : pass
494+
485495 return bboxes
486496
487497
@@ -707,6 +717,7 @@ def tracking(self) -> str:
707717 status = "End of video reached"
708718 self .clear_keypress_queue ()
709719 last_frame , frame_num = None , 1 # first frame is init frame
720+ delete_last_predictions = 0
710721 while video .isOpen ():
711722 cycle_start = time .time ()
712723 frame = video .read ()
@@ -750,32 +761,32 @@ def tracking(self) -> str:
750761
751762 if self .was_key_pressed ('q' ) or cv2 .waitKey (1 ) == ord ('q' ):
752763 status = 'Tracking stopped by user'
753- bboxes = self . delete_last_tracking_predictions ( bboxes , int ((self .get_average_tracking_fps ()+ 1 )* 2.0 ) )
764+ delete_last_predictions = int ((self .get_average_tracking_fps ()+ 1 )* 2.0 )
754765 break
755766
756767 (woman_tracker_status , bbox_woman ) = tracker_woman .result ()
757768 if woman_tracker_status == StaticVideoTracker .Status .FEATURE_OUTSIDE :
758769 status = 'Woman ' + woman_tracker_status
759- bboxes = self . delete_last_tracking_predictions ( bboxes , ( self .params .skip_frames + 1 )* 2 )
770+ delete_last_predictions = ( self .params .skip_frames + 1 )* 2
760771 break
761772
762773 if woman_tracker_status == StaticVideoTracker .Status .TRACKING_LOST :
763774 if len (bboxes ['Woman' ]) == 0 or frame_num - max ([x for x in bboxes ['Woman' ].keys ()]) >= tracking_lost_frames :
764775 status = 'Woman ' + woman_tracker_status
765- bboxes = self . delete_last_tracking_predictions ( bboxes , ( self .params .skip_frames + 1 )* 2 )
776+ delete_last_predictions = ( self .params .skip_frames + 1 )* 2
766777 break
767778
768779 if self .params .track_men :
769780 (men_tracker_status , bbox_men ) = tracker_men .result ()
770781 if men_tracker_status == StaticVideoTracker .Status .FEATURE_OUTSIDE :
771782 status = 'Men ' + men_tracker_status
772- bboxes = self . delete_last_tracking_predictions ( bboxes , ( self .params .skip_frames + 1 )* 2 )
783+ delete_last_predictions = ( self .params .skip_frames + 1 )* 2
773784 break
774785
775786 if men_tracker_status == StaticVideoTracker .Status .TRACKING_LOST :
776787 if len (bboxes ['Men' ]) == 0 or frame_num - max ([x for x in bboxes ['Men' ].keys ()]) >= tracking_lost_frames :
777788 status = 'Men ' + men_tracker_status
778- bboxes = self . delete_last_tracking_predictions ( bboxes , ( self .params .skip_frames + 1 )* 2 )
789+ delete_last_predictions = ( self .params .skip_frames + 1 )* 2
779790 break
780791
781792 last_frame = frame
@@ -784,6 +795,7 @@ def tracking(self) -> str:
784795 wait = cycle_time_in_ms - (time .time () - cycle_start )* float (1000 )
785796 if wait > 0 : time .sleep (wait / float (1000 ))
786797
798+ bboxes = self .correct_bboxes (bboxes , delete_last_predictions )
787799 self .__show_loading_screen (first_frame .shape )
788800 video .stop ()
789801 self .logger .info (status )
0 commit comments