예제 #1
0
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
예제 #2
0
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)
예제 #3
0
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
예제 #4
0
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
예제 #5
0
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
예제 #6
0
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
예제 #7
0
def grouping(dataset: TrajDataset):
    trajs = dataset.get_trajectories("pedestrian")
    trajlets = split_trajectories(trajs)
    for trajlet in trajlets:
        pass
    return