class Trackable: def __init__(self, bbox): self._averager = Averager(AVG_SERIES, len(bbox)) self._seen = 0 self._unseen = 0 self.push(bbox) def match(self, bbox): return distance(centroid(bbox), centroid( self._averager.latest())) < DIST_THRESHOLD def bbox(self): return self._averager.mean() def push(self, bbox): self._averager.push(bbox) self._seen += 1 self._unseen = max(0, self._unseen - 1) def unseen(self): self._unseen += 1 if self.delete(): self._seen = 0 def good(self): return self._seen > SEEN_THRESHOLD def delete(self): return self._unseen > LOST_THRESHOLD