https://github.com/MarcBS/SR-Clustering
Raw File
Tip revision: 64387d01330498c22c6989bc4fed1b3daf70fffa authored by Marc BolaƱos on 17 May 2017, 11:13:02 UTC
Minor plot setting changed
Tip revision: 64387d0
timeline_plot.m
%% Plot timeline of EDUB-Seg data
function main()

    addpath('Data_Loading');

    path_data = '/media/HDD_2TB/DATASETS/EDUB-Seg/Narrative/imageSets';
    datasets = {'Marc3'; 'Estefania1'; 'Estefania2'; 'Petia1'; 'Petia2'; 'Mariella'; ...
        'Estefania3'; 'Maya1'; 'Maya2'; 'Maya3'; 'Marc1';...
        'Estefania4'; 'Estefania5';'Marc2'; ...
        'Marc3'; 'Marc4'; 'MarcC1';...
        'Pedro1'; 'Pedro2'; 'Pedro3'; 'Pedro4'};

    path_gt = '/media/HDD_2TB/DATASETS/EDUB-Seg/Narrative/GT';

    % path_data = '/media/My_Book/Datos_Lifelogging/Narrative/Pedro/2016/08';
    % datasets = {'05', '06', '07', '08', '09'};

    format = 'jpg';

    sets_separation = 1;
    plot_hours = {'06:00'; '08:00'; '10:00'; '12:00'; '14:00'; '16:00'; '18:00'; '20:00'; '22:00'};

    path_results = './';

    max_distance_allowed = 600;  % in seconds


    %%%%%%%%%%%%%%%%%%

    figure1 = figure;
    n_datasets = length(datasets);
    for i = 1:n_datasets

        % List files in each directory
        dat = datasets{i};
        files = dir([path_data '/' dat '/*.' format]);
        files = files(arrayfun(@(x) x.name(1) ~= '.', files));
        n_files = length(files);

        % Get timestamps from file name
        timestamps = zeros(n_files,1);
        for j = 1:n_files
            name = getTimeFromName(files(j).name);

            % Convert timestamps to seconds
            timestamps(j) = timeToSeconds(name);
        end

        % Plot timeline
        scatter(timestamps, ones(n_files,1)*i*sets_separation, 'filled');
        hold on;

    end

    % Transform plot hours into seconds (figure coordinates)
    n_plot_hours = length(plot_hours);
    transformed_plot_hours = zeros(n_plot_hours, 1);
    for i = 1:n_plot_hours
        h = plot_hours{i};
        h = regexp(h, ':', 'split');
        time = str2num(h{1})*60*60 + str2num(h{2})*60;
        transformed_plot_hours(i) = time;
    end


    % Plot tick labels and store figure
    set(gca, 'Xtick', transformed_plot_hours, 'XtickLabel', plot_hours);
    set(gca, 'Ytick', [1:n_datasets]*sets_separation, 'YtickLabel', datasets);
    xlabel('Time of the day','FontSize',12);
    ylim([0,(n_datasets+1)*sets_separation]);
    set(gca,'FontSize',12);

    saveas(figure1, 'timeline_EDUB-Seg.jpg');


    %%%%%%%%%%%%%%%%%%

    % Calculate some data statistics
    time_length = zeros(1,n_datasets);
    num_segments = zeros(1, n_datasets);
    segm_length = cell(1, n_datasets);
    num_segments_gt = zeros(1, n_datasets);

    for i = 1:n_datasets

        segm_length{i} = [];

        % List files in each directory
        dat = datasets{i};
        files = dir([path_data '/' dat '/*.' format]);
        files = files(arrayfun(@(x) x.name(1) ~= '.', files));
        n_files = length(files);

        name_ini = getTimeFromName(files(1).name);
        name_fin = getTimeFromName(files(n_files).name);

        % Convert timestamps to seconds and calculate day length
        time_ini = timeToSeconds(name_ini);
        time_fin = timeToSeconds(name_fin);
        time_length(i) = time_fin-time_ini;


        % Get number and duration of artificially created segments in recorded data
        prev_time = time_ini;
        last_segment_time = time_ini;
        for j = 2:n_files
            name = getTimeFromName(files(j).name);
            time = timeToSeconds(name);
            if time - prev_time > max_distance_allowed
                num_segments(i) = num_segments(i) +1;
                segm_length{i} = [segm_length{i}, time - last_segment_time];
                last_segment_time = time;
            end
            prev_time = time;
        end
        num_segments(i) = num_segments(i) +1;
        segm_length{i} = [segm_length{i}, time - last_segment_time];

        % Read # segments in GT
        dat
        [~,~,cl_limGT, ~]=analizarExcel_Narrative([path_gt '/GT_' dat '.xls'], files);
        num_segments_gt(i) = length(cl_limGT);

    end


    % Average time per day
    mean_seconds = round(mean(time_length));
    [h,m,s] = secondsToTime(mean_seconds);
    disp(['Average time per day wearing the camera: ' num2str(h) 'h ' num2str(m) 'm ' num2str(s) 's.']);

    % Average # of continous segments per day
    mean_segments = mean(num_segments);
    disp(['Average number of continuous segments per day: ' num2str(mean_segments)]);

    % Average length of continous segments
    all_length = 0;
    count = 0;
    for i = 1:length(segm_length)
        for j = 1:length(segm_length{i})
            count = count+1;
            all_length = all_length + segm_length{i}(j);
        end
    end
    mean_seconds = round(all_length/count);
    [h,m,s] = secondsToTime(mean_seconds);
    disp(['Average time per continuous segment: ' num2str(h) 'h ' num2str(m) 'm ' num2str(s) 's.']);
    
    % Average # of GT segments per day
    mean_segments = mean(num_segments_gt);
    disp(['Average number of GT segments per day: ' num2str(mean_segments)]);
end


function time = timeToSeconds(name)
    time = [str2num(name(1:2)), str2num(name(3:4)), str2num(name(5:6))];
    time = time(1)*60*60 + time(2)*60 + time(3);
end

function name = getTimeFromName(name)
    name_aux = regexp(name, '_','split');
    if(length(name_aux) == 1)
        name_aux = regexp(name, '\.','split');
        name = name_aux{1};
    else
        name = name_aux{2};
    end
end

function [h,m,s] = secondsToTime(seconds)
    m = floor(seconds/60);
    s = mod(seconds,60);
    h = floor(m/60);
    m = mod(m, 60);
end
back to top