@@ -445,19 +445,25 @@ def plot_scores(self, name: str, dpi : int = 300) -> None:
445445 figure .savefig (fname = name , dpi = dpi , bbox_inches = 'tight' )
446446
447447
448- def delete_last_tracking_predictions (self , num :int ) -> None :
448+ def delete_last_tracking_predictions (self , bboxes : dict , num :int ) -> dict :
449449 """ Delete the latest tracking predictions e.g. to clear bad tracking values
450450
451451 Args:
452+ bboxes (dict): the raw bboxes
452453 num (int): number of frames to remove from predicted boxes
454+
455+ Returns:
456+ dict: the filtered bboxes
453457 """
454- if len (self .bboxes ['Woman' ]) <= num :
455- self .bboxes ['Woman' ] = []
456- self .bboxes ['Men' ] = []
457- else :
458- for _ in range (num ):
459- del self .bboxes ['Woman' ][- 1 ]
460- if self .params .track_men : del self .bboxes ['Men' ][- 1 ]
458+ if len (bboxes ['Woman' ].keys ()) > 0 :
459+ keys = [k for k in bboxes ['Woman' ].keys ()]
460+ del_keys = [k for k in keys if k > max (keys ) - num ]
461+ for k in del_keys :
462+ try :
463+ del bboxes ['Woman' ][k ]
464+ if self .params .track_men : del bboxes ['Men' ][k ]
465+ except : pass
466+ return bboxes
461467
462468
463469 def preview_scaling (self , preview_image :np .ndarray , post_scale :float = 1.0 ) -> np .ndarray :
@@ -701,20 +707,20 @@ def tracking(self) -> str:
701707
702708 if self .was_key_pressed ('q' ) or cv2 .waitKey (1 ) == ord ('q' ):
703709 status = 'Tracking stopped by user'
704- self .delete_last_tracking_predictions (int ((self .get_average_tracking_fps ()+ 1 )* 2.1 ))
710+ bboxes = self .delete_last_tracking_predictions (bboxes , int ((self .get_average_tracking_fps ()+ 1 )* 2.0 ))
705711 break
706712
707713 (successWoman , bboxWoman ) = trackerWoman .result ()
708714 if not successWoman :
709715 status = 'Tracker Woman Lost'
710- self .delete_last_tracking_predictions ((self .params .skip_frames + 1 )* 3 )
716+ bboxes = self .delete_last_tracking_predictions (bboxes , (self .params .skip_frames + 1 )* 3 )
711717 break
712718
713719 if self .params .track_men :
714720 (successMen , bboxMen ) = trackerMen .result ()
715721 if not successMen :
716722 status = 'Tracking Men Lost'
717- self .delete_last_tracking_predictions ((self .params .skip_frames + 1 )* 3 )
723+ bboxes = self .delete_last_tracking_predictions (bboxes , (self .params .skip_frames + 1 )* 3 )
718724 break
719725
720726 last_frame = frame
0 commit comments