Research Article

A Reliable Event-Driven Strategy for Real-Time Multiple Object Tracking Using Static Cameras

Algorithm 4

The tracking events algorithm.
Inputs data:
SSB: Set of N objects Segmented Bounded Boxes
SSB =
KBB: Set of M objects EKF Bounded Boxes
KBB =
AT: Set of M Appearance Templates
AT =
Algorithm
Defining Events for each Workstation:
 For each ϵ SSB, test E1, E2, and E3 in order
 E1 :
   if .not_matched (one in )
   Then
    Trigger R1
    go to OUT1
 E2:
   if .not_matched (any KBB) AND
      .matched (one in )
   Then
     Trigger R2
     go to OUT1
 E3:
   if size ( ) ≪ matched size ( ) AND
    .not_matched (one in )
   Then
    Trigger R3
    go to OUT1
 OUT1: Next
 For each ϵ KBB, test E4, E5, and E6 in order
 E4:
   if .Outside (FOV) AND
      .not_matched (any SBB)
   Then
     Trigger R4
     go to OUT2
 E5:
   if size ( ) < matched size ( ) AND
      .intersected_with (any )
   Then
     Trigger R5
     go to OUT2
 E6:
   if .matched ( )
   Then
    Trigger R6
    go to OUT2
 OUT2: Next
Events Responses:
Responses are done over:
SRM (Server Response Module) and WRM (Workstation
Response Module)
 R1:
   new WRM.register ( )
   WRM.create_object_template ( )
   WRM.send_to_SRM ( )
   SRM.associate ( ) get
   SRM.create_and_send_to_each_WRM ( )
 R2:
   new WRM.register ( )
   WRM.send_to_SRM ( )
   SRM.associate ( ) get
   SRM.create_and_send_to_each_WRM ( )
 R3:
   For all
     if not .matched_any_of ( ) AND .near ( )
     Then
        = WRM.get_object_of ( )
       if .number_of_containted_objects == 1
       Then
         WRM.trigger_new_response ( )
         WRM.build_history_of ( )
       Else if .number_of_contained_objects > 1
       Then
          .associate_to_objects_in ( )
   Next
   WRM.trigger_stable_response ( )
 R4:
   WRM.stop_tracking ( )
 R5:
   WRM.register_group ( ) = +
   WRM.announce_to_SRM ( )
   SRM.associate ( ) get
   SRM.create_and_send_to_each_WRM ( )
   if WRM.search( , ) = = True
   Then
     WRM.split ( )
   Else
     WRM.give_EKF_position ( )
 R6:
   WRM.track ( ); WRM.update_EKF ( ); WRM.update_template ( )
   WRM.send_to_SRM ( )
   SRM.associate ( ) get
   SRM.create_and_send_to_each_WRM (