def path_efficiency_plot(dataset: TrajDataset): ped_trajectories = dataset.get_trajectories() efficiencies = [] for traj in ped_trajectories: if len(traj) < 2: continue try: p_eff = path_efficiency(traj) efficiencies.append(p_eff * 100) except: print('Error in path efficiency metric') bins = np.linspace(50, 100, 25) hist, bins, patches = plt.hist(efficiencies, bins, color='pink', density=True, alpha=0.7) # hist, bin_edges = np.histogram(efficiencies, bins, density=True) plt.title(dataset.title) plt.ylabel('path efficiency') plt.xlabel('percent') plt.xlim([bins[0], bins[-1]]) plt.ylim([0, 0.5]) return hist
def num_trajlets(dataset: TrajDataset, length=4.8, overlap=2): trajs = dataset.get_trajectories(label="pedestrian") trajlets = split_trajectories(trajs, length, overlap, static_filter_thresh=0.) non_static_trajlets = split_trajectories(trajs, length, overlap, static_filter_thresh=1.) return len(trajlets), len(non_static_trajlets)
def ttc(all_frames, name, trajlets): all_ttc = [] Rp = 0.33 #assume pedestrians radius is 0.33 new_frames = [] for frame in all_frames: frame.reset_index(inplace=True) #if there is only one pedestrian at that time, or encounter invalid vel value if len(frame.index) < 2 or frame['vel_x'].isnull().values.any( ) or frame['vel_y'].isnull().values.any(): continue #calculate ttc for each pair x_4d = np.stack((frame.pos_x.values, frame.pos_y.values, frame.vel_x.values, frame.vel_y.values), axis=1) DCA, TTCA = DCA_MTX(x_4d) for i in range(len(TTCA)): #find out ttc of one agent ttc = [ TTCA[i][j] for j in range(len(TTCA[i])) if DCA[i][j] < 2 * Rp and TTCA[i][j] > 0 ] #find out min ttc for one agent if len(ttc) > 0: min_ttc = np.min(ttc) frame.loc[i, 'ttc'] = min_ttc min_dca = np.min([j for j in DCA[i] if j > 0]) frame.loc[i, 'dca'] = min_dca new_frames.append(frame) new_frames = pd.concat(new_frames) new_traj = TrajDataset() new_traj.data = new_frames trajs = new_traj.get_trajectories(label="pedestrian") trajlets[name] = split_trajectories(trajs, to_numpy=False) #average local density o each trajlet avg_traj_ttc = [] avg_traj_dca = [] for trajlet in trajlets[name]: avg_traj_ttc.append(np.min(trajlet['ttc'].dropna())) #min of min avg_traj_dca.append(np.min(trajlet['dca'].dropna())) #min of min return avg_traj_ttc, avg_traj_dca
def local_density(all_frames,trajlets,name): #define local density function #for all pedestrians at that time, find its distance to NN distNN = [] dens_t = [] a=1 new_frames = [] for frame in all_frames: if len(frame)>1: #find pairwise min distance distNN.append([]) dens_t.append([]) dist = squareform(pdist(frame[['pos_x','pos_y']].values)) pair_dist = [] for pi in dist: pair_dist.append(np.array(pi)) min_pi = [j for j in pi if j>0.01] if len(min_pi) == 0: min_dist = 0.01 else: min_dist = np.min(min_pi) distNN[-1].append(min_dist) #calculate local density for agent pj for pj in range(len(dist)): dens_t_i = 1/(2*np.pi)*np.sum(1/((a*np.array(distNN[-1]))**2)*np.exp(-np.divide((pair_dist[pj]**2),(2*(a*np.array(distNN[-1]))**2)))) dens_t[-1].append(dens_t_i) frame.loc[frame.index[pj],'p_local'] = dens_t_i new_frames.append(frame) new_frames = pd.concat(new_frames) new_traj = TrajDataset() new_traj.data = new_frames trajs = new_traj.get_trajectories(label="pedestrian") trajlets[name] = split_trajectories(trajs, to_numpy=False) #average local density for each trajlet avg_traj_plocal=[] for trajlet in trajlets[name]: avg_traj_plocal.append(np.max(trajlet['p_local'])) return avg_traj_plocal
def speed_plot(dataset: TrajDataset): trajectories = dataset.get_trajectories() speeds = [] for traj in trajectories: speeds_i = speed(traj) speeds.extend(speeds_i) bins = np.linspace(0, 2.5, 25) hist, bins, patches = plt.hist(speeds, bins, color='blue', density=True, alpha=0.7) # hist, bin_edges = np.histogram(ped_speeds, bins, density=True) plt.suptitle(dataset.title) plt.ylabel('histogram of speeds') plt.xlabel('m/s') plt.xlim([bins[0], bins[-1]]) plt.ylim([0, 6]) return hist
def acceleration_plot(dataset: TrajDataset): trajectories = dataset.get_trajectories() accelerations = [] for traj in trajectories: if len(traj) < 2: continue accelerations_i = acceleration(traj) accelerations.extend(accelerations_i) bins = np.linspace(-2.5, 2.5, 100) # hist, bin_edges = np.histogram(ped_accelerations, bins, density=True) hist, bins, patches = plt.hist(accelerations, bins, color='red', density=True, alpha=0.7) plt.title(dataset.title) plt.ylabel('histogram of accelerations') plt.xlabel('m/s^2') plt.xlim([-2.5, 2.5]) plt.ylim([0, 5]) return hist
def grouping(dataset: TrajDataset): trajs = dataset.get_trajectories("pedestrian") trajlets = split_trajectories(trajs) for trajlet in trajlets: pass return