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
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