Ejemplo n.º 1
0
def run():
    opentraj_root = sys.argv[1]
    output_dir = sys.argv[2]

    datasets = get_datasets(opentraj_root, all_dataset_names)
    for ds in datasets:
        grouping(ds)
Ejemplo n.º 2
0
def load_dataset(opentraj_root, dataset_name):
    if os.path.exists(opentraj_root) \
            and os.path.exists(os.path.join(opentraj_root, 'datasets')) and dataset_name:
        global traj_dataset, traj_fig, cur_time
        cur_time = 0
        traj_datasets = get_datasets(opentraj_root, [dataset_name])
        if dataset_name in traj_datasets:
            traj_dataset = traj_datasets[dataset_name].data
        return np.max(traj_dataset["timestamp"])
    return 0
Ejemplo n.º 3
0
    sns.swarmplot(y='dca', x='title', data=df_dca, size=1, ax=ax2)
    ax2.set_xlabel('')
    ax2.set_yticks([0, 1.0, 2.0, 3.0, 4.0, 5.0])
    ax2.xaxis.set_tick_params(labelsize=8)
    ax2.yaxis.label.set_size(8)
    ax2.yaxis.set_tick_params(labelsize=8)

    sns.swarmplot(y='collision_energy', x='title', data=df_E, size=1, ax=ax3)
    ax3.set_xlabel('')
    plt.xticks(rotation=-20)
    ax3.set_yticks([0, 4, 8, 12])
    ax3.xaxis.set_tick_params(labelsize=8)
    ax3.yaxis.label.set_size(8)
    ax3.yaxis.set_tick_params(labelsize=8)
    plt.subplots_adjust(hspace=0.1)
    fig.align_ylabels()
    plt.savefig(os.path.join(output_dir, 'collision.pdf'),
                dpi=500,
                bbox_inches='tight')
    plt.show()


if __name__ == "__main__":
    opentraj_root = sys.argv[1]
    output_dir = sys.argv[2]

    datasets = get_datasets(opentraj_root, all_dataset_names)

    run(datasets, output_dir)
Ejemplo n.º 4
0
            pcf_accum += pcf_values_t
    avg_pcf = pcf_accum / len(frames)

    plt.title(dataset.title)
    plt.ylabel('PCF')
    plt.xlabel('meter')
    plt.plot(avg_pcf, color='purple')


# Fixme: the program needs the two following inputs:
if __name__ == '__main__':
    opentraj_root = sys.argv[
        1]  # e.g. os.path.expanduser("~") + '/workspace2/OpenTraj'
    output_dir = sys.argv[
        2]  # e.g. os.path.expanduser("~") + '/Dropbox/OpenTraj-paper/exp/ver-0.2'
    datasets = get_datasets(opentraj_root)

    # ................................................................

    # ================================================================
    # =================== List the metric functions ==================
    # ================================================================
    metrics = [
        speed_plot,
        # acceleration_plot,
        # path_efficiency_plot,
        # density_vanilla_plot,
        # min_dist_plot,
        # pcf_plot
    ]
    # ================================================================
Ejemplo n.º 5
0
import pandas as pd
import numpy as np
import os
import sys
import matplotlib.pyplot as plt

import plotly.express as px
import plotly.graph_objs as go
from toolkit.benchmarking.load_all_datasets import get_datasets, get_trajlets, all_dataset_names
from toolkit.benchmarking.indicators.motion_properties import speed_avg_of_trajs, acceleration_of_tarjs
from matplotlib import cm

if __name__ == '__main__':
    opentraj_root = sys.argv[1]
    datasets = get_datasets(opentraj_root, ['KITTI'])
    trajlet_sets = get_trajlets(
        opentraj_root,
        # all_dataset_names[:1]
        [
            # 'ETH-Univ',
            # 'ETH-Hotel',
            # 'UCY-Zara',
            # 'UCY-Univ',
            # 'SDD-coupa',
            # 'SDD-bookstore',
            # 'SDD-deathCircle',
            # 'WildTrack',
            # 'KITTI'
            'LCas-Minerva',
        ])
