(1)configSeq.m代码自动编写
OTB数据集Benchmark中的数据集设置十分繁琐,OTB2015中有100个视频序列,如果手动添加每个视频序列的属性效率极低,因此本文通过Matlab代码实现自动获取数据集每个视频序列的属性,按照configSeq中的结构体样式编写属性代码并存入txt文件中,随后将代码复制进configSeq中即可。
(2)自动将原数据集中的groundtruth文件复制进anno文件夹中并重命名
由于Benchmark在测试算法之后要根据groundtruth文件计算跟踪精度等指标,需要将数据集中的gd文件复制进Benchmark中的anno文件夹,如果手动操作会变得十分繁琐,本代码可以实现自动获取原数据集文件夹中的groundtruth文件并复制进Benchmark中的anno文件夹,并重命名为Benchmark的格式。
%此代码实现的功能为:
%读取数据集文件下的所有子文件夹名称,并以configSeqs.m中的格式创建结构体
%并将groundtruth文件存入anno文件夹
OTB100 = 'Basketball Biker Bird1 Bird2 BlurBody BlurCar1 BlurCar2 BlurCar3 BlurCar4 BlurFace BlurOwl Board Bolt Bolt2 Box Boy Car1 Car2 Car24 Car4 CarDark CarScale ClifBar Coke Couple Coupon Crossing Crowds Dancer Dancer2 David David2 David3 Deer Diving Dog Dog1 Doll DragonBaby Dudek FaceOcc1 FaceOcc2 Fish FleetFace Football Football1 Freeman1 Freeman3 Freeman4 Girl Girl2 Gym Human2 Human3 Human4 Human5 Human6 Human7 Human8 Human9 Ironman Jogging Jump Jumping KiteSurf Lemming Liquor Man Matrix Mhyang MotorRolling MountainBike Panda RedTeam Rubik Shaking Singer1 Singer2 Skater Skater2 Skating1 Skating2 Skiing Soccer Subway Surfer Suv Sylvester Tiger1 Tiger2 Toy Trans Trellis Twinnings Vase Walking Walking2 Woman';
OTB100 = strsplit(OTB100);
base_path = 'E:\single_object_tracking\Benchmark\';
files = dir(base_path);%数据集文件夹的路径
%% 处理configSeq
fid=fopen('configSeq.txt','wt');
for i = 1:numel(files)
temp_name = files(i).name;
if ~ismember(temp_name,OTB100) %如果文件夹的名字不存在于OTB数据集中,则执行下一循环
continue
end
temp_path = [base_path temp_name '\' 'img\'];
temp_files = dir([temp_path '*.jpg']);
endFrame = numel(temp_files);
temp_1 = ['struct(''name'',' '''' temp_name '''' ',' '''path'','];%字符串中有单引号用两个单引号表示
temp_res = [temp_1 '''' temp_path '''' ',' '''startFrame'',' '1,' '''endFrame'',' num2str(endFrame) ',' '''nz'',' '4,' '''ext'',' '''jpg'',' '''init_rect'', ' '[0,0,0,0]),' '...'];
fprintf(fid,'%s\n',temp_res);%写入文本文件
disp(['write down:' temp_name])
end
disp('configSeq done')
%% 处理groundtruth文件
for i = 1:numel(files)
temp_name = files(i).name;
if ~ismember(temp_name,OTB100) %如果文件夹的名字不存在于OTB数据集中,则执行下一循环
continue
end
txt_name = ['./anno/' temp_name '.txt'];
if exist(txt_name,'file') %如果原本存在groundtruth文件则执行下一个循环
disp(['exsting txt file : ' temp_name])
continue
end
gd_file = [base_path temp_name '/' 'groundtruth_rect.txt'];%数据集中的gd文件
copyfile(gd_file,'./anno');%移动到anno文件夹
path = pwd;%保存当前目录
cd('./anno')
eval(['!rename' 32 'groundtruth_rect.txt' 32 [temp_name '.txt']]); %使用系统命令更改文件名,32为ASCII空格
cd(path)%返回目录
disp(['move done: ' temp_name])
end