TrafficPulse / tracker.py
Anshul005's picture
Deploy TrafficPulse app with Dockerfile and start.sh
9d645ea
from collections import defaultdict
import math
class Tracker:
def __init__(self, max_distance=35, max_history=30):
self.track_history = defaultdict(lambda: []) # {id: [(x, y), (x, y), ...]}
self.id_count = 0
self.max_distance = max_distance
self.max_history = max_history
def update(self, objects_rect):
objects_bbs_ids = []
for rect in objects_rect:
x1, y1, x2, y2 = rect
cx = (x1 + x2) // 2
cy = (y1 + y2) // 2
same_object_detected = False
for obj_id, track in self.track_history.items():
prev_center = track[-1]
dist = math.hypot(cx - prev_center[0], cy - prev_center[1])
if dist < self.max_distance:
self.track_history[obj_id].append((cx, cy))
if len(self.track_history[obj_id]) > self.max_history:
self.track_history[obj_id].pop(0) # Retain only the last 'max_history' points
objects_bbs_ids.append([x1, y1, x2, y2, obj_id])
same_object_detected = True
break
if not same_object_detected:
self.track_history[self.id_count].append((cx, cy))
objects_bbs_ids.append([x1, y1, x2, y2, self.id_count])
self.id_count += 1
new_track_history = defaultdict(lambda: [])
for obj_bb_id in objects_bbs_ids:
_, _, _, _, object_id = obj_bb_id
new_track_history[object_id] = self.track_history[object_id]
self.track_history = new_track_history.copy()
return objects_bbs_ids