Example #1
0
class Tracklet:
    STATUS_BORN = 0
    STATUS_TRACKING = 1
    STATUS_LOST = 2

    def __init__(self, global_id, x, y, confidence, timestamp):
        self.id = global_id
        self.last_update = timestamp
        self.estimator = KalmanFilter(x, y, 1 - confidence)
        self.status = Tracklet.STATUS_BORN

    def get_tracklet_info(self):
        return {
            'id': self.id,
            'x': self.estimator.mu[0],
            'y': self.estimator.mu[2],
            'v': sqrt(self.estimator.mu[1]**2 + self.estimator.mu[3]**2),
            'phi': atan2(self.estimator.mu[1], self.estimator.mu[3]),
            'sigma_x': self.estimator.sigma[0][0],
            'sigma_y': self.estimator.sigma[2][2],
            'status': self.status
        }

    def estimate_position_at(self, timestamp):
        estimate = self.estimator.estimate_at(timestamp - self.last_update)[0]
        return estimate[0], estimate[2]

    def predict(self, timestamp):
        self.estimator.predict(math.fabs(self.last_update - timestamp))
        self.last_update = timestamp

    def update(self, detection, confidence):
        self.estimator.correct(detection, 1 - confidence)

    def similarity(self, coordinates, timestamp):
        return euclidean(self.estimate_position_at(timestamp), coordinates)

    def confidence(self):
        return self.estimator.sigma[0][0] * self.estimator.sigma[2][2]