Ejemplo n.º 6
0
def main():
    opentraj_root = sys.argv[1]
    output_dir = sys.argv[2]
    all_names = [
        'ETH-Univ', 'ETH-Hotel', 'UCY-Zara', 'UCY-Univ', 'SDD-Coupa',
        'SDD-bookstore', 'SDD-deathCircle', 'GC', 'InD-1', 'InD-2', 'KITTI',
        'LCas-Minerva', 'WildTrack', 'Edinburgh', 'BN-1d-w180', 'BN-2d-w160'
    ]

    datasets = get_datasets(opentraj_root, all_names)

    #store all the results in pandas dataframe
    all_global_density = []
    all_local_density = []
    # Get trajectories from dataset
    for name in all_names:
        dataset = datasets[name]

        all_frames = dataset.get_frames()
        all_trajs = dataset.get_trajectories()

        trajlets = {}

        #get scene area
        scenes_maxX = dataset.data.groupby(['scene_id'])['pos_x'].max()
        scenes_minX = dataset.data.groupby(['scene_id'])['pos_x'].min()
        scenes_maxY = dataset.data.groupby(['scene_id'])['pos_y'].max()
        scenes_minY = dataset.data.groupby(['scene_id'])['pos_y'].min()

        area = pd.DataFrame(data=[], columns=['scene_id', 'area'])
        for idx in scenes_maxX.index:
            x_range = scenes_maxX.loc[idx] - scenes_minX.loc[idx]
            y_range = scenes_maxY.loc[idx] - scenes_minY.loc[idx]
            area.loc[idx, 'area'] = x_range * y_range

        #calculate and store global density

        global_dens = global_density(all_frames, area)
        g_density = pd.DataFrame(data=np.zeros((len(global_dens), 2)),
                                 columns=['name', 'global_density'])
        g_density.iloc[:, 0] = [name for i in range(len(global_dens))]
        g_density.iloc[:, 1] = global_dens

        all_global_density.append(global_dens)
        outputFile1 = output_dir + "/" + name + '_globalDens.h5'
        fw = open(outputFile1, 'wb')
        pickle.dump(g_density, fw)
        fw.close()

        #calculate and store local density

        trajlets = {}
        local_dens = local_density(all_frames, trajlets, name)
        l_density = pd.DataFrame(data=[], columns=['name', 'local_density'])

        l_density.iloc[:, 1] = local_dens
        l_density.iloc[:, 0] = [name for i in range(len(l_density.iloc[:, 1]))]
        all_local_density.append(local_dens)
        outputFile2 = output_dir + "/" + name + '_localDens.h5'
        fw = open(outputFile2, 'wb')
        pickle.dump(l_density, fw)
        fw.close()

        print(name, " finish")

    # down-sample each group.
    gdens_d = normalize_samples_with_histogram(all_global_density,
                                               max_n_samples=800,
                                               n_bins=50,
                                               quantile_interval=[0.05, 0.98])
    ldens_d = normalize_samples_with_histogram(all_local_density,
                                               max_n_samples=800,
                                               n_bins=50,
                                               quantile_interval=[0.05, 0.95])

    # put samples in a DataFrame (required for seaborn plots)
    df_gdens = pd.concat([
        pd.DataFrame({
            'title': all_names[ii],
            'global_density': gdens_d[ii],
        }) for ii in range(len(all_names[:-2]))
    ])

    df_ldens = pd.concat([
        pd.DataFrame({
            'title': all_names[ii],
            'local_density': ldens_d[ii],
        }) for ii in range(len(all_names[:-2]))
    ])

    BN_gdens = pd.concat([
        pd.DataFrame({
            'title': all_names[ii],
            'global_density': gdens_d[ii],
        }) for ii in range(len(all_names[-2:]))
    ])

    BN_ldens = pd.concat([
        pd.DataFrame({
            'title': all_names[ii],
            'local_density': ldens_d[ii],
        }) for ii in range(len(all_names[-2:]))
    ])

    print("making plots ...")

    sns.set(style="whitegrid")
    fig, axs = plt.subplots(2,
                            2,
                            figsize=(12, 2),
                            gridspec_kw={
                                'width_ratios': [4, 1],
                                'height_ratios': [1, 1]
                            })

    sns.swarmplot(y='global_density',
                  x='title',
                  data=df_gdens,
                  size=1,
                  ax=axs[0, 0])
    axs[0, 0].set_ylim([0, 0.08])
    axs[0, 0].set_yticks([0, 0.02, 0.04, 0.06, 0.08])
    axs[0, 0].set_xlabel('')
    axs[0, 0].yaxis.label.set_size(9)
    axs[0, 0].yaxis.set_tick_params(labelsize=8)

    sns.swarmplot(y='local_density',
                  x='title',
                  data=df_ldens,
                  size=1,
                  ax=axs[1, 0])
    axs[1, 0].set_ylim([0, 6])
    axs[1, 0].set_yticks([0, 2.0, 4.0, 6.0])
    axs[1, 0].yaxis.label.set_size(9)
    axs[1, 0].xaxis.set_tick_params(labelsize=8)
    axs[1, 0].set_xlabel('')
    axs[1, 0].tick_params(axis='x', labelrotation=-20)
    axs[1, 0].yaxis.set_tick_params(labelsize=8)

    sns.swarmplot(y='global_density',
                  x='title',
                  data=BN_gdens,
                  size=1,
                  ax=axs[0, 1])
    axs[0, 1].set_ylim([0, 1.5])
    axs[0, 1].set_yticks([0, 0.5, 1, 1.5])
    axs[0, 1].set_xlabel('')
    axs[0, 1].yaxis.label.set_size(8)
    axs[0, 1].yaxis.set_tick_params(labelsize=8)

    sns.swarmplot(y='local_density',
                  x='title',
                  data=BN_ldens,
                  size=1,
                  ax=axs[1, 1])
    axs[1, 1].set_ylim([0, 6])
    axs[1, 1].set_yticks([0, 2, 4, 6])
    axs[1, 1].yaxis.label.set_size(8)
    axs[1, 1].set_xlabel('')
    axs[1, 1].yaxis.set_tick_params(labelsize=8)

    axs[1, 1].xaxis.set_tick_params(labelsize=8)
    plt.setp(axs[0, 0].get_xticklabels(), visible=False)
    plt.setp(axs[0, 1].get_xticklabels(), visible=False)

    fig.align_ylabels(axs[:, :])

    plt.xticks(rotation=-20)
    plt.subplots_adjust(hspace=0.12, wspace=0.1)
    plt.savefig(os.path.join(output_dir, 'density.pdf'),
                dpi=500,
                bbox_inches='tight')
    plt.show()
