133 lines
4.7 KiB
Matlab
133 lines
4.7 KiB
Matlab
function [hog_data, valid_data, vid_id] = Read_HOG_files_dynamic(users, hog_data_dir)
|
|
|
|
hog_data = [];
|
|
vid_id = {};
|
|
valid_data = [];
|
|
|
|
feats_filled = 0;
|
|
|
|
user1 = {'train_001', 'train_002', 'train_003', 'train_004', 'train_005',...
|
|
'train_006', 'train_007', 'train_008', 'train_009', 'train_010',...
|
|
'train_011', 'train_012', 'train_013', 'train_014', 'train_015',...
|
|
'train_016', 'train_017', 'train_018'};
|
|
|
|
user2 = {'train_019', 'train_020', 'train_021', 'train_022', 'train_023',...
|
|
'train_024', 'train_025', 'train_026', 'train_027', 'train_028',...
|
|
'train_029', 'train_030', 'train_031', 'train_032'};
|
|
|
|
user3 = {'train_033', 'train_034', 'train_035', 'train_036', 'train_037',...
|
|
'train_038', 'train_039', 'train_040', 'train_041'};
|
|
|
|
user4 = {'train_042', 'train_043', 'train_044', 'train_045', 'train_046',...
|
|
'train_047', 'train_048', 'train_049', 'train_050', 'train_051',...
|
|
'train_052', 'train_053', 'train_054', 'train_055', 'train_056'};
|
|
|
|
user5 = {'train_057', 'train_058', 'train_059', 'train_060', 'train_061',...
|
|
'train_062', 'train_063'};
|
|
|
|
user6 = {'train_064', 'train_065', 'train_066', 'train_067', 'train_068',...
|
|
'train_069', 'train_070', 'train_071', 'train_072', 'train_073',...
|
|
'train_074', 'train_075', 'train_076', 'train_077', 'train_078', 'train_079'};
|
|
|
|
user7 = {'train_080', 'train_081', 'train_082', 'train_083', 'train_084',...
|
|
'train_085', 'train_086', 'train_087'};
|
|
|
|
users_group = cat(1, {user1}, {user2}, {user3}, {user4}, {user5}, {user6}, {user7});
|
|
user_inds = [];
|
|
|
|
for i=1:numel(users)
|
|
|
|
hog_file = [hog_data_dir, '/au_training_', users{i} '.hog'];
|
|
|
|
f = fopen(hog_file, 'r');
|
|
|
|
curr_data = [];
|
|
curr_ind = 0;
|
|
|
|
while(~feof(f))
|
|
|
|
if(curr_ind == 0)
|
|
num_cols = fread(f, 1, 'int32');
|
|
if(isempty(num_cols))
|
|
break;
|
|
end
|
|
|
|
num_rows = fread(f, 1, 'int32');
|
|
num_chan = fread(f, 1, 'int32');
|
|
|
|
curr_ind = curr_ind + 1;
|
|
|
|
% preallocate some space
|
|
if(curr_ind == 1)
|
|
curr_data = zeros(5000, 1 + num_rows * num_cols * num_chan);
|
|
num_feats = 1 + num_rows * num_cols * num_chan;
|
|
end
|
|
|
|
if(curr_ind > size(curr_data,1))
|
|
curr_data = cat(1, curr_data, zeros(6000, 1 + num_rows * num_cols * num_chan));
|
|
end
|
|
feature_vec = fread(f, [1, 1 + num_rows * num_cols * num_chan], 'float32');
|
|
curr_data(curr_ind, :) = feature_vec;
|
|
else
|
|
|
|
% Reading in batches of 5000
|
|
|
|
feature_vec = fread(f, [4 + num_rows * num_cols * num_chan, 5000], 'float32');
|
|
feature_vec = feature_vec(4:end,:)';
|
|
|
|
num_rows_read = size(feature_vec,1);
|
|
|
|
curr_data(curr_ind+1:curr_ind+num_rows_read,:) = feature_vec;
|
|
|
|
curr_ind = curr_ind + size(feature_vec,1);
|
|
|
|
end
|
|
|
|
end
|
|
|
|
fclose(f);
|
|
|
|
curr_data = curr_data(1:curr_ind,:);
|
|
|
|
for k=1:numel(users_group)
|
|
if(~isempty(strmatch(users{i}, users_group{k})))
|
|
user_inds = cat(1, user_inds, k * ones(curr_ind,1));
|
|
end
|
|
end
|
|
|
|
valid = logical(curr_data(:, 1));
|
|
|
|
vid_id_curr = cell(curr_ind,1);
|
|
vid_id_curr(:) = users(i);
|
|
|
|
vid_id = cat(1, vid_id, vid_id_curr);
|
|
|
|
% Assume same number of frames per video
|
|
if(i==1)
|
|
hog_data = zeros(curr_ind*numel(users), num_feats);
|
|
end
|
|
|
|
if(size(hog_data,1) < feats_filled+curr_ind)
|
|
hog_data = cat(1, hog_data, zeros(size(hog_data,1), num_feats));
|
|
end
|
|
|
|
hog_data(feats_filled+1:feats_filled+curr_ind,:) = curr_data;
|
|
|
|
feats_filled = feats_filled + curr_ind;
|
|
|
|
end
|
|
|
|
if(numel(users) > 0)
|
|
|
|
% Perform normalization here
|
|
u_id = unique(user_inds)';
|
|
|
|
valid_data = hog_data(1:feats_filled,1) > 0;
|
|
|
|
for u=u_id
|
|
hog_data(user_inds==u, 2:end) = bsxfun(@plus, hog_data(user_inds==u, 2:end), -median(hog_data(user_inds==u & valid_data, 2:end)));
|
|
end
|
|
|
|
hog_data = hog_data(1:feats_filled,2:end);
|
|
end
|
|
end |