示例#1
0
def kalman_predict_out_line(track,line,out_direction):
    # print(track.track_id)
    # print(line)
    # print(out_direction)
    # print(track.tlbr)
    if box_line_relative(track.tlbr,line)==out_direction:
        return 0
    predict_num_out=0
    prev_mean,prev_cov=track.mean,track.covariance
    kal_man=KalmanFilter()
    predict_thres=0 if out_direction=='up' else 0
    max_long_predict=5 if out_direction=='up' else 2 if track.infer_type() in ['person','motorcycle','biycycle'] else 8
    while  box_line_relative(mean_to_tlbr(prev_mean),line) !=out_direction:
        predict_num_out+=1
        cur_mean=prev_mean #of t
        mean,cov=kal_man.predict(prev_mean,prev_cov)
        if predict_num_out>predict_thres:
            new_mean,new_cov=mean,cov
        else:
            new_mean,new_cov= kal_man.update(prev_mean,prev_cov,mean[:4])
        prev_mean,prev_cov=new_mean,new_cov #of t+1
        if predict_num_out>=max_long_predict or np.sum(np.abs(cur_mean-mean))==0:
            break
        # print(mean_to_tlbr(mean))

    return predict_num_out
示例#2
0
def kalman_predict_out_line(track, line, out_direction, predict_long=None):
    # print(track.track_id)
    # print(line)
    # print(out_direction)
    # print(track.tlbr)
    if box_line_relative(track.tlbr, line) == out_direction:
        return 0
    predict_num_out = 0
    prev_mean, prev_cov = track.mean, track.covariance
    kal_man = KalmanFilter()
    predict_thres = 15 if out_direction == 'up' else 0
    if predict_long is not None:
        max_long_predict = predict_long
    else:
        max_long_predict = 50 if out_direction == 'up' else 4
    while box_line_relative(mean_to_tlbr(prev_mean), line) != out_direction:
        predict_num_out += 1
        cur_mean = prev_mean  #of t
        mean, cov = kal_man.predict(prev_mean, prev_cov)
        if predict_num_out > predict_thres:
            new_mean, new_cov = mean, cov
        else:
            new_mean, new_cov = kal_man.update(prev_mean, prev_cov, mean[:4])
        prev_mean, prev_cov = new_mean, new_cov  #of t+1
        if predict_num_out >= max_long_predict or np.sum(
                np.abs(cur_mean - mean)) == 0:
            break
        # print(mean_to_tlbr(mean))

    return predict_num_out