Ejemplo n.º 7
0
def main():
    opentraj_root = sys.argv[1]
    output_dir = sys.argv[2]

    all_names = [
        'ETH-Univ', 'ETH-Hotel', 'UCY-Zara', 'UCY-Univ', 'SDD-Coupa',
        'SDD-bookstore', 'SDD-deathCircle', 'GC', 'InD-1', 'InD-2', 'KITTI',
        'LCas-Minerva', 'WildTrack', 'Edinburgh', 'BN-1d-w180', 'BN-2d-w160'
    ]

    datasets = get_datasets(opentraj_root, all_names)

    #interaction range
    upperbound = 3
    thre = 3
    lowerbound = 0.2

    datasets_ttc = []
    datasets_dca = []
    datasets_collision_energy = []
    # Get all datasets
    for name in all_names:
        dataset = datasets[name]
        print("reading", name)
        all_frames = dataset.get_frames()

        #calculate and store ttc
        all_trajs = dataset.get_trajectories("pedestrian")

        trajlets = {}
        #calculate and store ttc,dca,collision energy
        avg_ttc, avg_dca = ttc(all_frames, name, trajlets)

        allttc_pd = pd.DataFrame(data=np.zeros((len(avg_ttc), 2)),
                                 columns=['name', 'ttc'])
        allttc_pd.iloc[:, 0] = [name for i in range(len(avg_ttc))]
        allttc_pd.iloc[:, 1] = avg_ttc
        datasets_ttc.append(avg_ttc)
        outputFile = output_dir + "/" + name + '_ttc.h5'
        fw = open(outputFile, 'wb')
        pickle.dump(allttc_pd, fw)
        fw.close()

        alldca_pd = pd.DataFrame(data=np.zeros((len(avg_dca), 2)),
                                 columns=['name', 'dca'])
        alldca_pd.iloc[:, 0] = [name for i in range(len(avg_dca))]
        alldca_pd.iloc[:, 1] = avg_dca
        datasets_dca.append(avg_dca)
        outputFile = output_dir + "/" + name + '_dca.h5'
        fw = open(outputFile, 'wb')
        pickle.dump(alldca_pd, fw)
        fw.close()

        all_E = energy(avg_ttc, upperbound, lowerbound)
        collision_energy = pd.DataFrame(data=np.zeros((len(all_E), 2)),
                                        columns=['name', 'collision_energy'])
        collision_energy.iloc[:, 0] = [name for i in range(len(all_E))]
        collision_energy.iloc[:, 1] = all_E
        datasets_collision_energy.append(all_E)
        outputFile = output_dir + "/" + name + '_collisionEnergy.h5'
        fw = open(outputFile, 'wb')
        pickle.dump(collision_energy, fw)
        fw.close()

    # down-sample each group.
    ttc_d = histogram_sampler(datasets_ttc, max_n_samples=500, n_bins=60)
    dca_d = histogram_sampler(datasets_dca, max_n_samples=500, n_bins=60)
    E_d = histogram_sampler(datasets_collision_energy,
                            max_n_samples=500,
                            n_bins=60)

    # put samples in a DataFrame (required for seaborn plots)
    df_ttc = pd.concat([
        pd.DataFrame({
            'title': all_names[ii],
            'ttc': ttc_d[ii],
        }) for ii in range(len(all_names))
    ])
    df_dca = pd.concat([
        pd.DataFrame({
            'title': all_names[ii],
            'dca': dca_d[ii],
        }) for ii in range(len(all_names))
    ])
    df_E = pd.concat([
        pd.DataFrame({
            'title': all_names[ii],
            'collision_energy': E_d[ii],
        }) for ii in range(len(all_names))
    ])

    print("making plots ...")

    sns.set(style="whitegrid")
    fig, (ax1, ax2, ax3) = plt.subplots(3, 1, figsize=(12, 3), sharex=True)

    sns.swarmplot(y='ttc', x='title', data=df_ttc, size=1, ax=ax1)
    ax1.set_xlabel('')
    ax1.set_yticks([0, 2.0, 4.0, 6.0])
    ax1.xaxis.set_tick_params(labelsize=8)
    ax1.yaxis.label.set_size(8)
    ax1.yaxis.set_tick_params(labelsize=8)

    sns.swarmplot(y='dca', x='title', data=df_dca, size=1, ax=ax2)
    ax2.set_xlabel('')
    ax2.xaxis.set_tick_params(labelsize=8)
    ax2.yaxis.label.set_size(8)
    ax2.yaxis.set_tick_params(labelsize=8)

    sns.swarmplot(y='collision_energy', x='title', data=df_E, size=1, ax=ax3)
    ax3.set_xlabel('')
    plt.xticks(rotation=-20)
    ax3.set_yticks([0, 4, 8, 12])
    ax3.xaxis.set_tick_params(labelsize=8)
    ax3.yaxis.label.set_size(8)
    ax3.yaxis.set_tick_params(labelsize=8)
    plt.subplots_adjust(hspace=0.1)
    fig.align_ylabels()
    plt.savefig(os.path.join(output_dir, 'collision.pdf'),
                dpi=500,
                bbox_inches='tight')
    plt.show()