Commit 3d27a527054b1f8a6b020d129f6aff9bf93524c1

Authored by Scott Klum
2 parents 92f65021 68b85a6a

Merge branch 'master' of https://github.com/biometrics/openbr

app/br/br.cpp
... ... @@ -138,8 +138,8 @@ public:
138 138 check((parc >= 2) && (parc <= 3), "Incorrect parameter count for 'evalDetection'.");
139 139 br_eval_detection(parv[0], parv[1], parc == 3 ? parv[2] : "");
140 140 } else if (!strcmp(fun, "evalLandmarking")) {
141   - check((parc >= 2) && (parc <= 3), "Incorrect parameter count for 'evalLandmarking'.");
142   - br_eval_detection(parv[0], parv[1], parc == 3 ? parv[2] : "");
  141 + check((parc >= 2) && (parc <= 5), "Incorrect parameter count for 'evalLandmarking'.");
  142 + br_eval_landmarking(parv[0], parv[1], parc >= 3 ? parv[2] : "", parc >= 4 ? atoi(parv[3]) : 0, parc >= 5 ? atoi(parv[4]) : 1);
143 143 } else if (!strcmp(fun, "evalRegression")) {
144 144 check(parc >= 2 && parc <= 4, "Incorrect parameter count for 'evalRegression'.");
145 145 br_eval_regression(parv[0], parv[1], parc >= 3 ? parv[2] : "", parc >= 4 ? parv[3] : "");
... ... @@ -221,7 +221,7 @@ private:
221 221 "-evalClassification <predicted_gallery> <truth_gallery> <predicted property name> <ground truth proprty name>\n"
222 222 "-evalClustering <clusters> <gallery>\n"
223 223 "-evalDetection <predicted_gallery> <truth_gallery> [{csv}]\n"
224   - "-evalLandmarking <predicted_gallery> <truth_gallery> [{csv}]\n"
  224 + "-evalLandmarking <predicted_gallery> <truth_gallery> [{csv} [<normalization_index_a> <normalization_index_b>]]\n"
225 225 "-evalRegression <predicted_gallery> <truth_gallery> <predicted property name> <ground truth property name>\n"
226 226 "-plotDetection <file> ... <file> {destination}\n"
227 227 "-plotMetadata <file> ... <file> <columns>\n"
... ...
data/KTH/test_9ppl.xml 0 → 100644
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<biometric-signature-set>
  3 + <biometric-signature name="boxing17-1">
  4 + <presentation Label="boxing" file-name="boxing/person17_boxing_d1_uncomp.avi" />
  5 + </biometric-signature>
  6 + <biometric-signature name="boxing17-2">
  7 + <presentation Label="boxing" file-name="boxing/person17_boxing_d2_uncomp.avi" />
  8 + </biometric-signature>
  9 + <biometric-signature name="boxing17-3">
  10 + <presentation Label="boxing" file-name="boxing/person17_boxing_d3_uncomp.avi" />
  11 + </biometric-signature>
  12 + <biometric-signature name="boxing17-4">
  13 + <presentation Label="boxing" file-name="boxing/person17_boxing_d4_uncomp.avi" />
  14 + </biometric-signature>
  15 + <biometric-signature name="boxing18-1">
  16 + <presentation Label="boxing" file-name="boxing/person18_boxing_d1_uncomp.avi" />
  17 + </biometric-signature>
  18 + <biometric-signature name="boxing18-2">
  19 + <presentation Label="boxing" file-name="boxing/person18_boxing_d2_uncomp.avi" />
  20 + </biometric-signature>
  21 + <biometric-signature name="boxing18-3">
  22 + <presentation Label="boxing" file-name="boxing/person18_boxing_d3_uncomp.avi" />
  23 + </biometric-signature>
  24 + <biometric-signature name="boxing18-4">
  25 + <presentation Label="boxing" file-name="boxing/person18_boxing_d4_uncomp.avi" />
  26 + </biometric-signature>
  27 + <biometric-signature name="boxing19-1">
  28 + <presentation Label="boxing" file-name="boxing/person19_boxing_d1_uncomp.avi" />
  29 + </biometric-signature>
  30 + <biometric-signature name="boxing19-2">
  31 + <presentation Label="boxing" file-name="boxing/person19_boxing_d2_uncomp.avi" />
  32 + </biometric-signature>
  33 + <biometric-signature name="boxing19-3">
  34 + <presentation Label="boxing" file-name="boxing/person19_boxing_d3_uncomp.avi" />
  35 + </biometric-signature>
  36 + <biometric-signature name="boxing19-4">
  37 + <presentation Label="boxing" file-name="boxing/person19_boxing_d4_uncomp.avi" />
  38 + </biometric-signature>
  39 + <biometric-signature name="boxing20-1">
  40 + <presentation Label="boxing" file-name="boxing/person20_boxing_d1_uncomp.avi" />
  41 + </biometric-signature>
  42 + <biometric-signature name="boxing20-2">
  43 + <presentation Label="boxing" file-name="boxing/person20_boxing_d2_uncomp.avi" />
  44 + </biometric-signature>
  45 + <biometric-signature name="boxing20-3">
  46 + <presentation Label="boxing" file-name="boxing/person20_boxing_d3_uncomp.avi" />
  47 + </biometric-signature>
  48 + <biometric-signature name="boxing20-4">
  49 + <presentation Label="boxing" file-name="boxing/person20_boxing_d4_uncomp.avi" />
  50 + </biometric-signature>
  51 + <biometric-signature name="boxing21-1">
  52 + <presentation Label="boxing" file-name="boxing/person21_boxing_d1_uncomp.avi" />
  53 + </biometric-signature>
  54 + <biometric-signature name="boxing21-2">
  55 + <presentation Label="boxing" file-name="boxing/person21_boxing_d2_uncomp.avi" />
  56 + </biometric-signature>
  57 + <biometric-signature name="boxing21-3">
  58 + <presentation Label="boxing" file-name="boxing/person21_boxing_d3_uncomp.avi" />
  59 + </biometric-signature>
  60 + <biometric-signature name="boxing21-4">
  61 + <presentation Label="boxing" file-name="boxing/person21_boxing_d4_uncomp.avi" />
  62 + </biometric-signature>
  63 + <biometric-signature name="boxing22-1">
  64 + <presentation Label="boxing" file-name="boxing/person22_boxing_d1_uncomp.avi" />
  65 + </biometric-signature>
  66 + <biometric-signature name="boxing22-2">
  67 + <presentation Label="boxing" file-name="boxing/person22_boxing_d2_uncomp.avi" />
  68 + </biometric-signature>
  69 + <biometric-signature name="boxing22-3">
  70 + <presentation Label="boxing" file-name="boxing/person22_boxing_d3_uncomp.avi" />
  71 + </biometric-signature>
  72 + <biometric-signature name="boxing22-4">
  73 + <presentation Label="boxing" file-name="boxing/person22_boxing_d4_uncomp.avi" />
  74 + </biometric-signature>
  75 + <biometric-signature name="boxing23-1">
  76 + <presentation Label="boxing" file-name="boxing/person23_boxing_d1_uncomp.avi" />
  77 + </biometric-signature>
  78 + <biometric-signature name="boxing23-2">
  79 + <presentation Label="boxing" file-name="boxing/person23_boxing_d2_uncomp.avi" />
  80 + </biometric-signature>
  81 + <biometric-signature name="boxing23-3">
  82 + <presentation Label="boxing" file-name="boxing/person23_boxing_d3_uncomp.avi" />
  83 + </biometric-signature>
  84 + <biometric-signature name="boxing23-4">
  85 + <presentation Label="boxing" file-name="boxing/person23_boxing_d4_uncomp.avi" />
  86 + </biometric-signature>
  87 + <biometric-signature name="boxing24-1">
  88 + <presentation Label="boxing" file-name="boxing/person24_boxing_d1_uncomp.avi" />
  89 + </biometric-signature>
  90 + <biometric-signature name="boxing24-2">
  91 + <presentation Label="boxing" file-name="boxing/person24_boxing_d2_uncomp.avi" />
  92 + </biometric-signature>
  93 + <biometric-signature name="boxing24-3">
  94 + <presentation Label="boxing" file-name="boxing/person24_boxing_d3_uncomp.avi" />
  95 + </biometric-signature>
  96 + <biometric-signature name="boxing24-4">
  97 + <presentation Label="boxing" file-name="boxing/person24_boxing_d4_uncomp.avi" />
  98 + </biometric-signature>
  99 + <biometric-signature name="boxing25-1">
  100 + <presentation Label="boxing" file-name="boxing/person25_boxing_d1_uncomp.avi" />
  101 + </biometric-signature>
  102 + <biometric-signature name="boxing25-2">
  103 + <presentation Label="boxing" file-name="boxing/person25_boxing_d2_uncomp.avi" />
  104 + </biometric-signature>
  105 + <biometric-signature name="boxing25-3">
  106 + <presentation Label="boxing" file-name="boxing/person25_boxing_d3_uncomp.avi" />
  107 + </biometric-signature>
  108 + <biometric-signature name="boxing25-4">
  109 + <presentation Label="boxing" file-name="boxing/person25_boxing_d4_uncomp.avi" />
  110 + </biometric-signature>
  111 + <biometric-signature name="handclapping17-1">
  112 + <presentation Label="handclapping" file-name="handclapping/person17_handclapping_d1_uncomp.avi" />
  113 + </biometric-signature>
  114 + <biometric-signature name="handclapping17-2">
  115 + <presentation Label="handclapping" file-name="handclapping/person17_handclapping_d2_uncomp.avi" />
  116 + </biometric-signature>
  117 + <biometric-signature name="handclapping17-3">
  118 + <presentation Label="handclapping" file-name="handclapping/person17_handclapping_d3_uncomp.avi" />
  119 + </biometric-signature>
  120 + <biometric-signature name="handclapping17-4">
  121 + <presentation Label="handclapping" file-name="handclapping/person17_handclapping_d4_uncomp.avi" />
  122 + </biometric-signature>
  123 + <biometric-signature name="handclapping18-1">
  124 + <presentation Label="handclapping" file-name="handclapping/person18_handclapping_d1_uncomp.avi" />
  125 + </biometric-signature>
  126 + <biometric-signature name="handclapping18-2">
  127 + <presentation Label="handclapping" file-name="handclapping/person18_handclapping_d2_uncomp.avi" />
  128 + </biometric-signature>
  129 + <biometric-signature name="handclapping18-3">
  130 + <presentation Label="handclapping" file-name="handclapping/person18_handclapping_d3_uncomp.avi" />
  131 + </biometric-signature>
  132 + <biometric-signature name="handclapping18-4">
  133 + <presentation Label="handclapping" file-name="handclapping/person18_handclapping_d4_uncomp.avi" />
  134 + </biometric-signature>
  135 + <biometric-signature name="handclapping19-1">
  136 + <presentation Label="handclapping" file-name="handclapping/person19_handclapping_d1_uncomp.avi" />
  137 + </biometric-signature>
  138 + <biometric-signature name="handclapping19-2">
  139 + <presentation Label="handclapping" file-name="handclapping/person19_handclapping_d2_uncomp.avi" />
  140 + </biometric-signature>
  141 + <biometric-signature name="handclapping19-3">
  142 + <presentation Label="handclapping" file-name="handclapping/person19_handclapping_d3_uncomp.avi" />
  143 + </biometric-signature>
  144 + <biometric-signature name="handclapping19-4">
  145 + <presentation Label="handclapping" file-name="handclapping/person19_handclapping_d4_uncomp.avi" />
  146 + </biometric-signature>
  147 + <biometric-signature name="handclapping20-1">
  148 + <presentation Label="handclapping" file-name="handclapping/person20_handclapping_d1_uncomp.avi" />
  149 + </biometric-signature>
  150 + <biometric-signature name="handclapping20-2">
  151 + <presentation Label="handclapping" file-name="handclapping/person20_handclapping_d2_uncomp.avi" />
  152 + </biometric-signature>
  153 + <biometric-signature name="handclapping20-3">
  154 + <presentation Label="handclapping" file-name="handclapping/person20_handclapping_d3_uncomp.avi" />
  155 + </biometric-signature>
  156 + <biometric-signature name="handclapping20-4">
  157 + <presentation Label="handclapping" file-name="handclapping/person20_handclapping_d4_uncomp.avi" />
  158 + </biometric-signature>
  159 + <biometric-signature name="handclapping21-1">
  160 + <presentation Label="handclapping" file-name="handclapping/person21_handclapping_d1_uncomp.avi" />
  161 + </biometric-signature>
  162 + <biometric-signature name="handclapping21-2">
  163 + <presentation Label="handclapping" file-name="handclapping/person21_handclapping_d2_uncomp.avi" />
  164 + </biometric-signature>
  165 + <biometric-signature name="handclapping21-3">
  166 + <presentation Label="handclapping" file-name="handclapping/person21_handclapping_d3_uncomp.avi" />
  167 + </biometric-signature>
  168 + <biometric-signature name="handclapping21-4">
  169 + <presentation Label="handclapping" file-name="handclapping/person21_handclapping_d4_uncomp.avi" />
  170 + </biometric-signature>
  171 + <biometric-signature name="handclapping22-1">
  172 + <presentation Label="handclapping" file-name="handclapping/person22_handclapping_d1_uncomp.avi" />
  173 + </biometric-signature>
  174 + <biometric-signature name="handclapping22-2">
  175 + <presentation Label="handclapping" file-name="handclapping/person22_handclapping_d2_uncomp.avi" />
  176 + </biometric-signature>
  177 + <biometric-signature name="handclapping22-3">
  178 + <presentation Label="handclapping" file-name="handclapping/person22_handclapping_d3_uncomp.avi" />
  179 + </biometric-signature>
  180 + <biometric-signature name="handclapping22-4">
  181 + <presentation Label="handclapping" file-name="handclapping/person22_handclapping_d4_uncomp.avi" />
  182 + </biometric-signature>
  183 + <biometric-signature name="handclapping23-1">
  184 + <presentation Label="handclapping" file-name="handclapping/person23_handclapping_d1_uncomp.avi" />
  185 + </biometric-signature>
  186 + <biometric-signature name="handclapping23-2">
  187 + <presentation Label="handclapping" file-name="handclapping/person23_handclapping_d2_uncomp.avi" />
  188 + </biometric-signature>
  189 + <biometric-signature name="handclapping23-3">
  190 + <presentation Label="handclapping" file-name="handclapping/person23_handclapping_d3_uncomp.avi" />
  191 + </biometric-signature>
  192 + <biometric-signature name="handclapping23-4">
  193 + <presentation Label="handclapping" file-name="handclapping/person23_handclapping_d4_uncomp.avi" />
  194 + </biometric-signature>
  195 + <biometric-signature name="handclapping24-1">
  196 + <presentation Label="handclapping" file-name="handclapping/person24_handclapping_d1_uncomp.avi" />
  197 + </biometric-signature>
  198 + <biometric-signature name="handclapping24-2">
  199 + <presentation Label="handclapping" file-name="handclapping/person24_handclapping_d2_uncomp.avi" />
  200 + </biometric-signature>
  201 + <biometric-signature name="handclapping24-3">
  202 + <presentation Label="handclapping" file-name="handclapping/person24_handclapping_d3_uncomp.avi" />
  203 + </biometric-signature>
  204 + <biometric-signature name="handclapping24-4">
  205 + <presentation Label="handclapping" file-name="handclapping/person24_handclapping_d4_uncomp.avi" />
  206 + </biometric-signature>
  207 + <biometric-signature name="handclapping25-1">
  208 + <presentation Label="handclapping" file-name="handclapping/person25_handclapping_d1_uncomp.avi" />
  209 + </biometric-signature>
  210 + <biometric-signature name="handclapping25-2">
  211 + <presentation Label="handclapping" file-name="handclapping/person25_handclapping_d2_uncomp.avi" />
  212 + </biometric-signature>
  213 + <biometric-signature name="handclapping25-3">
  214 + <presentation Label="handclapping" file-name="handclapping/person25_handclapping_d3_uncomp.avi" />
  215 + </biometric-signature>
  216 + <biometric-signature name="handclapping25-4">
  217 + <presentation Label="handclapping" file-name="handclapping/person25_handclapping_d4_uncomp.avi" />
  218 + </biometric-signature>
  219 + <biometric-signature name="handwaving17-1">
  220 + <presentation Label="handwaving" file-name="handwaving/person17_handwaving_d1_uncomp.avi" />
  221 + </biometric-signature>
  222 + <biometric-signature name="handwaving17-2">
  223 + <presentation Label="handwaving" file-name="handwaving/person17_handwaving_d2_uncomp.avi" />
  224 + </biometric-signature>
  225 + <biometric-signature name="handwaving17-3">
  226 + <presentation Label="handwaving" file-name="handwaving/person17_handwaving_d3_uncomp.avi" />
  227 + </biometric-signature>
  228 + <biometric-signature name="handwaving17-4">
  229 + <presentation Label="handwaving" file-name="handwaving/person17_handwaving_d4_uncomp.avi" />
  230 + </biometric-signature>
  231 + <biometric-signature name="handwaving18-1">
  232 + <presentation Label="handwaving" file-name="handwaving/person18_handwaving_d1_uncomp.avi" />
  233 + </biometric-signature>
  234 + <biometric-signature name="handwaving18-2">
  235 + <presentation Label="handwaving" file-name="handwaving/person18_handwaving_d2_uncomp.avi" />
  236 + </biometric-signature>
  237 + <biometric-signature name="handwaving18-3">
  238 + <presentation Label="handwaving" file-name="handwaving/person18_handwaving_d3_uncomp.avi" />
  239 + </biometric-signature>
  240 + <biometric-signature name="handwaving18-4">
  241 + <presentation Label="handwaving" file-name="handwaving/person18_handwaving_d4_uncomp.avi" />
  242 + </biometric-signature>
  243 + <biometric-signature name="handwaving19-1">
  244 + <presentation Label="handwaving" file-name="handwaving/person19_handwaving_d1_uncomp.avi" />
  245 + </biometric-signature>
  246 + <biometric-signature name="handwaving19-2">
  247 + <presentation Label="handwaving" file-name="handwaving/person19_handwaving_d2_uncomp.avi" />
  248 + </biometric-signature>
  249 + <biometric-signature name="handwaving19-3">
  250 + <presentation Label="handwaving" file-name="handwaving/person19_handwaving_d3_uncomp.avi" />
  251 + </biometric-signature>
  252 + <biometric-signature name="handwaving19-4">
  253 + <presentation Label="handwaving" file-name="handwaving/person19_handwaving_d4_uncomp.avi" />
  254 + </biometric-signature>
  255 + <biometric-signature name="handwaving20-1">
  256 + <presentation Label="handwaving" file-name="handwaving/person20_handwaving_d1_uncomp.avi" />
  257 + </biometric-signature>
  258 + <biometric-signature name="handwaving20-2">
  259 + <presentation Label="handwaving" file-name="handwaving/person20_handwaving_d2_uncomp.avi" />
  260 + </biometric-signature>
  261 + <biometric-signature name="handwaving20-3">
  262 + <presentation Label="handwaving" file-name="handwaving/person20_handwaving_d3_uncomp.avi" />
  263 + </biometric-signature>
  264 + <biometric-signature name="handwaving20-4">
  265 + <presentation Label="handwaving" file-name="handwaving/person20_handwaving_d4_uncomp.avi" />
  266 + </biometric-signature>
  267 + <biometric-signature name="handwaving21-1">
  268 + <presentation Label="handwaving" file-name="handwaving/person21_handwaving_d1_uncomp.avi" />
  269 + </biometric-signature>
  270 + <biometric-signature name="handwaving21-2">
  271 + <presentation Label="handwaving" file-name="handwaving/person21_handwaving_d2_uncomp.avi" />
  272 + </biometric-signature>
  273 + <biometric-signature name="handwaving21-3">
  274 + <presentation Label="handwaving" file-name="handwaving/person21_handwaving_d3_uncomp.avi" />
  275 + </biometric-signature>
  276 + <biometric-signature name="handwaving21-4">
  277 + <presentation Label="handwaving" file-name="handwaving/person21_handwaving_d4_uncomp.avi" />
  278 + </biometric-signature>
  279 + <biometric-signature name="handwaving22-1">
  280 + <presentation Label="handwaving" file-name="handwaving/person22_handwaving_d1_uncomp.avi" />
  281 + </biometric-signature>
  282 + <biometric-signature name="handwaving22-2">
  283 + <presentation Label="handwaving" file-name="handwaving/person22_handwaving_d2_uncomp.avi" />
  284 + </biometric-signature>
  285 + <biometric-signature name="handwaving22-3">
  286 + <presentation Label="handwaving" file-name="handwaving/person22_handwaving_d3_uncomp.avi" />
  287 + </biometric-signature>
  288 + <biometric-signature name="handwaving22-4">
  289 + <presentation Label="handwaving" file-name="handwaving/person22_handwaving_d4_uncomp.avi" />
  290 + </biometric-signature>
  291 + <biometric-signature name="handwaving23-1">
  292 + <presentation Label="handwaving" file-name="handwaving/person23_handwaving_d1_uncomp.avi" />
  293 + </biometric-signature>
  294 + <biometric-signature name="handwaving23-2">
  295 + <presentation Label="handwaving" file-name="handwaving/person23_handwaving_d2_uncomp.avi" />
  296 + </biometric-signature>
  297 + <biometric-signature name="handwaving23-3">
  298 + <presentation Label="handwaving" file-name="handwaving/person23_handwaving_d3_uncomp.avi" />
  299 + </biometric-signature>
  300 + <biometric-signature name="handwaving23-4">
  301 + <presentation Label="handwaving" file-name="handwaving/person23_handwaving_d4_uncomp.avi" />
  302 + </biometric-signature>
  303 + <biometric-signature name="handwaving24-1">
  304 + <presentation Label="handwaving" file-name="handwaving/person24_handwaving_d1_uncomp.avi" />
  305 + </biometric-signature>
  306 + <biometric-signature name="handwaving24-2">
  307 + <presentation Label="handwaving" file-name="handwaving/person24_handwaving_d2_uncomp.avi" />
  308 + </biometric-signature>
  309 + <biometric-signature name="handwaving24-3">
  310 + <presentation Label="handwaving" file-name="handwaving/person24_handwaving_d3_uncomp.avi" />
  311 + </biometric-signature>
  312 + <biometric-signature name="handwaving24-4">
  313 + <presentation Label="handwaving" file-name="handwaving/person24_handwaving_d4_uncomp.avi" />
  314 + </biometric-signature>
  315 + <biometric-signature name="handwaving25-1">
  316 + <presentation Label="handwaving" file-name="handwaving/person25_handwaving_d1_uncomp.avi" />
  317 + </biometric-signature>
  318 + <biometric-signature name="handwaving25-2">
  319 + <presentation Label="handwaving" file-name="handwaving/person25_handwaving_d2_uncomp.avi" />
  320 + </biometric-signature>
  321 + <biometric-signature name="handwaving25-3">
  322 + <presentation Label="handwaving" file-name="handwaving/person25_handwaving_d3_uncomp.avi" />
  323 + </biometric-signature>
  324 + <biometric-signature name="handwaving25-4">
  325 + <presentation Label="handwaving" file-name="handwaving/person25_handwaving_d4_uncomp.avi" />
  326 + </biometric-signature>
  327 + <biometric-signature name="jogging17-1">
  328 + <presentation Label="jogging" file-name="jogging/person17_jogging_d1_uncomp.avi" />
  329 + </biometric-signature>
  330 + <biometric-signature name="jogging17-2">
  331 + <presentation Label="jogging" file-name="jogging/person17_jogging_d2_uncomp.avi" />
  332 + </biometric-signature>
  333 + <biometric-signature name="jogging17-3">
  334 + <presentation Label="jogging" file-name="jogging/person17_jogging_d3_uncomp.avi" />
  335 + </biometric-signature>
  336 + <biometric-signature name="jogging17-4">
  337 + <presentation Label="jogging" file-name="jogging/person17_jogging_d4_uncomp.avi" />
  338 + </biometric-signature>
  339 + <biometric-signature name="jogging18-1">
  340 + <presentation Label="jogging" file-name="jogging/person18_jogging_d1_uncomp.avi" />
  341 + </biometric-signature>
  342 + <biometric-signature name="jogging18-2">
  343 + <presentation Label="jogging" file-name="jogging/person18_jogging_d2_uncomp.avi" />
  344 + </biometric-signature>
  345 + <biometric-signature name="jogging18-3">
  346 + <presentation Label="jogging" file-name="jogging/person18_jogging_d3_uncomp.avi" />
  347 + </biometric-signature>
  348 + <biometric-signature name="jogging18-4">
  349 + <presentation Label="jogging" file-name="jogging/person18_jogging_d4_uncomp.avi" />
  350 + </biometric-signature>
  351 + <biometric-signature name="jogging19-1">
  352 + <presentation Label="jogging" file-name="jogging/person19_jogging_d1_uncomp.avi" />
  353 + </biometric-signature>
  354 + <biometric-signature name="jogging19-2">
  355 + <presentation Label="jogging" file-name="jogging/person19_jogging_d2_uncomp.avi" />
  356 + </biometric-signature>
  357 + <biometric-signature name="jogging19-3">
  358 + <presentation Label="jogging" file-name="jogging/person19_jogging_d3_uncomp.avi" />
  359 + </biometric-signature>
  360 + <biometric-signature name="jogging19-4">
  361 + <presentation Label="jogging" file-name="jogging/person19_jogging_d4_uncomp.avi" />
  362 + </biometric-signature>
  363 + <biometric-signature name="jogging20-1">
  364 + <presentation Label="jogging" file-name="jogging/person20_jogging_d1_uncomp.avi" />
  365 + </biometric-signature>
  366 + <biometric-signature name="jogging20-2">
  367 + <presentation Label="jogging" file-name="jogging/person20_jogging_d2_uncomp.avi" />
  368 + </biometric-signature>
  369 + <biometric-signature name="jogging20-3">
  370 + <presentation Label="jogging" file-name="jogging/person20_jogging_d3_uncomp.avi" />
  371 + </biometric-signature>
  372 + <biometric-signature name="jogging20-4">
  373 + <presentation Label="jogging" file-name="jogging/person20_jogging_d4_uncomp.avi" />
  374 + </biometric-signature>
  375 + <biometric-signature name="jogging21-1">
  376 + <presentation Label="jogging" file-name="jogging/person21_jogging_d1_uncomp.avi" />
  377 + </biometric-signature>
  378 + <biometric-signature name="jogging21-2">
  379 + <presentation Label="jogging" file-name="jogging/person21_jogging_d2_uncomp.avi" />
  380 + </biometric-signature>
  381 + <biometric-signature name="jogging21-3">
  382 + <presentation Label="jogging" file-name="jogging/person21_jogging_d3_uncomp.avi" />
  383 + </biometric-signature>
  384 + <biometric-signature name="jogging21-4">
  385 + <presentation Label="jogging" file-name="jogging/person21_jogging_d4_uncomp.avi" />
  386 + </biometric-signature>
  387 + <biometric-signature name="jogging22-1">
  388 + <presentation Label="jogging" file-name="jogging/person22_jogging_d1_uncomp.avi" />
  389 + </biometric-signature>
  390 + <biometric-signature name="jogging22-2">
  391 + <presentation Label="jogging" file-name="jogging/person22_jogging_d2_uncomp.avi" />
  392 + </biometric-signature>
  393 + <biometric-signature name="jogging22-3">
  394 + <presentation Label="jogging" file-name="jogging/person22_jogging_d3_uncomp.avi" />
  395 + </biometric-signature>
  396 + <biometric-signature name="jogging22-4">
  397 + <presentation Label="jogging" file-name="jogging/person22_jogging_d4_uncomp.avi" />
  398 + </biometric-signature>
  399 + <biometric-signature name="jogging23-1">
  400 + <presentation Label="jogging" file-name="jogging/person23_jogging_d1_uncomp.avi" />
  401 + </biometric-signature>
  402 + <biometric-signature name="jogging23-2">
  403 + <presentation Label="jogging" file-name="jogging/person23_jogging_d2_uncomp.avi" />
  404 + </biometric-signature>
  405 + <biometric-signature name="jogging23-3">
  406 + <presentation Label="jogging" file-name="jogging/person23_jogging_d3_uncomp.avi" />
  407 + </biometric-signature>
  408 + <biometric-signature name="jogging23-4">
  409 + <presentation Label="jogging" file-name="jogging/person23_jogging_d4_uncomp.avi" />
  410 + </biometric-signature>
  411 + <biometric-signature name="jogging24-1">
  412 + <presentation Label="jogging" file-name="jogging/person24_jogging_d1_uncomp.avi" />
  413 + </biometric-signature>
  414 + <biometric-signature name="jogging24-2">
  415 + <presentation Label="jogging" file-name="jogging/person24_jogging_d2_uncomp.avi" />
  416 + </biometric-signature>
  417 + <biometric-signature name="jogging24-3">
  418 + <presentation Label="jogging" file-name="jogging/person24_jogging_d3_uncomp.avi" />
  419 + </biometric-signature>
  420 + <biometric-signature name="jogging24-4">
  421 + <presentation Label="jogging" file-name="jogging/person24_jogging_d4_uncomp.avi" />
  422 + </biometric-signature>
  423 + <biometric-signature name="jogging25-1">
  424 + <presentation Label="jogging" file-name="jogging/person25_jogging_d1_uncomp.avi" />
  425 + </biometric-signature>
  426 + <biometric-signature name="jogging25-2">
  427 + <presentation Label="jogging" file-name="jogging/person25_jogging_d2_uncomp.avi" />
  428 + </biometric-signature>
  429 + <biometric-signature name="jogging25-3">
  430 + <presentation Label="jogging" file-name="jogging/person25_jogging_d3_uncomp.avi" />
  431 + </biometric-signature>
  432 + <biometric-signature name="jogging25-4">
  433 + <presentation Label="jogging" file-name="jogging/person25_jogging_d4_uncomp.avi" />
  434 + </biometric-signature>
  435 + <biometric-signature name="running17-1">
  436 + <presentation Label="running" file-name="running/person17_running_d1_uncomp.avi" />
  437 + </biometric-signature>
  438 + <biometric-signature name="running17-2">
  439 + <presentation Label="running" file-name="running/person17_running_d2_uncomp.avi" />
  440 + </biometric-signature>
  441 + <biometric-signature name="running17-3">
  442 + <presentation Label="running" file-name="running/person17_running_d3_uncomp.avi" />
  443 + </biometric-signature>
  444 + <biometric-signature name="running17-4">
  445 + <presentation Label="running" file-name="running/person17_running_d4_uncomp.avi" />
  446 + </biometric-signature>
  447 + <biometric-signature name="running18-1">
  448 + <presentation Label="running" file-name="running/person18_running_d1_uncomp.avi" />
  449 + </biometric-signature>
  450 + <biometric-signature name="running18-2">
  451 + <presentation Label="running" file-name="running/person18_running_d2_uncomp.avi" />
  452 + </biometric-signature>
  453 + <biometric-signature name="running18-3">
  454 + <presentation Label="running" file-name="running/person18_running_d3_uncomp.avi" />
  455 + </biometric-signature>
  456 + <biometric-signature name="running18-4">
  457 + <presentation Label="running" file-name="running/person18_running_d4_uncomp.avi" />
  458 + </biometric-signature>
  459 + <biometric-signature name="running19-1">
  460 + <presentation Label="running" file-name="running/person19_running_d1_uncomp.avi" />
  461 + </biometric-signature>
  462 + <biometric-signature name="running19-2">
  463 + <presentation Label="running" file-name="running/person19_running_d2_uncomp.avi" />
  464 + </biometric-signature>
  465 + <biometric-signature name="running19-3">
  466 + <presentation Label="running" file-name="running/person19_running_d3_uncomp.avi" />
  467 + </biometric-signature>
  468 + <biometric-signature name="running19-4">
  469 + <presentation Label="running" file-name="running/person19_running_d4_uncomp.avi" />
  470 + </biometric-signature>
  471 + <biometric-signature name="running20-1">
  472 + <presentation Label="running" file-name="running/person20_running_d1_uncomp.avi" />
  473 + </biometric-signature>
  474 + <biometric-signature name="running20-2">
  475 + <presentation Label="running" file-name="running/person20_running_d2_uncomp.avi" />
  476 + </biometric-signature>
  477 + <biometric-signature name="running20-3">
  478 + <presentation Label="running" file-name="running/person20_running_d3_uncomp.avi" />
  479 + </biometric-signature>
  480 + <biometric-signature name="running20-4">
  481 + <presentation Label="running" file-name="running/person20_running_d4_uncomp.avi" />
  482 + </biometric-signature>
  483 + <biometric-signature name="running21-1">
  484 + <presentation Label="running" file-name="running/person21_running_d1_uncomp.avi" />
  485 + </biometric-signature>
  486 + <biometric-signature name="running21-2">
  487 + <presentation Label="running" file-name="running/person21_running_d2_uncomp.avi" />
  488 + </biometric-signature>
  489 + <biometric-signature name="running21-3">
  490 + <presentation Label="running" file-name="running/person21_running_d3_uncomp.avi" />
  491 + </biometric-signature>
  492 + <biometric-signature name="running21-4">
  493 + <presentation Label="running" file-name="running/person21_running_d4_uncomp.avi" />
  494 + </biometric-signature>
  495 + <biometric-signature name="running22-1">
  496 + <presentation Label="running" file-name="running/person22_running_d1_uncomp.avi" />
  497 + </biometric-signature>
  498 + <biometric-signature name="running22-2">
  499 + <presentation Label="running" file-name="running/person22_running_d2_uncomp.avi" />
  500 + </biometric-signature>
  501 + <biometric-signature name="running22-3">
  502 + <presentation Label="running" file-name="running/person22_running_d3_uncomp.avi" />
  503 + </biometric-signature>
  504 + <biometric-signature name="running22-4">
  505 + <presentation Label="running" file-name="running/person22_running_d4_uncomp.avi" />
  506 + </biometric-signature>
  507 + <biometric-signature name="running23-1">
  508 + <presentation Label="running" file-name="running/person23_running_d1_uncomp.avi" />
  509 + </biometric-signature>
  510 + <biometric-signature name="running23-2">
  511 + <presentation Label="running" file-name="running/person23_running_d2_uncomp.avi" />
  512 + </biometric-signature>
  513 + <biometric-signature name="running23-3">
  514 + <presentation Label="running" file-name="running/person23_running_d3_uncomp.avi" />
  515 + </biometric-signature>
  516 + <biometric-signature name="running23-4">
  517 + <presentation Label="running" file-name="running/person23_running_d4_uncomp.avi" />
  518 + </biometric-signature>
  519 + <biometric-signature name="running24-1">
  520 + <presentation Label="running" file-name="running/person24_running_d1_uncomp.avi" />
  521 + </biometric-signature>
  522 + <biometric-signature name="running24-2">
  523 + <presentation Label="running" file-name="running/person24_running_d2_uncomp.avi" />
  524 + </biometric-signature>
  525 + <biometric-signature name="running24-3">
  526 + <presentation Label="running" file-name="running/person24_running_d3_uncomp.avi" />
  527 + </biometric-signature>
  528 + <biometric-signature name="running24-4">
  529 + <presentation Label="running" file-name="running/person24_running_d4_uncomp.avi" />
  530 + </biometric-signature>
  531 + <biometric-signature name="running25-1">
  532 + <presentation Label="running" file-name="running/person25_running_d1_uncomp.avi" />
  533 + </biometric-signature>
  534 + <biometric-signature name="running25-2">
  535 + <presentation Label="running" file-name="running/person25_running_d2_uncomp.avi" />
  536 + </biometric-signature>
  537 + <biometric-signature name="running25-3">
  538 + <presentation Label="running" file-name="running/person25_running_d3_uncomp.avi" />
  539 + </biometric-signature>
  540 + <biometric-signature name="running25-4">
  541 + <presentation Label="running" file-name="running/person25_running_d4_uncomp.avi" />
  542 + </biometric-signature>
  543 + <biometric-signature name="walking17-1">
  544 + <presentation Label="walking" file-name="walking/person17_walking_d1_uncomp.avi" />
  545 + </biometric-signature>
  546 + <biometric-signature name="walking17-2">
  547 + <presentation Label="walking" file-name="walking/person17_walking_d2_uncomp.avi" />
  548 + </biometric-signature>
  549 + <biometric-signature name="walking17-3">
  550 + <presentation Label="walking" file-name="walking/person17_walking_d3_uncomp.avi" />
  551 + </biometric-signature>
  552 + <biometric-signature name="walking17-4">
  553 + <presentation Label="walking" file-name="walking/person17_walking_d4_uncomp.avi" />
  554 + </biometric-signature>
  555 + <biometric-signature name="walking18-1">
  556 + <presentation Label="walking" file-name="walking/person18_walking_d1_uncomp.avi" />
  557 + </biometric-signature>
  558 + <biometric-signature name="walking18-2">
  559 + <presentation Label="walking" file-name="walking/person18_walking_d2_uncomp.avi" />
  560 + </biometric-signature>
  561 + <biometric-signature name="walking18-3">
  562 + <presentation Label="walking" file-name="walking/person18_walking_d3_uncomp.avi" />
  563 + </biometric-signature>
  564 + <biometric-signature name="walking18-4">
  565 + <presentation Label="walking" file-name="walking/person18_walking_d4_uncomp.avi" />
  566 + </biometric-signature>
  567 + <biometric-signature name="walking19-1">
  568 + <presentation Label="walking" file-name="walking/person19_walking_d1_uncomp.avi" />
  569 + </biometric-signature>
  570 + <biometric-signature name="walking19-2">
  571 + <presentation Label="walking" file-name="walking/person19_walking_d2_uncomp.avi" />
  572 + </biometric-signature>
  573 + <biometric-signature name="walking19-3">
  574 + <presentation Label="walking" file-name="walking/person19_walking_d3_uncomp.avi" />
  575 + </biometric-signature>
  576 + <biometric-signature name="walking19-4">
  577 + <presentation Label="walking" file-name="walking/person19_walking_d4_uncomp.avi" />
  578 + </biometric-signature>
  579 + <biometric-signature name="walking20-1">
  580 + <presentation Label="walking" file-name="walking/person20_walking_d1_uncomp.avi" />
  581 + </biometric-signature>
  582 + <biometric-signature name="walking20-2">
  583 + <presentation Label="walking" file-name="walking/person20_walking_d2_uncomp.avi" />
  584 + </biometric-signature>
  585 + <biometric-signature name="walking20-3">
  586 + <presentation Label="walking" file-name="walking/person20_walking_d3_uncomp.avi" />
  587 + </biometric-signature>
  588 + <biometric-signature name="walking20-4">
  589 + <presentation Label="walking" file-name="walking/person20_walking_d4_uncomp.avi" />
  590 + </biometric-signature>
  591 + <biometric-signature name="walking21-1">
  592 + <presentation Label="walking" file-name="walking/person21_walking_d1_uncomp.avi" />
  593 + </biometric-signature>
  594 + <biometric-signature name="walking21-2">
  595 + <presentation Label="walking" file-name="walking/person21_walking_d2_uncomp.avi" />
  596 + </biometric-signature>
  597 + <biometric-signature name="walking21-3">
  598 + <presentation Label="walking" file-name="walking/person21_walking_d3_uncomp.avi" />
  599 + </biometric-signature>
  600 + <biometric-signature name="walking21-4">
  601 + <presentation Label="walking" file-name="walking/person21_walking_d4_uncomp.avi" />
  602 + </biometric-signature>
  603 + <biometric-signature name="walking22-1">
  604 + <presentation Label="walking" file-name="walking/person22_walking_d1_uncomp.avi" />
  605 + </biometric-signature>
  606 + <biometric-signature name="walking22-2">
  607 + <presentation Label="walking" file-name="walking/person22_walking_d2_uncomp.avi" />
  608 + </biometric-signature>
  609 + <biometric-signature name="walking22-3">
  610 + <presentation Label="walking" file-name="walking/person22_walking_d3_uncomp.avi" />
  611 + </biometric-signature>
  612 + <biometric-signature name="walking22-4">
  613 + <presentation Label="walking" file-name="walking/person22_walking_d4_uncomp.avi" />
  614 + </biometric-signature>
  615 + <biometric-signature name="walking23-1">
  616 + <presentation Label="walking" file-name="walking/person23_walking_d1_uncomp.avi" />
  617 + </biometric-signature>
  618 + <biometric-signature name="walking23-2">
  619 + <presentation Label="walking" file-name="walking/person23_walking_d2_uncomp.avi" />
  620 + </biometric-signature>
  621 + <biometric-signature name="walking23-3">
  622 + <presentation Label="walking" file-name="walking/person23_walking_d3_uncomp.avi" />
  623 + </biometric-signature>
  624 + <biometric-signature name="walking23-4">
  625 + <presentation Label="walking" file-name="walking/person23_walking_d4_uncomp.avi" />
  626 + </biometric-signature>
  627 + <biometric-signature name="walking24-1">
  628 + <presentation Label="walking" file-name="walking/person24_walking_d1_uncomp.avi" />
  629 + </biometric-signature>
  630 + <biometric-signature name="walking24-2">
  631 + <presentation Label="walking" file-name="walking/person24_walking_d2_uncomp.avi" />
  632 + </biometric-signature>
  633 + <biometric-signature name="walking24-3">
  634 + <presentation Label="walking" file-name="walking/person24_walking_d3_uncomp.avi" />
  635 + </biometric-signature>
  636 + <biometric-signature name="walking24-4">
  637 + <presentation Label="walking" file-name="walking/person24_walking_d4_uncomp.avi" />
  638 + </biometric-signature>
  639 + <biometric-signature name="walking25-1">
  640 + <presentation Label="walking" file-name="walking/person25_walking_d1_uncomp.avi" />
  641 + </biometric-signature>
  642 + <biometric-signature name="walking25-2">
  643 + <presentation Label="walking" file-name="walking/person25_walking_d2_uncomp.avi" />
  644 + </biometric-signature>
  645 + <biometric-signature name="walking25-3">
  646 + <presentation Label="walking" file-name="walking/person25_walking_d3_uncomp.avi" />
  647 + </biometric-signature>
  648 + <biometric-signature name="walking25-4">
  649 + <presentation Label="walking" file-name="walking/person25_walking_d4_uncomp.avi" />
  650 + </biometric-signature>
  651 +</biometric-signature-set>
... ...
data/KTH/train_16ppl.xml 0 → 100644
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<biometric-signature-set>
  3 + <biometric-signature name="boxing1-1">
  4 + <presentation Label="boxing" file-name="boxing/person01_boxing_d1_uncomp.avi" />
  5 + </biometric-signature>
  6 + <biometric-signature name="boxing1-2">
  7 + <presentation Label="boxing" file-name="boxing/person01_boxing_d2_uncomp.avi" />
  8 + </biometric-signature>
  9 + <biometric-signature name="boxing1-3">
  10 + <presentation Label="boxing" file-name="boxing/person01_boxing_d3_uncomp.avi" />
  11 + </biometric-signature>
  12 + <biometric-signature name="boxing2-1">
  13 + <presentation Label="boxing" file-name="boxing/person02_boxing_d1_uncomp.avi" />
  14 + </biometric-signature>
  15 + <biometric-signature name="boxing2-2">
  16 + <presentation Label="boxing" file-name="boxing/person02_boxing_d2_uncomp.avi" />
  17 + </biometric-signature>
  18 + <biometric-signature name="boxing2-3">
  19 + <presentation Label="boxing" file-name="boxing/person02_boxing_d3_uncomp.avi" />
  20 + </biometric-signature>
  21 + <biometric-signature name="boxing2-4">
  22 + <presentation Label="boxing" file-name="boxing/person02_boxing_d4_uncomp.avi" />
  23 + </biometric-signature>
  24 + <biometric-signature name="boxing3-1">
  25 + <presentation Label="boxing" file-name="boxing/person03_boxing_d1_uncomp.avi" />
  26 + </biometric-signature>
  27 + <biometric-signature name="boxing3-2">
  28 + <presentation Label="boxing" file-name="boxing/person03_boxing_d2_uncomp.avi" />
  29 + </biometric-signature>
  30 + <biometric-signature name="boxing3-3">
  31 + <presentation Label="boxing" file-name="boxing/person03_boxing_d3_uncomp.avi" />
  32 + </biometric-signature>
  33 + <biometric-signature name="boxing3-4">
  34 + <presentation Label="boxing" file-name="boxing/person03_boxing_d4_uncomp.avi" />
  35 + </biometric-signature>
  36 + <biometric-signature name="boxing4-1">
  37 + <presentation Label="boxing" file-name="boxing/person04_boxing_d1_uncomp.avi" />
  38 + </biometric-signature>
  39 + <biometric-signature name="boxing4-2">
  40 + <presentation Label="boxing" file-name="boxing/person04_boxing_d2_uncomp.avi" />
  41 + </biometric-signature>
  42 + <biometric-signature name="boxing4-3">
  43 + <presentation Label="boxing" file-name="boxing/person04_boxing_d3_uncomp.avi" />
  44 + </biometric-signature>
  45 + <biometric-signature name="boxing4-4">
  46 + <presentation Label="boxing" file-name="boxing/person04_boxing_d4_uncomp.avi" />
  47 + </biometric-signature>
  48 + <biometric-signature name="boxing5-1">
  49 + <presentation Label="boxing" file-name="boxing/person05_boxing_d1_uncomp.avi" />
  50 + </biometric-signature>
  51 + <biometric-signature name="boxing5-2">
  52 + <presentation Label="boxing" file-name="boxing/person05_boxing_d2_uncomp.avi" />
  53 + </biometric-signature>
  54 + <biometric-signature name="boxing5-3">
  55 + <presentation Label="boxing" file-name="boxing/person05_boxing_d3_uncomp.avi" />
  56 + </biometric-signature>
  57 + <biometric-signature name="boxing5-4">
  58 + <presentation Label="boxing" file-name="boxing/person05_boxing_d4_uncomp.avi" />
  59 + </biometric-signature>
  60 + <biometric-signature name="boxing6-1">
  61 + <presentation Label="boxing" file-name="boxing/person06_boxing_d1_uncomp.avi" />
  62 + </biometric-signature>
  63 + <biometric-signature name="boxing6-2">
  64 + <presentation Label="boxing" file-name="boxing/person06_boxing_d2_uncomp.avi" />
  65 + </biometric-signature>
  66 + <biometric-signature name="boxing6-3">
  67 + <presentation Label="boxing" file-name="boxing/person06_boxing_d3_uncomp.avi" />
  68 + </biometric-signature>
  69 + <biometric-signature name="boxing6-4">
  70 + <presentation Label="boxing" file-name="boxing/person06_boxing_d4_uncomp.avi" />
  71 + </biometric-signature>
  72 + <biometric-signature name="boxing7-1">
  73 + <presentation Label="boxing" file-name="boxing/person07_boxing_d1_uncomp.avi" />
  74 + </biometric-signature>
  75 + <biometric-signature name="boxing7-2">
  76 + <presentation Label="boxing" file-name="boxing/person07_boxing_d2_uncomp.avi" />
  77 + </biometric-signature>
  78 + <biometric-signature name="boxing7-3">
  79 + <presentation Label="boxing" file-name="boxing/person07_boxing_d3_uncomp.avi" />
  80 + </biometric-signature>
  81 + <biometric-signature name="boxing7-4">
  82 + <presentation Label="boxing" file-name="boxing/person07_boxing_d4_uncomp.avi" />
  83 + </biometric-signature>
  84 + <biometric-signature name="boxing8-1">
  85 + <presentation Label="boxing" file-name="boxing/person08_boxing_d1_uncomp.avi" />
  86 + </biometric-signature>
  87 + <biometric-signature name="boxing8-2">
  88 + <presentation Label="boxing" file-name="boxing/person08_boxing_d2_uncomp.avi" />
  89 + </biometric-signature>
  90 + <biometric-signature name="boxing8-3">
  91 + <presentation Label="boxing" file-name="boxing/person08_boxing_d3_uncomp.avi" />
  92 + </biometric-signature>
  93 + <biometric-signature name="boxing8-4">
  94 + <presentation Label="boxing" file-name="boxing/person08_boxing_d4_uncomp.avi" />
  95 + </biometric-signature>
  96 + <biometric-signature name="boxing9-1">
  97 + <presentation Label="boxing" file-name="boxing/person09_boxing_d1_uncomp.avi" />
  98 + </biometric-signature>
  99 + <biometric-signature name="boxing9-2">
  100 + <presentation Label="boxing" file-name="boxing/person09_boxing_d2_uncomp.avi" />
  101 + </biometric-signature>
  102 + <biometric-signature name="boxing9-3">
  103 + <presentation Label="boxing" file-name="boxing/person09_boxing_d3_uncomp.avi" />
  104 + </biometric-signature>
  105 + <biometric-signature name="boxing9-4">
  106 + <presentation Label="boxing" file-name="boxing/person09_boxing_d4_uncomp.avi" />
  107 + </biometric-signature>
  108 + <biometric-signature name="boxing10-1">
  109 + <presentation Label="boxing" file-name="boxing/person10_boxing_d1_uncomp.avi" />
  110 + </biometric-signature>
  111 + <biometric-signature name="boxing10-2">
  112 + <presentation Label="boxing" file-name="boxing/person10_boxing_d2_uncomp.avi" />
  113 + </biometric-signature>
  114 + <biometric-signature name="boxing10-3">
  115 + <presentation Label="boxing" file-name="boxing/person10_boxing_d3_uncomp.avi" />
  116 + </biometric-signature>
  117 + <biometric-signature name="boxing10-4">
  118 + <presentation Label="boxing" file-name="boxing/person10_boxing_d4_uncomp.avi" />
  119 + </biometric-signature>
  120 + <biometric-signature name="boxing11-1">
  121 + <presentation Label="boxing" file-name="boxing/person11_boxing_d1_uncomp.avi" />
  122 + </biometric-signature>
  123 + <biometric-signature name="boxing11-2">
  124 + <presentation Label="boxing" file-name="boxing/person11_boxing_d2_uncomp.avi" />
  125 + </biometric-signature>
  126 + <biometric-signature name="boxing11-3">
  127 + <presentation Label="boxing" file-name="boxing/person11_boxing_d3_uncomp.avi" />
  128 + </biometric-signature>
  129 + <biometric-signature name="boxing11-4">
  130 + <presentation Label="boxing" file-name="boxing/person11_boxing_d4_uncomp.avi" />
  131 + </biometric-signature>
  132 + <biometric-signature name="boxing12-1">
  133 + <presentation Label="boxing" file-name="boxing/person12_boxing_d1_uncomp.avi" />
  134 + </biometric-signature>
  135 + <biometric-signature name="boxing12-2">
  136 + <presentation Label="boxing" file-name="boxing/person12_boxing_d2_uncomp.avi" />
  137 + </biometric-signature>
  138 + <biometric-signature name="boxing12-3">
  139 + <presentation Label="boxing" file-name="boxing/person12_boxing_d3_uncomp.avi" />
  140 + </biometric-signature>
  141 + <biometric-signature name="boxing12-4">
  142 + <presentation Label="boxing" file-name="boxing/person12_boxing_d4_uncomp.avi" />
  143 + </biometric-signature>
  144 + <biometric-signature name="boxing13-1">
  145 + <presentation Label="boxing" file-name="boxing/person13_boxing_d1_uncomp.avi" />
  146 + </biometric-signature>
  147 + <biometric-signature name="boxing13-2">
  148 + <presentation Label="boxing" file-name="boxing/person13_boxing_d2_uncomp.avi" />
  149 + </biometric-signature>
  150 + <biometric-signature name="boxing13-3">
  151 + <presentation Label="boxing" file-name="boxing/person13_boxing_d3_uncomp.avi" />
  152 + </biometric-signature>
  153 + <biometric-signature name="boxing13-4">
  154 + <presentation Label="boxing" file-name="boxing/person13_boxing_d4_uncomp.avi" />
  155 + </biometric-signature>
  156 + <biometric-signature name="boxing14-1">
  157 + <presentation Label="boxing" file-name="boxing/person14_boxing_d1_uncomp.avi" />
  158 + </biometric-signature>
  159 + <biometric-signature name="boxing14-2">
  160 + <presentation Label="boxing" file-name="boxing/person14_boxing_d2_uncomp.avi" />
  161 + </biometric-signature>
  162 + <biometric-signature name="boxing14-3">
  163 + <presentation Label="boxing" file-name="boxing/person14_boxing_d3_uncomp.avi" />
  164 + </biometric-signature>
  165 + <biometric-signature name="boxing14-4">
  166 + <presentation Label="boxing" file-name="boxing/person14_boxing_d4_uncomp.avi" />
  167 + </biometric-signature>
  168 + <biometric-signature name="boxing15-1">
  169 + <presentation Label="boxing" file-name="boxing/person15_boxing_d1_uncomp.avi" />
  170 + </biometric-signature>
  171 + <biometric-signature name="boxing15-2">
  172 + <presentation Label="boxing" file-name="boxing/person15_boxing_d2_uncomp.avi" />
  173 + </biometric-signature>
  174 + <biometric-signature name="boxing15-3">
  175 + <presentation Label="boxing" file-name="boxing/person15_boxing_d3_uncomp.avi" />
  176 + </biometric-signature>
  177 + <biometric-signature name="boxing15-4">
  178 + <presentation Label="boxing" file-name="boxing/person15_boxing_d4_uncomp.avi" />
  179 + </biometric-signature>
  180 + <biometric-signature name="boxing16-1">
  181 + <presentation Label="boxing" file-name="boxing/person16_boxing_d1_uncomp.avi" />
  182 + </biometric-signature>
  183 + <biometric-signature name="boxing16-2">
  184 + <presentation Label="boxing" file-name="boxing/person16_boxing_d2_uncomp.avi" />
  185 + </biometric-signature>
  186 + <biometric-signature name="boxing16-3">
  187 + <presentation Label="boxing" file-name="boxing/person16_boxing_d3_uncomp.avi" />
  188 + </biometric-signature>
  189 + <biometric-signature name="boxing16-4">
  190 + <presentation Label="boxing" file-name="boxing/person16_boxing_d4_uncomp.avi" />
  191 + </biometric-signature>
  192 + <biometric-signature name="handclapping1-1">
  193 + <presentation Label="handclapping" file-name="handclapping/person01_handclapping_d1_uncomp.avi" />
  194 + </biometric-signature>
  195 + <biometric-signature name="handclapping1-2">
  196 + <presentation Label="handclapping" file-name="handclapping/person01_handclapping_d2_uncomp.avi" />
  197 + </biometric-signature>
  198 + <biometric-signature name="handclapping1-3">
  199 + <presentation Label="handclapping" file-name="handclapping/person01_handclapping_d3_uncomp.avi" />
  200 + </biometric-signature>
  201 + <biometric-signature name="handclapping1-4">
  202 + <presentation Label="handclapping" file-name="handclapping/person01_handclapping_d4_uncomp.avi" />
  203 + </biometric-signature>
  204 + <biometric-signature name="handclapping2-1">
  205 + <presentation Label="handclapping" file-name="handclapping/person02_handclapping_d1_uncomp.avi" />
  206 + </biometric-signature>
  207 + <biometric-signature name="handclapping2-2">
  208 + <presentation Label="handclapping" file-name="handclapping/person02_handclapping_d2_uncomp.avi" />
  209 + </biometric-signature>
  210 + <biometric-signature name="handclapping2-3">
  211 + <presentation Label="handclapping" file-name="handclapping/person02_handclapping_d3_uncomp.avi" />
  212 + </biometric-signature>
  213 + <biometric-signature name="handclapping2-4">
  214 + <presentation Label="handclapping" file-name="handclapping/person02_handclapping_d4_uncomp.avi" />
  215 + </biometric-signature>
  216 + <biometric-signature name="handclapping3-1">
  217 + <presentation Label="handclapping" file-name="handclapping/person03_handclapping_d1_uncomp.avi" />
  218 + </biometric-signature>
  219 + <biometric-signature name="handclapping3-2">
  220 + <presentation Label="handclapping" file-name="handclapping/person03_handclapping_d2_uncomp.avi" />
  221 + </biometric-signature>
  222 + <biometric-signature name="handclapping3-3">
  223 + <presentation Label="handclapping" file-name="handclapping/person03_handclapping_d3_uncomp.avi" />
  224 + </biometric-signature>
  225 + <biometric-signature name="handclapping3-4">
  226 + <presentation Label="handclapping" file-name="handclapping/person03_handclapping_d4_uncomp.avi" />
  227 + </biometric-signature>
  228 + <biometric-signature name="handclapping4-1">
  229 + <presentation Label="handclapping" file-name="handclapping/person04_handclapping_d1_uncomp.avi" />
  230 + </biometric-signature>
  231 + <biometric-signature name="handclapping4-2">
  232 + <presentation Label="handclapping" file-name="handclapping/person04_handclapping_d2_uncomp.avi" />
  233 + </biometric-signature>
  234 + <biometric-signature name="handclapping4-3">
  235 + <presentation Label="handclapping" file-name="handclapping/person04_handclapping_d3_uncomp.avi" />
  236 + </biometric-signature>
  237 + <biometric-signature name="handclapping4-4">
  238 + <presentation Label="handclapping" file-name="handclapping/person04_handclapping_d4_uncomp.avi" />
  239 + </biometric-signature>
  240 + <biometric-signature name="handclapping5-1">
  241 + <presentation Label="handclapping" file-name="handclapping/person05_handclapping_d1_uncomp.avi" />
  242 + </biometric-signature>
  243 + <biometric-signature name="handclapping5-2">
  244 + <presentation Label="handclapping" file-name="handclapping/person05_handclapping_d2_uncomp.avi" />
  245 + </biometric-signature>
  246 + <biometric-signature name="handclapping5-3">
  247 + <presentation Label="handclapping" file-name="handclapping/person05_handclapping_d3_uncomp.avi" />
  248 + </biometric-signature>
  249 + <biometric-signature name="handclapping5-4">
  250 + <presentation Label="handclapping" file-name="handclapping/person05_handclapping_d4_uncomp.avi" />
  251 + </biometric-signature>
  252 + <biometric-signature name="handclapping6-1">
  253 + <presentation Label="handclapping" file-name="handclapping/person06_handclapping_d1_uncomp.avi" />
  254 + </biometric-signature>
  255 + <biometric-signature name="handclapping6-2">
  256 + <presentation Label="handclapping" file-name="handclapping/person06_handclapping_d2_uncomp.avi" />
  257 + </biometric-signature>
  258 + <biometric-signature name="handclapping6-3">
  259 + <presentation Label="handclapping" file-name="handclapping/person06_handclapping_d3_uncomp.avi" />
  260 + </biometric-signature>
  261 + <biometric-signature name="handclapping6-4">
  262 + <presentation Label="handclapping" file-name="handclapping/person06_handclapping_d4_uncomp.avi" />
  263 + </biometric-signature>
  264 + <biometric-signature name="handclapping7-1">
  265 + <presentation Label="handclapping" file-name="handclapping/person07_handclapping_d1_uncomp.avi" />
  266 + </biometric-signature>
  267 + <biometric-signature name="handclapping7-2">
  268 + <presentation Label="handclapping" file-name="handclapping/person07_handclapping_d2_uncomp.avi" />
  269 + </biometric-signature>
  270 + <biometric-signature name="handclapping7-3">
  271 + <presentation Label="handclapping" file-name="handclapping/person07_handclapping_d3_uncomp.avi" />
  272 + </biometric-signature>
  273 + <biometric-signature name="handclapping7-4">
  274 + <presentation Label="handclapping" file-name="handclapping/person07_handclapping_d4_uncomp.avi" />
  275 + </biometric-signature>
  276 + <biometric-signature name="handclapping8-1">
  277 + <presentation Label="handclapping" file-name="handclapping/person08_handclapping_d1_uncomp.avi" />
  278 + </biometric-signature>
  279 + <biometric-signature name="handclapping8-2">
  280 + <presentation Label="handclapping" file-name="handclapping/person08_handclapping_d2_uncomp.avi" />
  281 + </biometric-signature>
  282 + <biometric-signature name="handclapping8-3">
  283 + <presentation Label="handclapping" file-name="handclapping/person08_handclapping_d3_uncomp.avi" />
  284 + </biometric-signature>
  285 + <biometric-signature name="handclapping8-4">
  286 + <presentation Label="handclapping" file-name="handclapping/person08_handclapping_d4_uncomp.avi" />
  287 + </biometric-signature>
  288 + <biometric-signature name="handclapping9-1">
  289 + <presentation Label="handclapping" file-name="handclapping/person09_handclapping_d1_uncomp.avi" />
  290 + </biometric-signature>
  291 + <biometric-signature name="handclapping9-2">
  292 + <presentation Label="handclapping" file-name="handclapping/person09_handclapping_d2_uncomp.avi" />
  293 + </biometric-signature>
  294 + <biometric-signature name="handclapping9-3">
  295 + <presentation Label="handclapping" file-name="handclapping/person09_handclapping_d3_uncomp.avi" />
  296 + </biometric-signature>
  297 + <biometric-signature name="handclapping9-4">
  298 + <presentation Label="handclapping" file-name="handclapping/person09_handclapping_d4_uncomp.avi" />
  299 + </biometric-signature>
  300 + <biometric-signature name="handclapping10-1">
  301 + <presentation Label="handclapping" file-name="handclapping/person10_handclapping_d1_uncomp.avi" />
  302 + </biometric-signature>
  303 + <biometric-signature name="handclapping10-2">
  304 + <presentation Label="handclapping" file-name="handclapping/person10_handclapping_d2_uncomp.avi" />
  305 + </biometric-signature>
  306 + <biometric-signature name="handclapping10-3">
  307 + <presentation Label="handclapping" file-name="handclapping/person10_handclapping_d3_uncomp.avi" />
  308 + </biometric-signature>
  309 + <biometric-signature name="handclapping10-4">
  310 + <presentation Label="handclapping" file-name="handclapping/person10_handclapping_d4_uncomp.avi" />
  311 + </biometric-signature>
  312 + <biometric-signature name="handclapping11-1">
  313 + <presentation Label="handclapping" file-name="handclapping/person11_handclapping_d1_uncomp.avi" />
  314 + </biometric-signature>
  315 + <biometric-signature name="handclapping11-2">
  316 + <presentation Label="handclapping" file-name="handclapping/person11_handclapping_d2_uncomp.avi" />
  317 + </biometric-signature>
  318 + <biometric-signature name="handclapping11-3">
  319 + <presentation Label="handclapping" file-name="handclapping/person11_handclapping_d3_uncomp.avi" />
  320 + </biometric-signature>
  321 + <biometric-signature name="handclapping11-4">
  322 + <presentation Label="handclapping" file-name="handclapping/person11_handclapping_d4_uncomp.avi" />
  323 + </biometric-signature>
  324 + <biometric-signature name="handclapping12-1">
  325 + <presentation Label="handclapping" file-name="handclapping/person12_handclapping_d1_uncomp.avi" />
  326 + </biometric-signature>
  327 + <biometric-signature name="handclapping12-2">
  328 + <presentation Label="handclapping" file-name="handclapping/person12_handclapping_d2_uncomp.avi" />
  329 + </biometric-signature>
  330 + <biometric-signature name="handclapping12-3">
  331 + <presentation Label="handclapping" file-name="handclapping/person12_handclapping_d3_uncomp.avi" />
  332 + </biometric-signature>
  333 + <biometric-signature name="handclapping12-4">
  334 + <presentation Label="handclapping" file-name="handclapping/person12_handclapping_d4_uncomp.avi" />
  335 + </biometric-signature>
  336 + <biometric-signature name="handclapping13-1">
  337 + <presentation Label="handclapping" file-name="handclapping/person13_handclapping_d1_uncomp.avi" />
  338 + </biometric-signature>
  339 + <biometric-signature name="handclapping13-2">
  340 + <presentation Label="handclapping" file-name="handclapping/person13_handclapping_d2_uncomp.avi" />
  341 + </biometric-signature>
  342 + <biometric-signature name="handclapping13-4">
  343 + <presentation Label="handclapping" file-name="handclapping/person13_handclapping_d4_uncomp.avi" />
  344 + </biometric-signature>
  345 + <biometric-signature name="handclapping14-1">
  346 + <presentation Label="handclapping" file-name="handclapping/person14_handclapping_d1_uncomp.avi" />
  347 + </biometric-signature>
  348 + <biometric-signature name="handclapping14-2">
  349 + <presentation Label="handclapping" file-name="handclapping/person14_handclapping_d2_uncomp.avi" />
  350 + </biometric-signature>
  351 + <biometric-signature name="handclapping14-3">
  352 + <presentation Label="handclapping" file-name="handclapping/person14_handclapping_d3_uncomp.avi" />
  353 + </biometric-signature>
  354 + <biometric-signature name="handclapping14-4">
  355 + <presentation Label="handclapping" file-name="handclapping/person14_handclapping_d4_uncomp.avi" />
  356 + </biometric-signature>
  357 + <biometric-signature name="handclapping15-1">
  358 + <presentation Label="handclapping" file-name="handclapping/person15_handclapping_d1_uncomp.avi" />
  359 + </biometric-signature>
  360 + <biometric-signature name="handclapping15-2">
  361 + <presentation Label="handclapping" file-name="handclapping/person15_handclapping_d2_uncomp.avi" />
  362 + </biometric-signature>
  363 + <biometric-signature name="handclapping15-3">
  364 + <presentation Label="handclapping" file-name="handclapping/person15_handclapping_d3_uncomp.avi" />
  365 + </biometric-signature>
  366 + <biometric-signature name="handclapping15-4">
  367 + <presentation Label="handclapping" file-name="handclapping/person15_handclapping_d4_uncomp.avi" />
  368 + </biometric-signature>
  369 + <biometric-signature name="handclapping16-1">
  370 + <presentation Label="handclapping" file-name="handclapping/person16_handclapping_d1_uncomp.avi" />
  371 + </biometric-signature>
  372 + <biometric-signature name="handclapping16-2">
  373 + <presentation Label="handclapping" file-name="handclapping/person16_handclapping_d2_uncomp.avi" />
  374 + </biometric-signature>
  375 + <biometric-signature name="handclapping16-3">
  376 + <presentation Label="handclapping" file-name="handclapping/person16_handclapping_d3_uncomp.avi" />
  377 + </biometric-signature>
  378 + <biometric-signature name="handclapping16-4">
  379 + <presentation Label="handclapping" file-name="handclapping/person16_handclapping_d4_uncomp.avi" />
  380 + </biometric-signature>
  381 + <biometric-signature name="handwaving1-1">
  382 + <presentation Label="handwaving" file-name="handwaving/person01_handwaving_d1_uncomp.avi" />
  383 + </biometric-signature>
  384 + <biometric-signature name="handwaving1-2">
  385 + <presentation Label="handwaving" file-name="handwaving/person01_handwaving_d2_uncomp.avi" />
  386 + </biometric-signature>
  387 + <biometric-signature name="handwaving1-3">
  388 + <presentation Label="handwaving" file-name="handwaving/person01_handwaving_d3_uncomp.avi" />
  389 + </biometric-signature>
  390 + <biometric-signature name="handwaving1-4">
  391 + <presentation Label="handwaving" file-name="handwaving/person01_handwaving_d4_uncomp.avi" />
  392 + </biometric-signature>
  393 + <biometric-signature name="handwaving2-1">
  394 + <presentation Label="handwaving" file-name="handwaving/person02_handwaving_d1_uncomp.avi" />
  395 + </biometric-signature>
  396 + <biometric-signature name="handwaving2-2">
  397 + <presentation Label="handwaving" file-name="handwaving/person02_handwaving_d2_uncomp.avi" />
  398 + </biometric-signature>
  399 + <biometric-signature name="handwaving2-3">
  400 + <presentation Label="handwaving" file-name="handwaving/person02_handwaving_d3_uncomp.avi" />
  401 + </biometric-signature>
  402 + <biometric-signature name="handwaving2-4">
  403 + <presentation Label="handwaving" file-name="handwaving/person02_handwaving_d4_uncomp.avi" />
  404 + </biometric-signature>
  405 + <biometric-signature name="handwaving3-1">
  406 + <presentation Label="handwaving" file-name="handwaving/person03_handwaving_d1_uncomp.avi" />
  407 + </biometric-signature>
  408 + <biometric-signature name="handwaving3-2">
  409 + <presentation Label="handwaving" file-name="handwaving/person03_handwaving_d2_uncomp.avi" />
  410 + </biometric-signature>
  411 + <biometric-signature name="handwaving3-3">
  412 + <presentation Label="handwaving" file-name="handwaving/person03_handwaving_d3_uncomp.avi" />
  413 + </biometric-signature>
  414 + <biometric-signature name="handwaving3-4">
  415 + <presentation Label="handwaving" file-name="handwaving/person03_handwaving_d4_uncomp.avi" />
  416 + </biometric-signature>
  417 + <biometric-signature name="handwaving4-1">
  418 + <presentation Label="handwaving" file-name="handwaving/person04_handwaving_d1_uncomp.avi" />
  419 + </biometric-signature>
  420 + <biometric-signature name="handwaving4-2">
  421 + <presentation Label="handwaving" file-name="handwaving/person04_handwaving_d2_uncomp.avi" />
  422 + </biometric-signature>
  423 + <biometric-signature name="handwaving4-3">
  424 + <presentation Label="handwaving" file-name="handwaving/person04_handwaving_d3_uncomp.avi" />
  425 + </biometric-signature>
  426 + <biometric-signature name="handwaving4-4">
  427 + <presentation Label="handwaving" file-name="handwaving/person04_handwaving_d4_uncomp.avi" />
  428 + </biometric-signature>
  429 + <biometric-signature name="handwaving5-1">
  430 + <presentation Label="handwaving" file-name="handwaving/person05_handwaving_d1_uncomp.avi" />
  431 + </biometric-signature>
  432 + <biometric-signature name="handwaving5-2">
  433 + <presentation Label="handwaving" file-name="handwaving/person05_handwaving_d2_uncomp.avi" />
  434 + </biometric-signature>
  435 + <biometric-signature name="handwaving5-3">
  436 + <presentation Label="handwaving" file-name="handwaving/person05_handwaving_d3_uncomp.avi" />
  437 + </biometric-signature>
  438 + <biometric-signature name="handwaving5-4">
  439 + <presentation Label="handwaving" file-name="handwaving/person05_handwaving_d4_uncomp.avi" />
  440 + </biometric-signature>
  441 + <biometric-signature name="handwaving6-1">
  442 + <presentation Label="handwaving" file-name="handwaving/person06_handwaving_d1_uncomp.avi" />
  443 + </biometric-signature>
  444 + <biometric-signature name="handwaving6-2">
  445 + <presentation Label="handwaving" file-name="handwaving/person06_handwaving_d2_uncomp.avi" />
  446 + </biometric-signature>
  447 + <biometric-signature name="handwaving6-3">
  448 + <presentation Label="handwaving" file-name="handwaving/person06_handwaving_d3_uncomp.avi" />
  449 + </biometric-signature>
  450 + <biometric-signature name="handwaving6-4">
  451 + <presentation Label="handwaving" file-name="handwaving/person06_handwaving_d4_uncomp.avi" />
  452 + </biometric-signature>
  453 + <biometric-signature name="handwaving7-1">
  454 + <presentation Label="handwaving" file-name="handwaving/person07_handwaving_d1_uncomp.avi" />
  455 + </biometric-signature>
  456 + <biometric-signature name="handwaving7-2">
  457 + <presentation Label="handwaving" file-name="handwaving/person07_handwaving_d2_uncomp.avi" />
  458 + </biometric-signature>
  459 + <biometric-signature name="handwaving7-3">
  460 + <presentation Label="handwaving" file-name="handwaving/person07_handwaving_d3_uncomp.avi" />
  461 + </biometric-signature>
  462 + <biometric-signature name="handwaving7-4">
  463 + <presentation Label="handwaving" file-name="handwaving/person07_handwaving_d4_uncomp.avi" />
  464 + </biometric-signature>
  465 + <biometric-signature name="handwaving8-1">
  466 + <presentation Label="handwaving" file-name="handwaving/person08_handwaving_d1_uncomp.avi" />
  467 + </biometric-signature>
  468 + <biometric-signature name="handwaving8-2">
  469 + <presentation Label="handwaving" file-name="handwaving/person08_handwaving_d2_uncomp.avi" />
  470 + </biometric-signature>
  471 + <biometric-signature name="handwaving8-3">
  472 + <presentation Label="handwaving" file-name="handwaving/person08_handwaving_d3_uncomp.avi" />
  473 + </biometric-signature>
  474 + <biometric-signature name="handwaving8-4">
  475 + <presentation Label="handwaving" file-name="handwaving/person08_handwaving_d4_uncomp.avi" />
  476 + </biometric-signature>
  477 + <biometric-signature name="handwaving9-1">
  478 + <presentation Label="handwaving" file-name="handwaving/person09_handwaving_d1_uncomp.avi" />
  479 + </biometric-signature>
  480 + <biometric-signature name="handwaving9-2">
  481 + <presentation Label="handwaving" file-name="handwaving/person09_handwaving_d2_uncomp.avi" />
  482 + </biometric-signature>
  483 + <biometric-signature name="handwaving9-3">
  484 + <presentation Label="handwaving" file-name="handwaving/person09_handwaving_d3_uncomp.avi" />
  485 + </biometric-signature>
  486 + <biometric-signature name="handwaving9-4">
  487 + <presentation Label="handwaving" file-name="handwaving/person09_handwaving_d4_uncomp.avi" />
  488 + </biometric-signature>
  489 + <biometric-signature name="handwaving10-1">
  490 + <presentation Label="handwaving" file-name="handwaving/person10_handwaving_d1_uncomp.avi" />
  491 + </biometric-signature>
  492 + <biometric-signature name="handwaving10-2">
  493 + <presentation Label="handwaving" file-name="handwaving/person10_handwaving_d2_uncomp.avi" />
  494 + </biometric-signature>
  495 + <biometric-signature name="handwaving10-3">
  496 + <presentation Label="handwaving" file-name="handwaving/person10_handwaving_d3_uncomp.avi" />
  497 + </biometric-signature>
  498 + <biometric-signature name="handwaving10-4">
  499 + <presentation Label="handwaving" file-name="handwaving/person10_handwaving_d4_uncomp.avi" />
  500 + </biometric-signature>
  501 + <biometric-signature name="handwaving11-1">
  502 + <presentation Label="handwaving" file-name="handwaving/person11_handwaving_d1_uncomp.avi" />
  503 + </biometric-signature>
  504 + <biometric-signature name="handwaving11-2">
  505 + <presentation Label="handwaving" file-name="handwaving/person11_handwaving_d2_uncomp.avi" />
  506 + </biometric-signature>
  507 + <biometric-signature name="handwaving11-3">
  508 + <presentation Label="handwaving" file-name="handwaving/person11_handwaving_d3_uncomp.avi" />
  509 + </biometric-signature>
  510 + <biometric-signature name="handwaving11-4">
  511 + <presentation Label="handwaving" file-name="handwaving/person11_handwaving_d4_uncomp.avi" />
  512 + </biometric-signature>
  513 + <biometric-signature name="handwaving12-1">
  514 + <presentation Label="handwaving" file-name="handwaving/person12_handwaving_d1_uncomp.avi" />
  515 + </biometric-signature>
  516 + <biometric-signature name="handwaving12-2">
  517 + <presentation Label="handwaving" file-name="handwaving/person12_handwaving_d2_uncomp.avi" />
  518 + </biometric-signature>
  519 + <biometric-signature name="handwaving12-3">
  520 + <presentation Label="handwaving" file-name="handwaving/person12_handwaving_d3_uncomp.avi" />
  521 + </biometric-signature>
  522 + <biometric-signature name="handwaving12-4">
  523 + <presentation Label="handwaving" file-name="handwaving/person12_handwaving_d4_uncomp.avi" />
  524 + </biometric-signature>
  525 + <biometric-signature name="handwaving13-1">
  526 + <presentation Label="handwaving" file-name="handwaving/person13_handwaving_d1_uncomp.avi" />
  527 + </biometric-signature>
  528 + <biometric-signature name="handwaving13-2">
  529 + <presentation Label="handwaving" file-name="handwaving/person13_handwaving_d2_uncomp.avi" />
  530 + </biometric-signature>
  531 + <biometric-signature name="handwaving13-3">
  532 + <presentation Label="handwaving" file-name="handwaving/person13_handwaving_d3_uncomp.avi" />
  533 + </biometric-signature>
  534 + <biometric-signature name="handwaving13-4">
  535 + <presentation Label="handwaving" file-name="handwaving/person13_handwaving_d4_uncomp.avi" />
  536 + </biometric-signature>
  537 + <biometric-signature name="handwaving14-1">
  538 + <presentation Label="handwaving" file-name="handwaving/person14_handwaving_d1_uncomp.avi" />
  539 + </biometric-signature>
  540 + <biometric-signature name="handwaving14-2">
  541 + <presentation Label="handwaving" file-name="handwaving/person14_handwaving_d2_uncomp.avi" />
  542 + </biometric-signature>
  543 + <biometric-signature name="handwaving14-3">
  544 + <presentation Label="handwaving" file-name="handwaving/person14_handwaving_d3_uncomp.avi" />
  545 + </biometric-signature>
  546 + <biometric-signature name="handwaving14-4">
  547 + <presentation Label="handwaving" file-name="handwaving/person14_handwaving_d4_uncomp.avi" />
  548 + </biometric-signature>
  549 + <biometric-signature name="handwaving15-1">
  550 + <presentation Label="handwaving" file-name="handwaving/person15_handwaving_d1_uncomp.avi" />
  551 + </biometric-signature>
  552 + <biometric-signature name="handwaving15-2">
  553 + <presentation Label="handwaving" file-name="handwaving/person15_handwaving_d2_uncomp.avi" />
  554 + </biometric-signature>
  555 + <biometric-signature name="handwaving15-3">
  556 + <presentation Label="handwaving" file-name="handwaving/person15_handwaving_d3_uncomp.avi" />
  557 + </biometric-signature>
  558 + <biometric-signature name="handwaving15-4">
  559 + <presentation Label="handwaving" file-name="handwaving/person15_handwaving_d4_uncomp.avi" />
  560 + </biometric-signature>
  561 + <biometric-signature name="handwaving16-1">
  562 + <presentation Label="handwaving" file-name="handwaving/person16_handwaving_d1_uncomp.avi" />
  563 + </biometric-signature>
  564 + <biometric-signature name="handwaving16-2">
  565 + <presentation Label="handwaving" file-name="handwaving/person16_handwaving_d2_uncomp.avi" />
  566 + </biometric-signature>
  567 + <biometric-signature name="handwaving16-3">
  568 + <presentation Label="handwaving" file-name="handwaving/person16_handwaving_d3_uncomp.avi" />
  569 + </biometric-signature>
  570 + <biometric-signature name="handwaving16-4">
  571 + <presentation Label="handwaving" file-name="handwaving/person16_handwaving_d4_uncomp.avi" />
  572 + </biometric-signature>
  573 + <biometric-signature name="jogging1-1">
  574 + <presentation Label="jogging" file-name="jogging/person01_jogging_d1_uncomp.avi" />
  575 + </biometric-signature>
  576 + <biometric-signature name="jogging1-2">
  577 + <presentation Label="jogging" file-name="jogging/person01_jogging_d2_uncomp.avi" />
  578 + </biometric-signature>
  579 + <biometric-signature name="jogging1-3">
  580 + <presentation Label="jogging" file-name="jogging/person01_jogging_d3_uncomp.avi" />
  581 + </biometric-signature>
  582 + <biometric-signature name="jogging1-4">
  583 + <presentation Label="jogging" file-name="jogging/person01_jogging_d4_uncomp.avi" />
  584 + </biometric-signature>
  585 + <biometric-signature name="jogging2-1">
  586 + <presentation Label="jogging" file-name="jogging/person02_jogging_d1_uncomp.avi" />
  587 + </biometric-signature>
  588 + <biometric-signature name="jogging2-2">
  589 + <presentation Label="jogging" file-name="jogging/person02_jogging_d2_uncomp.avi" />
  590 + </biometric-signature>
  591 + <biometric-signature name="jogging2-3">
  592 + <presentation Label="jogging" file-name="jogging/person02_jogging_d3_uncomp.avi" />
  593 + </biometric-signature>
  594 + <biometric-signature name="jogging2-4">
  595 + <presentation Label="jogging" file-name="jogging/person02_jogging_d4_uncomp.avi" />
  596 + </biometric-signature>
  597 + <biometric-signature name="jogging3-1">
  598 + <presentation Label="jogging" file-name="jogging/person03_jogging_d1_uncomp.avi" />
  599 + </biometric-signature>
  600 + <biometric-signature name="jogging3-2">
  601 + <presentation Label="jogging" file-name="jogging/person03_jogging_d2_uncomp.avi" />
  602 + </biometric-signature>
  603 + <biometric-signature name="jogging3-3">
  604 + <presentation Label="jogging" file-name="jogging/person03_jogging_d3_uncomp.avi" />
  605 + </biometric-signature>
  606 + <biometric-signature name="jogging3-4">
  607 + <presentation Label="jogging" file-name="jogging/person03_jogging_d4_uncomp.avi" />
  608 + </biometric-signature>
  609 + <biometric-signature name="jogging4-1">
  610 + <presentation Label="jogging" file-name="jogging/person04_jogging_d1_uncomp.avi" />
  611 + </biometric-signature>
  612 + <biometric-signature name="jogging4-2">
  613 + <presentation Label="jogging" file-name="jogging/person04_jogging_d2_uncomp.avi" />
  614 + </biometric-signature>
  615 + <biometric-signature name="jogging4-3">
  616 + <presentation Label="jogging" file-name="jogging/person04_jogging_d3_uncomp.avi" />
  617 + </biometric-signature>
  618 + <biometric-signature name="jogging4-4">
  619 + <presentation Label="jogging" file-name="jogging/person04_jogging_d4_uncomp.avi" />
  620 + </biometric-signature>
  621 + <biometric-signature name="jogging5-1">
  622 + <presentation Label="jogging" file-name="jogging/person05_jogging_d1_uncomp.avi" />
  623 + </biometric-signature>
  624 + <biometric-signature name="jogging5-2">
  625 + <presentation Label="jogging" file-name="jogging/person05_jogging_d2_uncomp.avi" />
  626 + </biometric-signature>
  627 + <biometric-signature name="jogging5-3">
  628 + <presentation Label="jogging" file-name="jogging/person05_jogging_d3_uncomp.avi" />
  629 + </biometric-signature>
  630 + <biometric-signature name="jogging5-4">
  631 + <presentation Label="jogging" file-name="jogging/person05_jogging_d4_uncomp.avi" />
  632 + </biometric-signature>
  633 + <biometric-signature name="jogging6-1">
  634 + <presentation Label="jogging" file-name="jogging/person06_jogging_d1_uncomp.avi" />
  635 + </biometric-signature>
  636 + <biometric-signature name="jogging6-2">
  637 + <presentation Label="jogging" file-name="jogging/person06_jogging_d2_uncomp.avi" />
  638 + </biometric-signature>
  639 + <biometric-signature name="jogging6-3">
  640 + <presentation Label="jogging" file-name="jogging/person06_jogging_d3_uncomp.avi" />
  641 + </biometric-signature>
  642 + <biometric-signature name="jogging6-4">
  643 + <presentation Label="jogging" file-name="jogging/person06_jogging_d4_uncomp.avi" />
  644 + </biometric-signature>
  645 + <biometric-signature name="jogging7-1">
  646 + <presentation Label="jogging" file-name="jogging/person07_jogging_d1_uncomp.avi" />
  647 + </biometric-signature>
  648 + <biometric-signature name="jogging7-2">
  649 + <presentation Label="jogging" file-name="jogging/person07_jogging_d2_uncomp.avi" />
  650 + </biometric-signature>
  651 + <biometric-signature name="jogging7-3">
  652 + <presentation Label="jogging" file-name="jogging/person07_jogging_d3_uncomp.avi" />
  653 + </biometric-signature>
  654 + <biometric-signature name="jogging7-4">
  655 + <presentation Label="jogging" file-name="jogging/person07_jogging_d4_uncomp.avi" />
  656 + </biometric-signature>
  657 + <biometric-signature name="jogging8-1">
  658 + <presentation Label="jogging" file-name="jogging/person08_jogging_d1_uncomp.avi" />
  659 + </biometric-signature>
  660 + <biometric-signature name="jogging8-2">
  661 + <presentation Label="jogging" file-name="jogging/person08_jogging_d2_uncomp.avi" />
  662 + </biometric-signature>
  663 + <biometric-signature name="jogging8-3">
  664 + <presentation Label="jogging" file-name="jogging/person08_jogging_d3_uncomp.avi" />
  665 + </biometric-signature>
  666 + <biometric-signature name="jogging8-4">
  667 + <presentation Label="jogging" file-name="jogging/person08_jogging_d4_uncomp.avi" />
  668 + </biometric-signature>
  669 + <biometric-signature name="jogging9-1">
  670 + <presentation Label="jogging" file-name="jogging/person09_jogging_d1_uncomp.avi" />
  671 + </biometric-signature>
  672 + <biometric-signature name="jogging9-2">
  673 + <presentation Label="jogging" file-name="jogging/person09_jogging_d2_uncomp.avi" />
  674 + </biometric-signature>
  675 + <biometric-signature name="jogging9-3">
  676 + <presentation Label="jogging" file-name="jogging/person09_jogging_d3_uncomp.avi" />
  677 + </biometric-signature>
  678 + <biometric-signature name="jogging9-4">
  679 + <presentation Label="jogging" file-name="jogging/person09_jogging_d4_uncomp.avi" />
  680 + </biometric-signature>
  681 + <biometric-signature name="jogging10-1">
  682 + <presentation Label="jogging" file-name="jogging/person10_jogging_d1_uncomp.avi" />
  683 + </biometric-signature>
  684 + <biometric-signature name="jogging10-2">
  685 + <presentation Label="jogging" file-name="jogging/person10_jogging_d2_uncomp.avi" />
  686 + </biometric-signature>
  687 + <biometric-signature name="jogging10-3">
  688 + <presentation Label="jogging" file-name="jogging/person10_jogging_d3_uncomp.avi" />
  689 + </biometric-signature>
  690 + <biometric-signature name="jogging10-4">
  691 + <presentation Label="jogging" file-name="jogging/person10_jogging_d4_uncomp.avi" />
  692 + </biometric-signature>
  693 + <biometric-signature name="jogging11-1">
  694 + <presentation Label="jogging" file-name="jogging/person11_jogging_d1_uncomp.avi" />
  695 + </biometric-signature>
  696 + <biometric-signature name="jogging11-2">
  697 + <presentation Label="jogging" file-name="jogging/person11_jogging_d2_uncomp.avi" />
  698 + </biometric-signature>
  699 + <biometric-signature name="jogging11-3">
  700 + <presentation Label="jogging" file-name="jogging/person11_jogging_d3_uncomp.avi" />
  701 + </biometric-signature>
  702 + <biometric-signature name="jogging11-4">
  703 + <presentation Label="jogging" file-name="jogging/person11_jogging_d4_uncomp.avi" />
  704 + </biometric-signature>
  705 + <biometric-signature name="jogging12-1">
  706 + <presentation Label="jogging" file-name="jogging/person12_jogging_d1_uncomp.avi" />
  707 + </biometric-signature>
  708 + <biometric-signature name="jogging12-2">
  709 + <presentation Label="jogging" file-name="jogging/person12_jogging_d2_uncomp.avi" />
  710 + </biometric-signature>
  711 + <biometric-signature name="jogging12-3">
  712 + <presentation Label="jogging" file-name="jogging/person12_jogging_d3_uncomp.avi" />
  713 + </biometric-signature>
  714 + <biometric-signature name="jogging12-4">
  715 + <presentation Label="jogging" file-name="jogging/person12_jogging_d4_uncomp.avi" />
  716 + </biometric-signature>
  717 + <biometric-signature name="jogging13-1">
  718 + <presentation Label="jogging" file-name="jogging/person13_jogging_d1_uncomp.avi" />
  719 + </biometric-signature>
  720 + <biometric-signature name="jogging13-2">
  721 + <presentation Label="jogging" file-name="jogging/person13_jogging_d2_uncomp.avi" />
  722 + </biometric-signature>
  723 + <biometric-signature name="jogging13-3">
  724 + <presentation Label="jogging" file-name="jogging/person13_jogging_d3_uncomp.avi" />
  725 + </biometric-signature>
  726 + <biometric-signature name="jogging13-4">
  727 + <presentation Label="jogging" file-name="jogging/person13_jogging_d4_uncomp.avi" />
  728 + </biometric-signature>
  729 + <biometric-signature name="jogging14-1">
  730 + <presentation Label="jogging" file-name="jogging/person14_jogging_d1_uncomp.avi" />
  731 + </biometric-signature>
  732 + <biometric-signature name="jogging14-2">
  733 + <presentation Label="jogging" file-name="jogging/person14_jogging_d2_uncomp.avi" />
  734 + </biometric-signature>
  735 + <biometric-signature name="jogging14-3">
  736 + <presentation Label="jogging" file-name="jogging/person14_jogging_d3_uncomp.avi" />
  737 + </biometric-signature>
  738 + <biometric-signature name="jogging14-4">
  739 + <presentation Label="jogging" file-name="jogging/person14_jogging_d4_uncomp.avi" />
  740 + </biometric-signature>
  741 + <biometric-signature name="jogging15-1">
  742 + <presentation Label="jogging" file-name="jogging/person15_jogging_d1_uncomp.avi" />
  743 + </biometric-signature>
  744 + <biometric-signature name="jogging15-2">
  745 + <presentation Label="jogging" file-name="jogging/person15_jogging_d2_uncomp.avi" />
  746 + </biometric-signature>
  747 + <biometric-signature name="jogging15-3">
  748 + <presentation Label="jogging" file-name="jogging/person15_jogging_d3_uncomp.avi" />
  749 + </biometric-signature>
  750 + <biometric-signature name="jogging15-4">
  751 + <presentation Label="jogging" file-name="jogging/person15_jogging_d4_uncomp.avi" />
  752 + </biometric-signature>
  753 + <biometric-signature name="jogging16-1">
  754 + <presentation Label="jogging" file-name="jogging/person16_jogging_d1_uncomp.avi" />
  755 + </biometric-signature>
  756 + <biometric-signature name="jogging16-2">
  757 + <presentation Label="jogging" file-name="jogging/person16_jogging_d2_uncomp.avi" />
  758 + </biometric-signature>
  759 + <biometric-signature name="jogging16-3">
  760 + <presentation Label="jogging" file-name="jogging/person16_jogging_d3_uncomp.avi" />
  761 + </biometric-signature>
  762 + <biometric-signature name="jogging16-4">
  763 + <presentation Label="jogging" file-name="jogging/person16_jogging_d4_uncomp.avi" />
  764 + </biometric-signature>
  765 + <biometric-signature name="running1-1">
  766 + <presentation Label="running" file-name="running/person01_running_d1_uncomp.avi" />
  767 + </biometric-signature>
  768 + <biometric-signature name="running1-2">
  769 + <presentation Label="running" file-name="running/person01_running_d2_uncomp.avi" />
  770 + </biometric-signature>
  771 + <biometric-signature name="running1-3">
  772 + <presentation Label="running" file-name="running/person01_running_d3_uncomp.avi" />
  773 + </biometric-signature>
  774 + <biometric-signature name="running1-4">
  775 + <presentation Label="running" file-name="running/person01_running_d4_uncomp.avi" />
  776 + </biometric-signature>
  777 + <biometric-signature name="running2-1">
  778 + <presentation Label="running" file-name="running/person02_running_d1_uncomp.avi" />
  779 + </biometric-signature>
  780 + <biometric-signature name="running2-2">
  781 + <presentation Label="running" file-name="running/person02_running_d2_uncomp.avi" />
  782 + </biometric-signature>
  783 + <biometric-signature name="running2-3">
  784 + <presentation Label="running" file-name="running/person02_running_d3_uncomp.avi" />
  785 + </biometric-signature>
  786 + <biometric-signature name="running2-4">
  787 + <presentation Label="running" file-name="running/person02_running_d4_uncomp.avi" />
  788 + </biometric-signature>
  789 + <biometric-signature name="running3-1">
  790 + <presentation Label="running" file-name="running/person03_running_d1_uncomp.avi" />
  791 + </biometric-signature>
  792 + <biometric-signature name="running3-2">
  793 + <presentation Label="running" file-name="running/person03_running_d2_uncomp.avi" />
  794 + </biometric-signature>
  795 + <biometric-signature name="running3-3">
  796 + <presentation Label="running" file-name="running/person03_running_d3_uncomp.avi" />
  797 + </biometric-signature>
  798 + <biometric-signature name="running3-4">
  799 + <presentation Label="running" file-name="running/person03_running_d4_uncomp.avi" />
  800 + </biometric-signature>
  801 + <biometric-signature name="running4-1">
  802 + <presentation Label="running" file-name="running/person04_running_d1_uncomp.avi" />
  803 + </biometric-signature>
  804 + <biometric-signature name="running4-2">
  805 + <presentation Label="running" file-name="running/person04_running_d2_uncomp.avi" />
  806 + </biometric-signature>
  807 + <biometric-signature name="running4-3">
  808 + <presentation Label="running" file-name="running/person04_running_d3_uncomp.avi" />
  809 + </biometric-signature>
  810 + <biometric-signature name="running4-4">
  811 + <presentation Label="running" file-name="running/person04_running_d4_uncomp.avi" />
  812 + </biometric-signature>
  813 + <biometric-signature name="running5-1">
  814 + <presentation Label="running" file-name="running/person05_running_d1_uncomp.avi" />
  815 + </biometric-signature>
  816 + <biometric-signature name="running5-2">
  817 + <presentation Label="running" file-name="running/person05_running_d2_uncomp.avi" />
  818 + </biometric-signature>
  819 + <biometric-signature name="running5-3">
  820 + <presentation Label="running" file-name="running/person05_running_d3_uncomp.avi" />
  821 + </biometric-signature>
  822 + <biometric-signature name="running5-4">
  823 + <presentation Label="running" file-name="running/person05_running_d4_uncomp.avi" />
  824 + </biometric-signature>
  825 + <biometric-signature name="running6-1">
  826 + <presentation Label="running" file-name="running/person06_running_d1_uncomp.avi" />
  827 + </biometric-signature>
  828 + <biometric-signature name="running6-2">
  829 + <presentation Label="running" file-name="running/person06_running_d2_uncomp.avi" />
  830 + </biometric-signature>
  831 + <biometric-signature name="running6-3">
  832 + <presentation Label="running" file-name="running/person06_running_d3_uncomp.avi" />
  833 + </biometric-signature>
  834 + <biometric-signature name="running6-4">
  835 + <presentation Label="running" file-name="running/person06_running_d4_uncomp.avi" />
  836 + </biometric-signature>
  837 + <biometric-signature name="running7-1">
  838 + <presentation Label="running" file-name="running/person07_running_d1_uncomp.avi" />
  839 + </biometric-signature>
  840 + <biometric-signature name="running7-2">
  841 + <presentation Label="running" file-name="running/person07_running_d2_uncomp.avi" />
  842 + </biometric-signature>
  843 + <biometric-signature name="running7-3">
  844 + <presentation Label="running" file-name="running/person07_running_d3_uncomp.avi" />
  845 + </biometric-signature>
  846 + <biometric-signature name="running7-4">
  847 + <presentation Label="running" file-name="running/person07_running_d4_uncomp.avi" />
  848 + </biometric-signature>
  849 + <biometric-signature name="running8-1">
  850 + <presentation Label="running" file-name="running/person08_running_d1_uncomp.avi" />
  851 + </biometric-signature>
  852 + <biometric-signature name="running8-2">
  853 + <presentation Label="running" file-name="running/person08_running_d2_uncomp.avi" />
  854 + </biometric-signature>
  855 + <biometric-signature name="running8-3">
  856 + <presentation Label="running" file-name="running/person08_running_d3_uncomp.avi" />
  857 + </biometric-signature>
  858 + <biometric-signature name="running8-4">
  859 + <presentation Label="running" file-name="running/person08_running_d4_uncomp.avi" />
  860 + </biometric-signature>
  861 + <biometric-signature name="running9-1">
  862 + <presentation Label="running" file-name="running/person09_running_d1_uncomp.avi" />
  863 + </biometric-signature>
  864 + <biometric-signature name="running9-2">
  865 + <presentation Label="running" file-name="running/person09_running_d2_uncomp.avi" />
  866 + </biometric-signature>
  867 + <biometric-signature name="running9-3">
  868 + <presentation Label="running" file-name="running/person09_running_d3_uncomp.avi" />
  869 + </biometric-signature>
  870 + <biometric-signature name="running9-4">
  871 + <presentation Label="running" file-name="running/person09_running_d4_uncomp.avi" />
  872 + </biometric-signature>
  873 + <biometric-signature name="running10-1">
  874 + <presentation Label="running" file-name="running/person10_running_d1_uncomp.avi" />
  875 + </biometric-signature>
  876 + <biometric-signature name="running10-2">
  877 + <presentation Label="running" file-name="running/person10_running_d2_uncomp.avi" />
  878 + </biometric-signature>
  879 + <biometric-signature name="running10-3">
  880 + <presentation Label="running" file-name="running/person10_running_d3_uncomp.avi" />
  881 + </biometric-signature>
  882 + <biometric-signature name="running10-4">
  883 + <presentation Label="running" file-name="running/person10_running_d4_uncomp.avi" />
  884 + </biometric-signature>
  885 + <biometric-signature name="running11-1">
  886 + <presentation Label="running" file-name="running/person11_running_d1_uncomp.avi" />
  887 + </biometric-signature>
  888 + <biometric-signature name="running11-2">
  889 + <presentation Label="running" file-name="running/person11_running_d2_uncomp.avi" />
  890 + </biometric-signature>
  891 + <biometric-signature name="running11-3">
  892 + <presentation Label="running" file-name="running/person11_running_d3_uncomp.avi" />
  893 + </biometric-signature>
  894 + <biometric-signature name="running11-4">
  895 + <presentation Label="running" file-name="running/person11_running_d4_uncomp.avi" />
  896 + </biometric-signature>
  897 + <biometric-signature name="running12-1">
  898 + <presentation Label="running" file-name="running/person12_running_d1_uncomp.avi" />
  899 + </biometric-signature>
  900 + <biometric-signature name="running12-2">
  901 + <presentation Label="running" file-name="running/person12_running_d2_uncomp.avi" />
  902 + </biometric-signature>
  903 + <biometric-signature name="running12-3">
  904 + <presentation Label="running" file-name="running/person12_running_d3_uncomp.avi" />
  905 + </biometric-signature>
  906 + <biometric-signature name="running12-4">
  907 + <presentation Label="running" file-name="running/person12_running_d4_uncomp.avi" />
  908 + </biometric-signature>
  909 + <biometric-signature name="running13-1">
  910 + <presentation Label="running" file-name="running/person13_running_d1_uncomp.avi" />
  911 + </biometric-signature>
  912 + <biometric-signature name="running13-2">
  913 + <presentation Label="running" file-name="running/person13_running_d2_uncomp.avi" />
  914 + </biometric-signature>
  915 + <biometric-signature name="running13-3">
  916 + <presentation Label="running" file-name="running/person13_running_d3_uncomp.avi" />
  917 + </biometric-signature>
  918 + <biometric-signature name="running13-4">
  919 + <presentation Label="running" file-name="running/person13_running_d4_uncomp.avi" />
  920 + </biometric-signature>
  921 + <biometric-signature name="running14-1">
  922 + <presentation Label="running" file-name="running/person14_running_d1_uncomp.avi" />
  923 + </biometric-signature>
  924 + <biometric-signature name="running14-2">
  925 + <presentation Label="running" file-name="running/person14_running_d2_uncomp.avi" />
  926 + </biometric-signature>
  927 + <biometric-signature name="running14-3">
  928 + <presentation Label="running" file-name="running/person14_running_d3_uncomp.avi" />
  929 + </biometric-signature>
  930 + <biometric-signature name="running14-4">
  931 + <presentation Label="running" file-name="running/person14_running_d4_uncomp.avi" />
  932 + </biometric-signature>
  933 + <biometric-signature name="running15-1">
  934 + <presentation Label="running" file-name="running/person15_running_d1_uncomp.avi" />
  935 + </biometric-signature>
  936 + <biometric-signature name="running15-2">
  937 + <presentation Label="running" file-name="running/person15_running_d2_uncomp.avi" />
  938 + </biometric-signature>
  939 + <biometric-signature name="running15-3">
  940 + <presentation Label="running" file-name="running/person15_running_d3_uncomp.avi" />
  941 + </biometric-signature>
  942 + <biometric-signature name="running15-4">
  943 + <presentation Label="running" file-name="running/person15_running_d4_uncomp.avi" />
  944 + </biometric-signature>
  945 + <biometric-signature name="running16-1">
  946 + <presentation Label="running" file-name="running/person16_running_d1_uncomp.avi" />
  947 + </biometric-signature>
  948 + <biometric-signature name="running16-2">
  949 + <presentation Label="running" file-name="running/person16_running_d2_uncomp.avi" />
  950 + </biometric-signature>
  951 + <biometric-signature name="running16-3">
  952 + <presentation Label="running" file-name="running/person16_running_d3_uncomp.avi" />
  953 + </biometric-signature>
  954 + <biometric-signature name="running16-4">
  955 + <presentation Label="running" file-name="running/person16_running_d4_uncomp.avi" />
  956 + </biometric-signature>
  957 + <biometric-signature name="walking1-1">
  958 + <presentation Label="walking" file-name="walking/person01_walking_d1_uncomp.avi" />
  959 + </biometric-signature>
  960 + <biometric-signature name="walking1-2">
  961 + <presentation Label="walking" file-name="walking/person01_walking_d2_uncomp.avi" />
  962 + </biometric-signature>
  963 + <biometric-signature name="walking1-3">
  964 + <presentation Label="walking" file-name="walking/person01_walking_d3_uncomp.avi" />
  965 + </biometric-signature>
  966 + <biometric-signature name="walking1-4">
  967 + <presentation Label="walking" file-name="walking/person01_walking_d4_uncomp.avi" />
  968 + </biometric-signature>
  969 + <biometric-signature name="walking2-1">
  970 + <presentation Label="walking" file-name="walking/person02_walking_d1_uncomp.avi" />
  971 + </biometric-signature>
  972 + <biometric-signature name="walking2-2">
  973 + <presentation Label="walking" file-name="walking/person02_walking_d2_uncomp.avi" />
  974 + </biometric-signature>
  975 + <biometric-signature name="walking2-3">
  976 + <presentation Label="walking" file-name="walking/person02_walking_d3_uncomp.avi" />
  977 + </biometric-signature>
  978 + <biometric-signature name="walking2-4">
  979 + <presentation Label="walking" file-name="walking/person02_walking_d4_uncomp.avi" />
  980 + </biometric-signature>
  981 + <biometric-signature name="walking3-1">
  982 + <presentation Label="walking" file-name="walking/person03_walking_d1_uncomp.avi" />
  983 + </biometric-signature>
  984 + <biometric-signature name="walking3-2">
  985 + <presentation Label="walking" file-name="walking/person03_walking_d2_uncomp.avi" />
  986 + </biometric-signature>
  987 + <biometric-signature name="walking3-3">
  988 + <presentation Label="walking" file-name="walking/person03_walking_d3_uncomp.avi" />
  989 + </biometric-signature>
  990 + <biometric-signature name="walking3-4">
  991 + <presentation Label="walking" file-name="walking/person03_walking_d4_uncomp.avi" />
  992 + </biometric-signature>
  993 + <biometric-signature name="walking4-1">
  994 + <presentation Label="walking" file-name="walking/person04_walking_d1_uncomp.avi" />
  995 + </biometric-signature>
  996 + <biometric-signature name="walking4-2">
  997 + <presentation Label="walking" file-name="walking/person04_walking_d2_uncomp.avi" />
  998 + </biometric-signature>
  999 + <biometric-signature name="walking4-3">
  1000 + <presentation Label="walking" file-name="walking/person04_walking_d3_uncomp.avi" />
  1001 + </biometric-signature>
  1002 + <biometric-signature name="walking4-4">
  1003 + <presentation Label="walking" file-name="walking/person04_walking_d4_uncomp.avi" />
  1004 + </biometric-signature>
  1005 + <biometric-signature name="walking5-1">
  1006 + <presentation Label="walking" file-name="walking/person05_walking_d1_uncomp.avi" />
  1007 + </biometric-signature>
  1008 + <biometric-signature name="walking5-2">
  1009 + <presentation Label="walking" file-name="walking/person05_walking_d2_uncomp.avi" />
  1010 + </biometric-signature>
  1011 + <biometric-signature name="walking5-3">
  1012 + <presentation Label="walking" file-name="walking/person05_walking_d3_uncomp.avi" />
  1013 + </biometric-signature>
  1014 + <biometric-signature name="walking5-4">
  1015 + <presentation Label="walking" file-name="walking/person05_walking_d4_uncomp.avi" />
  1016 + </biometric-signature>
  1017 + <biometric-signature name="walking6-1">
  1018 + <presentation Label="walking" file-name="walking/person06_walking_d1_uncomp.avi" />
  1019 + </biometric-signature>
  1020 + <biometric-signature name="walking6-2">
  1021 + <presentation Label="walking" file-name="walking/person06_walking_d2_uncomp.avi" />
  1022 + </biometric-signature>
  1023 + <biometric-signature name="walking6-3">
  1024 + <presentation Label="walking" file-name="walking/person06_walking_d3_uncomp.avi" />
  1025 + </biometric-signature>
  1026 + <biometric-signature name="walking6-4">
  1027 + <presentation Label="walking" file-name="walking/person06_walking_d4_uncomp.avi" />
  1028 + </biometric-signature>
  1029 + <biometric-signature name="walking7-1">
  1030 + <presentation Label="walking" file-name="walking/person07_walking_d1_uncomp.avi" />
  1031 + </biometric-signature>
  1032 + <biometric-signature name="walking7-2">
  1033 + <presentation Label="walking" file-name="walking/person07_walking_d2_uncomp.avi" />
  1034 + </biometric-signature>
  1035 + <biometric-signature name="walking7-3">
  1036 + <presentation Label="walking" file-name="walking/person07_walking_d3_uncomp.avi" />
  1037 + </biometric-signature>
  1038 + <biometric-signature name="walking7-4">
  1039 + <presentation Label="walking" file-name="walking/person07_walking_d4_uncomp.avi" />
  1040 + </biometric-signature>
  1041 + <biometric-signature name="walking8-1">
  1042 + <presentation Label="walking" file-name="walking/person08_walking_d1_uncomp.avi" />
  1043 + </biometric-signature>
  1044 + <biometric-signature name="walking8-2">
  1045 + <presentation Label="walking" file-name="walking/person08_walking_d2_uncomp.avi" />
  1046 + </biometric-signature>
  1047 + <biometric-signature name="walking8-3">
  1048 + <presentation Label="walking" file-name="walking/person08_walking_d3_uncomp.avi" />
  1049 + </biometric-signature>
  1050 + <biometric-signature name="walking8-4">
  1051 + <presentation Label="walking" file-name="walking/person08_walking_d4_uncomp.avi" />
  1052 + </biometric-signature>
  1053 + <biometric-signature name="walking9-1">
  1054 + <presentation Label="walking" file-name="walking/person09_walking_d1_uncomp.avi" />
  1055 + </biometric-signature>
  1056 + <biometric-signature name="walking9-2">
  1057 + <presentation Label="walking" file-name="walking/person09_walking_d2_uncomp.avi" />
  1058 + </biometric-signature>
  1059 + <biometric-signature name="walking9-3">
  1060 + <presentation Label="walking" file-name="walking/person09_walking_d3_uncomp.avi" />
  1061 + </biometric-signature>
  1062 + <biometric-signature name="walking9-4">
  1063 + <presentation Label="walking" file-name="walking/person09_walking_d4_uncomp.avi" />
  1064 + </biometric-signature>
  1065 + <biometric-signature name="walking10-1">
  1066 + <presentation Label="walking" file-name="walking/person10_walking_d1_uncomp.avi" />
  1067 + </biometric-signature>
  1068 + <biometric-signature name="walking10-2">
  1069 + <presentation Label="walking" file-name="walking/person10_walking_d2_uncomp.avi" />
  1070 + </biometric-signature>
  1071 + <biometric-signature name="walking10-3">
  1072 + <presentation Label="walking" file-name="walking/person10_walking_d3_uncomp.avi" />
  1073 + </biometric-signature>
  1074 + <biometric-signature name="walking10-4">
  1075 + <presentation Label="walking" file-name="walking/person10_walking_d4_uncomp.avi" />
  1076 + </biometric-signature>
  1077 + <biometric-signature name="walking11-1">
  1078 + <presentation Label="walking" file-name="walking/person11_walking_d1_uncomp.avi" />
  1079 + </biometric-signature>
  1080 + <biometric-signature name="walking11-2">
  1081 + <presentation Label="walking" file-name="walking/person11_walking_d2_uncomp.avi" />
  1082 + </biometric-signature>
  1083 + <biometric-signature name="walking11-3">
  1084 + <presentation Label="walking" file-name="walking/person11_walking_d3_uncomp.avi" />
  1085 + </biometric-signature>
  1086 + <biometric-signature name="walking11-4">
  1087 + <presentation Label="walking" file-name="walking/person11_walking_d4_uncomp.avi" />
  1088 + </biometric-signature>
  1089 + <biometric-signature name="walking12-1">
  1090 + <presentation Label="walking" file-name="walking/person12_walking_d1_uncomp.avi" />
  1091 + </biometric-signature>
  1092 + <biometric-signature name="walking12-2">
  1093 + <presentation Label="walking" file-name="walking/person12_walking_d2_uncomp.avi" />
  1094 + </biometric-signature>
  1095 + <biometric-signature name="walking12-3">
  1096 + <presentation Label="walking" file-name="walking/person12_walking_d3_uncomp.avi" />
  1097 + </biometric-signature>
  1098 + <biometric-signature name="walking12-4">
  1099 + <presentation Label="walking" file-name="walking/person12_walking_d4_uncomp.avi" />
  1100 + </biometric-signature>
  1101 + <biometric-signature name="walking13-1">
  1102 + <presentation Label="walking" file-name="walking/person13_walking_d1_uncomp.avi" />
  1103 + </biometric-signature>
  1104 + <biometric-signature name="walking13-2">
  1105 + <presentation Label="walking" file-name="walking/person13_walking_d2_uncomp.avi" />
  1106 + </biometric-signature>
  1107 + <biometric-signature name="walking13-3">
  1108 + <presentation Label="walking" file-name="walking/person13_walking_d3_uncomp.avi" />
  1109 + </biometric-signature>
  1110 + <biometric-signature name="walking13-4">
  1111 + <presentation Label="walking" file-name="walking/person13_walking_d4_uncomp.avi" />
  1112 + </biometric-signature>
  1113 + <biometric-signature name="walking14-1">
  1114 + <presentation Label="walking" file-name="walking/person14_walking_d1_uncomp.avi" />
  1115 + </biometric-signature>
  1116 + <biometric-signature name="walking14-2">
  1117 + <presentation Label="walking" file-name="walking/person14_walking_d2_uncomp.avi" />
  1118 + </biometric-signature>
  1119 + <biometric-signature name="walking14-3">
  1120 + <presentation Label="walking" file-name="walking/person14_walking_d3_uncomp.avi" />
  1121 + </biometric-signature>
  1122 + <biometric-signature name="walking14-4">
  1123 + <presentation Label="walking" file-name="walking/person14_walking_d4_uncomp.avi" />
  1124 + </biometric-signature>
  1125 + <biometric-signature name="walking15-1">
  1126 + <presentation Label="walking" file-name="walking/person15_walking_d1_uncomp.avi" />
  1127 + </biometric-signature>
  1128 + <biometric-signature name="walking15-2">
  1129 + <presentation Label="walking" file-name="walking/person15_walking_d2_uncomp.avi" />
  1130 + </biometric-signature>
  1131 + <biometric-signature name="walking15-3">
  1132 + <presentation Label="walking" file-name="walking/person15_walking_d3_uncomp.avi" />
  1133 + </biometric-signature>
  1134 + <biometric-signature name="walking15-4">
  1135 + <presentation Label="walking" file-name="walking/person15_walking_d4_uncomp.avi" />
  1136 + </biometric-signature>
  1137 + <biometric-signature name="walking16-1">
  1138 + <presentation Label="walking" file-name="walking/person16_walking_d1_uncomp.avi" />
  1139 + </biometric-signature>
  1140 + <biometric-signature name="walking16-2">
  1141 + <presentation Label="walking" file-name="walking/person16_walking_d2_uncomp.avi" />
  1142 + </biometric-signature>
  1143 + <biometric-signature name="walking16-3">
  1144 + <presentation Label="walking" file-name="walking/person16_walking_d3_uncomp.avi" />
  1145 + </biometric-signature>
  1146 + <biometric-signature name="walking16-4">
  1147 + <presentation Label="walking" file-name="walking/person16_walking_d4_uncomp.avi" />
  1148 + </biometric-signature>
  1149 +</biometric-signature-set>
... ...
openbr/core/eval.cpp
... ... @@ -16,6 +16,7 @@
16 16  
17 17 #include "bee.h"
18 18 #include "eval.h"
  19 +#include "openbr/core/common.h"
19 20 #include "openbr/core/qtutils.h"
20 21  
21 22 using namespace cv;
... ... @@ -255,9 +256,9 @@ struct Counter
255 256 }
256 257 };
257 258  
258   -void EvalClassification(const QString &predictedInput, const QString &truthInput, QString predictedProperty, QString truthProperty)
  259 +void EvalClassification(const QString &predictedGallery, const QString &truthGallery, QString predictedProperty, QString truthProperty)
259 260 {
260   - qDebug("Evaluating classification of %s against %s", qPrintable(predictedInput), qPrintable(truthInput));
  261 + qDebug("Evaluating classification of %s against %s", qPrintable(predictedGallery), qPrintable(truthGallery));
261 262  
262 263 if (predictedProperty.isEmpty())
263 264 predictedProperty = "Label";
... ... @@ -269,8 +270,8 @@ void EvalClassification(const QString &amp;predictedInput, const QString &amp;truthInput
269 270 if (truthProperty.isEmpty())
270 271 truthProperty = "Label";
271 272  
272   - TemplateList predicted(TemplateList::fromGallery(predictedInput));
273   - TemplateList truth(TemplateList::fromGallery(truthInput));
  273 + TemplateList predicted(TemplateList::fromGallery(predictedGallery));
  274 + TemplateList truth(TemplateList::fromGallery(truthGallery));
274 275 if (predicted.size() != truth.size()) qFatal("Input size mismatch.");
275 276  
276 277 QHash<QString, Counter> counters;
... ... @@ -383,13 +384,19 @@ static QStringList computeDetectionResults(const QList&lt;ResolvedDetection&gt; &amp;detec
383 384 }
384 385  
385 386 const int keep = qMin(points.size(), Max_Points);
386   - if (keep < 2) qFatal("Insufficient points.");
  387 + if (keep < 1) qFatal("Insufficient points.");
387 388  
388 389 QStringList lines; lines.reserve(keep);
389   - for (int i=0; i<keep; i++) {
390   - const DetectionOperatingPoint &point = points[double(i) / double(keep-1) * double(points.size()-1)];
  390 + if (keep == 1) {
  391 + const DetectionOperatingPoint &point = points[0];
391 392 lines.append(QString("%1ROC, %2, %3").arg(discrete ? "Discrete" : "Continuous", QString::number(point.FalsePositives), QString::number(point.Recall)));
392 393 lines.append(QString("%1PR, %2, %3").arg(discrete ? "Discrete" : "Continuous", QString::number(point.Recall), QString::number(point.Precision)));
  394 + } else {
  395 + for (int i=0; i<keep; i++) {
  396 + const DetectionOperatingPoint &point = points[double(i) / double(keep-1) * double(points.size()-1)];
  397 + lines.append(QString("%1ROC, %2, %3").arg(discrete ? "Discrete" : "Continuous", QString::number(point.FalsePositives), QString::number(point.Recall)));
  398 + lines.append(QString("%1PR, %2, %3").arg(discrete ? "Discrete" : "Continuous", QString::number(point.Recall), QString::number(point.Precision)));
  399 + }
393 400 }
394 401 return lines;
395 402 }
... ... @@ -403,11 +410,11 @@ QString getDetectKey(const TemplateList &amp;templates)
403 410 return "";
404 411 }
405 412  
406   -float EvalDetection(const QString &predictedInput, const QString &truthInput, const QString &csv)
  413 +float EvalDetection(const QString &predictedGallery, const QString &truthGallery, const QString &csv)
407 414 {
408   - qDebug("Evaluating detection of %s against %s", qPrintable(predictedInput), qPrintable(truthInput));
409   - const TemplateList predicted(TemplateList::fromGallery(predictedInput));
410   - const TemplateList truth(TemplateList::fromGallery(truthInput));
  415 + qDebug("Evaluating detection of %s against %s", qPrintable(predictedGallery), qPrintable(truthGallery));
  416 + const TemplateList predicted(TemplateList::fromGallery(predictedGallery));
  417 + const TemplateList truth(TemplateList::fromGallery(truthGallery));
411 418  
412 419 // Figure out which metadata field contains a bounding box
413 420 QString truthDetectKey = getDetectKey(truth);
... ... @@ -476,16 +483,55 @@ float EvalDetection(const QString &amp;predictedInput, const QString &amp;truthInput, co
476 483 return averageOverlap;
477 484 }
478 485  
479   -void EvalLandmarking(const QString &predictedInput, const QString &truthInput, const QString &csv)
  486 +float EvalLandmarking(const QString &predictedGallery, const QString &truthGallery, const QString &csv, int normalizationIndexA, int normalizationIndexB)
480 487 {
481   - (void) predictedInput;
482   - (void) truthInput;
483   - (void) csv;
  488 + qDebug("Evaluating landmarking of %s against %s", qPrintable(predictedGallery), qPrintable(truthGallery));
  489 + const TemplateList predicted(TemplateList::fromGallery(predictedGallery));
  490 + const TemplateList truth(TemplateList::fromGallery(truthGallery));
  491 + const QStringList predictedNames = File::get<QString>(predicted, "name");
  492 + const QStringList truthNames = File::get<QString>(truth, "name");
  493 +
  494 + QList< QList<float> > pointErrors;
  495 + for (int i=0; i<predicted.size(); i++) {
  496 + const QString &predictedName = predictedNames[i];
  497 + const int truthIndex = truthNames.indexOf(predictedName);
  498 + if (truthIndex == -1) qFatal("Could not identify ground truth for file: %s", qPrintable(predictedName));
  499 + const QList<QPointF> predictedPoints = predicted[i].file.points();
  500 + const QList<QPointF> truthPoints = truth[truthIndex].file.points();
  501 + if (predictedPoints.size() != truthPoints.size()) qFatal("Points size mismatch for file: %s", qPrintable(predictedName));
  502 + while (pointErrors.size() < predictedPoints.size())
  503 + pointErrors.append(QList<float>());
  504 + if (normalizationIndexA >= truthPoints.size()) qFatal("Normalization index A is out of range.");
  505 + if (normalizationIndexB >= truthPoints.size()) qFatal("Normalization index B is out of range.");
  506 + const float normalizedLength = QtUtils::euclideanLength(truthPoints[normalizationIndexB] - truthPoints[normalizationIndexA]);
  507 + for (int j=0; j<predictedPoints.size(); j++)
  508 + pointErrors[j].append(QtUtils::euclideanLength(predictedPoints[j] - truthPoints[j])/normalizedLength);
  509 + }
  510 +
  511 + QList<float> averagePointErrors; averagePointErrors.reserve(pointErrors.size());
  512 + for (int i=0; i<pointErrors.size(); i++) {
  513 + std::sort(pointErrors[i].begin(), pointErrors[i].end());
  514 + averagePointErrors.append(Common::Mean(pointErrors[i]));
  515 + }
  516 + const float averagePointError = Common::Mean(averagePointErrors);
  517 +
  518 + QStringList lines;
  519 + lines.append("Plot,X,Y");
  520 + for (int i=0; i<pointErrors.size(); i++) {
  521 + const QList<float> &pointError = pointErrors[i];
  522 + const int keep = qMin(Max_Points, pointError.size());
  523 + for (int j=0; j<keep; j++)
  524 + lines.append(QString("Box,%1,%2").arg(QString::number(i), QString::number(pointError[j*(pointError.size()-1)/(keep-1)])));
  525 + }
  526 +
  527 + QtUtils::writeFile(csv, lines);
  528 + qDebug("Average Error: %.3f", averagePointError);
  529 + return averagePointError;
484 530 }
485 531  
486   -void EvalRegression(const QString &predictedInput, const QString &truthInput, QString predictedProperty, QString truthProperty)
  532 +void EvalRegression(const QString &predictedGallery, const QString &truthGallery, QString predictedProperty, QString truthProperty)
487 533 {
488   - qDebug("Evaluating regression of %s against %s", qPrintable(predictedInput), qPrintable(truthInput));
  534 + qDebug("Evaluating regression of %s against %s", qPrintable(predictedGallery), qPrintable(truthGallery));
489 535  
490 536 if (predictedProperty.isEmpty())
491 537 predictedProperty = "Regressor";
... ... @@ -497,8 +543,8 @@ void EvalRegression(const QString &amp;predictedInput, const QString &amp;truthInput, QS
497 543 if (truthProperty.isEmpty())
498 544 predictedProperty = "Regressand";
499 545  
500   - const TemplateList predicted(TemplateList::fromGallery(predictedInput));
501   - const TemplateList truth(TemplateList::fromGallery(truthInput));
  546 + const TemplateList predicted(TemplateList::fromGallery(predictedGallery));
  547 + const TemplateList truth(TemplateList::fromGallery(truthGallery));
502 548 if (predicted.size() != truth.size()) qFatal("Input size mismatch.");
503 549  
504 550 float rmsError = 0;
... ...
openbr/core/eval.h
... ... @@ -26,10 +26,10 @@ namespace br
26 26 float Evaluate(const QString &simmat, const QString &mask = "", const QString &csv = ""); // Returns TAR @ FAR = 0.001
27 27 float Evaluate(const cv::Mat &scores, const FileList &target, const FileList &query, const QString &csv = "", int parition = 0);
28 28 float Evaluate(const cv::Mat &scores, const cv::Mat &masks, const QString &csv = "");
29   - void EvalClassification(const QString &predictedInput, const QString &truthInput, QString predictedProperty="", QString truthProperty="");
30   - float EvalDetection(const QString &predictedInput, const QString &truthInput, const QString &csv = ""); // Return average overlap
31   - void EvalLandmarking(const QString &predictedInput, const QString &truthInput, const QString &csv = "");
32   - void EvalRegression(const QString &predictedInput, const QString &truthInput, QString predictedProperty="", QString truthProperty="");
  29 + void EvalClassification(const QString &predictedGallery, const QString &truthGallery, QString predictedProperty = "", QString truthProperty = "");
  30 + float EvalDetection(const QString &predictedGallery, const QString &truthGallery, const QString &csv = ""); // Return average overlap
  31 + float EvalLandmarking(const QString &predictedGallery, const QString &truthGallery, const QString &csv = "", int normalizationIndexA = 0, int normalizationIndexB = 1); // Return average error
  32 + void EvalRegression(const QString &predictedGallery, const QString &truthGallery, QString predictedProperty = "", QString truthProperty = "");
33 33 }
34 34  
35 35 #endif // __EVAL_H
... ...
openbr/core/plot.cpp
... ... @@ -271,6 +271,34 @@ bool Plot(const QStringList &amp;files, const File &amp;destination, bool show)
271 271 return p.finalize(show);
272 272 }
273 273  
  274 +//Check if only one ROC point is in the file
  275 +bool fileHasSinglePoint(const QString &evalFile) {
  276 + QFile file(evalFile);
  277 + bool success = file.open(QFile::ReadOnly);
  278 + if (!success) qFatal("Failed to open %s for reading.", qPrintable(evalFile));
  279 + QStringList lines = QString(file.readAll()).split("\n");
  280 + file.close();
  281 +
  282 + int rocCnt = 0;
  283 + foreach (const QString &line, lines) {
  284 + if (line.contains("DiscreteROC")) {
  285 + rocCnt++;
  286 + }
  287 + if (rocCnt > 1)
  288 + return false;
  289 + }
  290 +
  291 + return true;
  292 +}
  293 +
  294 +//Check all files to see if any single file has only have one ROC point
  295 +bool filesHaveSinglePoint(const QStringList &files) {
  296 + foreach (const File &file, files)
  297 + if (fileHasSinglePoint(file))
  298 + return true;
  299 + return false;
  300 +}
  301 +
274 302 bool PlotDetection(const QStringList &files, const File &destination, bool show)
275 303 {
276 304 qDebug("Plotting %d detection file(s) to %s", files.size(), qPrintable(destination));
... ... @@ -287,8 +315,12 @@ bool PlotDetection(const QStringList &amp;files, const File &amp;destination, bool show)
287 315 "rm(data)\n"
288 316 "\n");
289 317  
  318 + QString plotType("line");
  319 + if (filesHaveSinglePoint(files))
  320 + plotType = QString("point");
  321 +
290 322 foreach (const QString &type, QStringList() << "Discrete" << "Continuous")
291   - p.file.write(qPrintable(QString("qplot(X, Y, data=%1ROC%2").arg(type, (p.major.smooth || p.minor.smooth) ? ", geom=\"smooth\", method=loess, level=0.99" : ", geom=\"line\"") +
  323 + p.file.write(qPrintable(QString("qplot(X, Y, data=%1ROC%2").arg(type, (p.major.smooth || p.minor.smooth) ? ", geom=\"smooth\", method=loess, level=0.99" : QString(", geom=\"%1\"").arg(plotType)) +
292 324 (p.major.size > 1 ? QString(", colour=factor(%1)").arg(p.major.header) : QString()) +
293 325 (p.minor.size > 1 ? QString(", linetype=factor(%1)").arg(p.minor.header) : QString()) +
294 326 QString(", xlab=\"False Accepts\", ylab=\"True Accept Rate\") + theme_minimal()") +
... ... @@ -297,7 +329,7 @@ bool PlotDetection(const QStringList &amp;files, const File &amp;destination, bool show)
297 329 QString(" + scale_x_log10() + scale_y_continuous(labels=percent) + annotation_logticks(sides=\"b\") + ggtitle(\"%1\")\n\n").arg(type)));
298 330  
299 331 foreach (const QString &type, QStringList() << "Discrete" << "Continuous")
300   - p.file.write(qPrintable(QString("qplot(X, Y, data=%1PR%2").arg(type, (p.major.smooth || p.minor.smooth) ? ", geom=\"smooth\", method=loess, level=0.99" : ", geom=\"line\"") +
  332 + p.file.write(qPrintable(QString("qplot(X, Y, data=%1PR%2").arg(type, (p.major.smooth || p.minor.smooth) ? ", geom=\"smooth\", method=loess, level=0.99" : QString(", geom=\"%1\"").arg(plotType)) +
301 333 (p.major.size > 1 ? QString(", colour=factor(%1)").arg(p.major.header) : QString()) +
302 334 (p.minor.size > 1 ? QString(", linetype=factor(%1)").arg(p.minor.header) : QString()) +
303 335 QString(", xlab=\"Recall\", ylab=\"Precision\") + theme_minimal()") +
... ...
openbr/core/qtutils.cpp
... ... @@ -33,7 +33,10 @@
33 33  
34 34 using namespace br;
35 35  
36   -QStringList QtUtils::getFiles(QDir dir, bool recursive)
  36 +namespace QtUtils
  37 +{
  38 +
  39 +QStringList getFiles(QDir dir, bool recursive)
37 40 {
38 41 dir = QDir(dir.canonicalPath());
39 42  
... ... @@ -51,7 +54,7 @@ QStringList QtUtils::getFiles(QDir dir, bool recursive)
51 54 return files;
52 55 }
53 56  
54   -QStringList QtUtils::getFiles(const QString &regexp)
  57 +QStringList getFiles(const QString &regexp)
55 58 {
56 59 QFileInfo fileInfo(regexp);
57 60 QDir dir(fileInfo.dir());
... ... @@ -65,14 +68,14 @@ QStringList QtUtils::getFiles(const QString &amp;regexp)
65 68 return files;
66 69 }
67 70  
68   -QStringList QtUtils::readLines(const QString &file)
  71 +QStringList readLines(const QString &file)
69 72 {
70 73 QStringList lines;
71 74 readFile(file, lines);
72 75 return lines;
73 76 }
74 77  
75   -void QtUtils::readFile(const QString &file, QStringList &lines)
  78 +void readFile(const QString &file, QStringList &lines)
76 79 {
77 80 QByteArray data;
78 81 readFile(file, data);
... ... @@ -81,7 +84,7 @@ void QtUtils::readFile(const QString &amp;file, QStringList &amp;lines)
81 84 lines[i] = lines[i].simplified();
82 85 }
83 86  
84   -void QtUtils::readFile(const QString &file, QByteArray &data, bool uncompress)
  87 +void readFile(const QString &file, QByteArray &data, bool uncompress)
85 88 {
86 89 QFile f(file);
87 90 if (!f.open(QFile::ReadOnly)) {
... ... @@ -93,17 +96,17 @@ void QtUtils::readFile(const QString &amp;file, QByteArray &amp;data, bool uncompress)
93 96 f.close();
94 97 }
95 98  
96   -void QtUtils::writeFile(const QString &file, const QStringList &lines)
  99 +void writeFile(const QString &file, const QStringList &lines)
97 100 {
98 101 writeFile(file, lines.join("\n"));
99 102 }
100 103  
101   -void QtUtils::writeFile(const QString &file, const QString &data)
  104 +void writeFile(const QString &file, const QString &data)
102 105 {
103 106 writeFile(file, data.toLocal8Bit());
104 107 }
105 108  
106   -void QtUtils::writeFile(const QString &file, const QByteArray &data, int compression)
  109 +void writeFile(const QString &file, const QByteArray &data, int compression)
107 110 {
108 111 if (file.isEmpty()) return;
109 112 const QString baseName = QFileInfo(file).baseName();
... ... @@ -122,7 +125,7 @@ void QtUtils::writeFile(const QString &amp;file, const QByteArray &amp;data, int compres
122 125 }
123 126 }
124 127  
125   -void QtUtils::copyFile(const QString &src, const QString &dst)
  128 +void copyFile(const QString &src, const QString &dst)
126 129 {
127 130 touchDir(QFileInfo(dst));
128 131 if (!QFile::copy(src, dst)) {
... ... @@ -131,24 +134,24 @@ void QtUtils::copyFile(const QString &amp;src, const QString &amp;dst)
131 134 }
132 135 }
133 136  
134   -void QtUtils::touchDir(const QDir &dir)
  137 +void touchDir(const QDir &dir)
135 138 {
136 139 if (dir.exists(".")) return;
137 140 if (!dir.mkpath("."))
138 141 qFatal("Unable to create path to dir %s", qPrintable(dir.absolutePath()));
139 142 }
140 143  
141   -void QtUtils::touchDir(const QFile &file)
  144 +void touchDir(const QFile &file)
142 145 {
143 146 touchDir(QFileInfo(file));
144 147 }
145 148  
146   -void QtUtils::touchDir(const QFileInfo &fileInfo)
  149 +void touchDir(const QFileInfo &fileInfo)
147 150 {
148 151 touchDir(fileInfo.dir());
149 152 }
150 153  
151   -void QtUtils::emptyDir(QDir &dir)
  154 +void emptyDir(QDir &dir)
152 155 {
153 156 foreach (const QString &folder, dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot | QDir::NoSymLinks)) {
154 157 QDir subdir(dir);
... ... @@ -166,13 +169,13 @@ void QtUtils::emptyDir(QDir &amp;dir)
166 169 dir.remove(symlink);
167 170 }
168 171  
169   -void QtUtils::deleteDir(QDir &dir)
  172 +void deleteDir(QDir &dir)
170 173 {
171 174 emptyDir(dir);
172 175 dir.rmdir(".");
173 176 }
174 177  
175   -QString QtUtils::find(const QString &file, const QString &alt)
  178 +QString find(const QString &file, const QString &alt)
176 179 {
177 180 if (QFileInfo(file).exists()) return file;
178 181 if (QFileInfo(alt).exists()) return alt;
... ... @@ -180,28 +183,28 @@ QString QtUtils::find(const QString &amp;file, const QString &amp;alt)
180 183 return "";
181 184 }
182 185  
183   -bool QtUtils::toBool(const QString &string)
  186 +bool toBool(const QString &string)
184 187 {
185 188 bool ok;
186 189 bool result = (bool)string.toInt(&ok); if (!ok) qFatal("Expected integer value, got %s.", qPrintable(string));
187 190 return result;
188 191 }
189 192  
190   -int QtUtils::toInt(const QString &string)
  193 +int toInt(const QString &string)
191 194 {
192 195 bool ok;
193 196 int result = string.toInt(&ok); if (!ok) qFatal("Expected integer value, got %s.", qPrintable(string));
194 197 return result;
195 198 }
196 199  
197   -float QtUtils::toFloat(const QString &string)
  200 +float toFloat(const QString &string)
198 201 {
199 202 bool ok;
200 203 float result = string.toFloat(&ok); if (!ok) qFatal("Expected floating point value, got %s.", qPrintable(string));
201 204 return result;
202 205 }
203 206  
204   -QList<float> QtUtils::toFloats(const QStringList &strings)
  207 +QList<float> toFloats(const QStringList &strings)
205 208 {
206 209 QList<float> floats;
207 210 bool ok;
... ... @@ -212,7 +215,7 @@ QList&lt;float&gt; QtUtils::toFloats(const QStringList &amp;strings)
212 215 return floats;
213 216 }
214 217  
215   -QStringList QtUtils::toStringList(const QList<float> &values)
  218 +QStringList toStringList(const QList<float> &values)
216 219 {
217 220 QStringList result; result.reserve(values.size());
218 221 foreach (float value, values)
... ... @@ -220,7 +223,7 @@ QStringList QtUtils::toStringList(const QList&lt;float&gt; &amp;values)
220 223 return result;
221 224 }
222 225  
223   -QStringList QtUtils::toStringList(const std::vector<std::string> &string_list)
  226 +QStringList toStringList(const std::vector<std::string> &string_list)
224 227 {
225 228 QStringList result;
226 229 foreach (const std::string &string, string_list)
... ... @@ -228,7 +231,7 @@ QStringList QtUtils::toStringList(const std::vector&lt;std::string&gt; &amp;string_list)
228 231 return result;
229 232 }
230 233  
231   -QStringList QtUtils::toStringList(int num_strings, const char *strings[])
  234 +QStringList toStringList(int num_strings, const char *strings[])
232 235 {
233 236 QStringList result;
234 237 for (int i=0; i<num_strings; i++)
... ... @@ -236,13 +239,13 @@ QStringList QtUtils::toStringList(int num_strings, const char *strings[])
236 239 return result;
237 240 }
238 241  
239   -QString QtUtils::shortTextHash(QString string)
  242 +QString shortTextHash(QString string)
240 243 {
241 244 string.remove(QRegExp("[{}<>&]"));
242 245 return QString(QCryptographicHash::hash(qPrintable(string), QCryptographicHash::Md5).toBase64()).remove(QRegExp("[^a-zA-Z1-9]")).left(6);
243 246 }
244 247  
245   -QStringList QtUtils::parse(QString args, char split, bool *ok)
  248 +QStringList parse(QString args, char split, bool *ok)
246 249 {
247 250 if (args.isEmpty()) return QStringList();
248 251  
... ... @@ -295,7 +298,7 @@ QStringList QtUtils::parse(QString args, char split, bool *ok)
295 298 return words;
296 299 }
297 300  
298   -void QtUtils::checkArgsSize(const QString &name, const QStringList &args, int min, int max)
  301 +void checkArgsSize(const QString &name, const QStringList &args, int min, int max)
299 302 {
300 303 if (max == -1) max = std::numeric_limits<int>::max();
301 304 if (max == 0) max = min;
... ... @@ -303,7 +306,7 @@ void QtUtils::checkArgsSize(const QString &amp;name, const QStringList &amp;args, int mi
303 306 if (args.size() > max) qFatal("%s expects no more than %d arguments, got %d", qPrintable(name), max, args.size());
304 307 }
305 308  
306   -QPointF QtUtils::toPoint(const QString &string, bool *ok)
  309 +QPointF toPoint(const QString &string, bool *ok)
307 310 {
308 311 if (string.startsWith('(') && string.endsWith(')')) {
309 312 bool okParse;
... ... @@ -324,7 +327,7 @@ QPointF QtUtils::toPoint(const QString &amp;string, bool *ok)
324 327 return QPointF();
325 328 }
326 329  
327   -QRectF QtUtils::toRect(const QString &string, bool *ok)
  330 +QRectF toRect(const QString &string, bool *ok)
328 331 {
329 332 if (string.startsWith('(') && string.endsWith(')')) {
330 333 bool okParse;
... ... @@ -347,7 +350,7 @@ QRectF QtUtils::toRect(const QString &amp;string, bool *ok)
347 350 return QRectF();
348 351 }
349 352  
350   -QStringList QtUtils::naturalSort(const QStringList &strings)
  353 +QStringList naturalSort(const QStringList &strings)
351 354 {
352 355 QList<std::string> stdStrings; stdStrings.reserve(strings.size());
353 356 foreach (const QString &string, strings)
... ... @@ -362,7 +365,7 @@ QStringList QtUtils::naturalSort(const QStringList &amp;strings)
362 365 return result;
363 366 }
364 367  
365   -bool QtUtils::runRScript(const QString &file)
  368 +bool runRScript(const QString &file)
366 369 {
367 370 QProcess RScript;
368 371 RScript.start("Rscript", QStringList() << file);
... ... @@ -374,7 +377,7 @@ bool QtUtils::runRScript(const QString &amp;file)
374 377 return result;
375 378 }
376 379  
377   -bool QtUtils::runDot(const QString &file)
  380 +bool runDot(const QString &file)
378 381 {
379 382 QProcess dot;
380 383 dot.start("dot -Tpdf -O " + file);
... ... @@ -382,7 +385,7 @@ bool QtUtils::runDot(const QString &amp;file)
382 385 return ((dot.exitCode() == 0) && (dot.error() == QProcess::UnknownError));
383 386 }
384 387  
385   -void QtUtils::showFile(const QString &file)
  388 +void showFile(const QString &file)
386 389 {
387 390 #ifndef BR_EMBEDDED
388 391 (void) file;
... ... @@ -393,7 +396,7 @@ void QtUtils::showFile(const QString &amp;file)
393 396 #endif // BR_EMBEDDED
394 397 }
395 398  
396   -QString QtUtils::toString(const QVariant &variant)
  399 +QString toString(const QVariant &variant)
397 400 {
398 401 if (variant.canConvert(QVariant::String)) return variant.toString();
399 402 else if(variant.canConvert(QVariant::PointF)) return QString("(%1,%2)").arg(QString::number(qvariant_cast<QPointF>(variant).x()),
... ... @@ -404,3 +407,11 @@ QString QtUtils::toString(const QVariant &amp;variant)
404 407 QString::number(qvariant_cast<QRectF>(variant).height()));
405 408 return QString();
406 409 }
  410 +
  411 +float euclideanLength(const QPointF &point)
  412 +{
  413 + return sqrt(pow(point.x(), 2) + pow(point.y(), 2));
  414 +}
  415 +
  416 +} // namespace QtUtils
  417 +
... ...
openbr/core/qtutils.h
... ... @@ -73,6 +73,9 @@ namespace QtUtils
73 73  
74 74 /**** Variant Utilities ****/
75 75 QString toString(const QVariant &variant);
  76 +
  77 + /**** Point Utilities ****/
  78 + float euclideanLength(const QPointF &point);
76 79 }
77 80  
78 81 #endif // __QTUTILS_H
... ...
openbr/openbr.cpp
... ... @@ -87,9 +87,9 @@ float br_eval_detection(const char *predicted_gallery, const char *truth_gallery
87 87 return EvalDetection(predicted_gallery, truth_gallery, csv);
88 88 }
89 89  
90   -void br_eval_landmarking(const char *predicted_gallery, const char *truth_gallery, const char *csv)
  90 +float br_eval_landmarking(const char *predicted_gallery, const char *truth_gallery, const char *csv, int normalization_index_a, int normalization_index_b)
91 91 {
92   - return EvalLandmarking(predicted_gallery, truth_gallery, csv);
  92 + return EvalLandmarking(predicted_gallery, truth_gallery, csv, normalization_index_a, normalization_index_b);
93 93 }
94 94  
95 95 void br_eval_regression(const char *predicted_gallery, const char *truth_gallery, const char * predicted_property, const char * truth_property)
... ...
openbr/openbr.h
... ... @@ -173,8 +173,10 @@ BR_EXPORT float br_eval_detection(const char *predicted_gallery, const char *tru
173 173 * \param predicted_gallery The predicted br::Gallery.
174 174 * \param truth_gallery The ground truth br::Gallery.
175 175 * \param csv Optional \c .csv file to contain performance metrics.
  176 + * \param normalization_index_a Optional first index in the list of points to use for normalization.
  177 + * \param normalization_index_b Optional second index in the list of points to use for normalization.
176 178 */
177   -BR_EXPORT void br_eval_landmarking(const char *predicted_gallery, const char *truth_gallery, const char *csv = "");
  179 +BR_EXPORT float br_eval_landmarking(const char *predicted_gallery, const char *truth_gallery, const char *csv = "", int normalization_index_a = 0, int normalization_index_b = 1);
178 180  
179 181 /*!
180 182 * \brief Evaluates regression accuracy to disk.
... ...
openbr/openbr_plugin.cpp
... ... @@ -127,12 +127,12 @@ QString File::resolved() const
127 127  
128 128 bool File::contains(const QString &key) const
129 129 {
130   - return m_metadata.contains(key) || Globals->contains(key);
  130 + return m_metadata.contains(key) || Globals->contains(key) || key == "name";
131 131 }
132 132  
133 133 QVariant File::value(const QString &key) const
134 134 {
135   - return m_metadata.contains(key) ? m_metadata.value(key) : Globals->property(qPrintable(key));
  135 + return m_metadata.contains(key) ? m_metadata.value(key) : (key == "name" ? name : Globals->property(qPrintable(key)));
136 136 }
137 137  
138 138 QVariant File::parse(const QString &value)
... ...
openbr/openbr_plugin.h
... ... @@ -138,6 +138,7 @@ void reset_##NAME() { NAME = DEFAULT; }
138 138 *
139 139 * Key | Value | Description
140 140 * --- | ---- | -----------
  141 + * name | QString | Contents of #name
141 142 * separator | QString | Seperate #name into multiple files
142 143 * Index | int | Index of a template in a template list
143 144 * Confidence | float | Classification/Regression quality
... ...
openbr/plugins/algorithms.cpp
... ... @@ -46,12 +46,13 @@ class AlgorithmsInitializer : public Initializer
46 46 Globals->abbreviations.insert("CropFace", "Open+Cvt(Gray)+Cascade(FrontalFace)+ASEFEyes+Affine(128,128,0.25,0.35)");
47 47  
48 48 // Video
49   - Globals->abbreviations.insert("DisplayVideo", "Stream([FPSLimit(30)+Show(false,[FrameNumber])+Discard])");
50   - Globals->abbreviations.insert("PerFrameDetection", "Stream([SaveMat(original)+Cvt(Gray)+Cascade(FrontalFace)+ASEFEyes+RestoreMat(original)+Draw(inPlace=true),Show(false,[FrameNumber])+Discard])");
51   - Globals->abbreviations.insert("AgeGenderDemo", "Stream([SaveMat(original)+Cvt(Gray)+Cascade(FrontalFace)+Expand+<FaceClassificationRegistration>+<FaceClassificationExtraction>+<AgeRegressor>/<GenderClassifier>+Discard+RestoreMat(original)+Draw(inPlace=true)+DrawPropertiesPoint([Age,Gender],Affine_0,inPlace=true)+SaveMat(original)+Discard+Contract,RestoreMat(original)+FPSCalc+Show(false,[AvgFPS,Age,Gender])+Discard])");
52   - Globals->abbreviations.insert("HOG", "Stream([KeyPointDetector(SIFT)+ROI+Expand+Resize(32,32)+Gradient+RectRegions+Bin(0,360,8)+Hist(8)+Cat])+Contract+CatRows+KMeans(500)+Hist(500)+SVM");
53   - Globals->abbreviations.insert("HOF", "Stream([KeyPointDetector(SIFT),AggregateFrames(2)+OpticalFlow+Gradient+Bin(0,360,8)+ROI+Hist(8)])+Contract+CatRows+KMeans(500)+Hist(500)");
54   - Globals->abbreviations.insert("HOGHOF", "Stream([Cvt(Gray),KeyPointDetector(SIFT),AggregateFrames(2),(OpticalFlow+Gradient+Bin(0,360,8)+ROI+Hist(8))/(First+Gradient+Bin(0,360,8)+ROI+Hist(8)),CatCols])+Contract+CatRows+KMeans(500)+Hist(500)");
  49 + Globals->abbreviations.insert("DisplayVideo", "Stream(FPSLimit(30)+Show(false,[FrameNumber])+Discard)");
  50 + Globals->abbreviations.insert("PerFrameDetection", "Stream(SaveMat(original)+Cvt(Gray)+Cascade(FrontalFace)+ASEFEyes+RestoreMat(original)+Draw(inPlace=true)+Show(false,[FrameNumber])+Discard)");
  51 + Globals->abbreviations.insert("AgeGenderDemo", "Stream(SaveMat(original)+Cvt(Gray)+Cascade(FrontalFace)+Expand+<FaceClassificationRegistration>+<FaceClassificationExtraction>+<AgeRegressor>/<GenderClassifier>+Discard+RestoreMat(original)+Draw(inPlace=true)+DrawPropertiesPoint([Age,Gender],Affine_0,inPlace=true)+SaveMat(original)+Discard+Contract+RestoreMat(original)+FPSCalc+Show(false,[AvgFPS,Age,Gender])+Discard)");
  52 +
  53 + Globals->abbreviations.insert("HOG", "Stream(DropFrames(5)+Cvt(Gray)+KeyPointDetector(SIFT)+ROI+Expand+Resize(32,32)+Gradient+RectRegions+Bin(0,360,8)+Hist(8)+Cat)+Contract+CatRows+KMeans(500)+Hist(500)+SVM");
  54 + Globals->abbreviations.insert("HOF", "Stream(DropFrames(5)+KeyPointDetector(SIFT)+AggregateFrames(2)+OpticalFlow+ROI+Expand+Resize(32,32)+Gradient+RectRegions+Bin(0,360,8)+Hist(8)+Cat)+Contract+CatRows+KMeans(500)+Hist(500)");
  55 + Globals->abbreviations.insert("HOGHOF", "Stream(DropFrames(5)+Cvt(Gray),KeyPointDetector(SIFT)+AggregateFrames(2)+(OpticalFlow+Gradient+Bin(0,360,8)+ROI+Hist(8))/(First+Gradient+Bin(0,360,8)+ROI+Hist(8))+CatCols)+Contract+CatRows+KMeans(500)+Hist(500)");
55 56  
56 57 // Generic Image Processing
57 58 Globals->abbreviations.insert("SIFT", "Open+KeyPointDetector(SIFT)+KeyPointDescriptor(SIFT):KeyPointMatcher(BruteForce)");
... ...
openbr/plugins/cascade.cpp
... ... @@ -99,6 +99,8 @@ class CascadeTransform : public UntrainableMetaTransform
99 99 Template u(t.file, m);
100 100 if (rejectLevels.size() > j)
101 101 u.file.set("Confidence", rejectLevels[j]*levelWeights[j]);
  102 + else
  103 + u.file.set("Confidence", 1);
102 104 const QRectF rect = OpenCVUtils::fromRect(rects[j]);
103 105 u.file.appendRect(rect);
104 106 u.file.set(model, rect);
... ...
openbr/plugins/frames.cpp
... ... @@ -19,7 +19,7 @@ class AggregateFrames : public TimeVaryingTransform
19 19 TemplateList buffer;
20 20  
21 21 public:
22   - AggregateFrames() : TimeVaryingTransform(false) {}
  22 + AggregateFrames() : TimeVaryingTransform(false, false) {}
23 23  
24 24 private:
25 25 void train(const TemplateList &data)
... ... @@ -29,15 +29,18 @@ private:
29 29  
30 30 void projectUpdate(const Template &src, Template &dst)
31 31 {
32   - // DropFrames will pass on empty Templates
33   - // but we only want to use non-dropped frames
34   - if (src.empty()) return;
35 32 buffer.append(src);
36 33 if (buffer.size() < n) return;
37 34 foreach (const Template &t, buffer) dst.append(t);
38 35 dst.file = buffer.takeFirst().file;
39 36 }
40 37  
  38 + void finalize(TemplateList & output)
  39 + {
  40 + (void) output;
  41 + buffer.clear();
  42 + }
  43 +
41 44 void store(QDataStream &stream) const
42 45 {
43 46 (void) stream;
... ... @@ -58,35 +61,21 @@ BR_REGISTER(Transform, AggregateFrames)
58 61 *
59 62 * For a video with m frames, DropFrames will pass on m/n frames.
60 63 */
61   -class DropFrames : public TimeVaryingTransform
  64 +class DropFrames : public UntrainableMetaTransform
62 65 {
63 66 Q_OBJECT
64 67 Q_PROPERTY(int n READ get_n WRITE set_n RESET reset_n STORED false)
65 68 BR_PROPERTY(int, n, 1)
66 69  
67   -public:
68   - DropFrames() : TimeVaryingTransform(false) {}
69   -
70   -private:
71   - void train(const TemplateList &data)
  70 + void project(const TemplateList &src, TemplateList &dst) const
72 71 {
73   - (void) data;
74   - }
75   -
76   - void projectUpdate(const Template &src, Template &dst)
77   - {
78   - if (src.file.get<int>("FrameNumber") % n != 0) return;
  72 + if (src.first().file.get<int>("FrameNumber") % n != 0) return;
79 73 dst = src;
80 74 }
81 75  
82   - void store(QDataStream &stream) const
  76 + void project(const Template &src, Template &dst) const
83 77 {
84   - (void) stream;
85   - }
86   -
87   - void load(QDataStream &stream)
88   - {
89   - (void) stream;
  78 + (void) src; (void) dst; qFatal("shouldn't be here");
90 79 }
91 80 };
92 81  
... ...
openbr/plugins/gallery.cpp
... ... @@ -873,6 +873,50 @@ class FDDBGallery : public Gallery
873 873  
874 874 BR_REGISTER(Gallery, FDDBGallery)
875 875  
  876 +/*!
  877 + * \ingroup galleries
  878 + * \brief Text format for associating anonymous landmarks with images.
  879 + * \author Josh Klontz \cite jklontz
  880 + *
  881 + * \code
  882 + * file_name:x1,y1,x2,y2,...,xn,yn
  883 + * file_name:x1,y1,x2,y2,...,xn,yn
  884 + * ...
  885 + * file_name:x1,y1,x2,y2,...,xn,yn
  886 + * \endcode
  887 + */
  888 +class landmarksGallery : public Gallery
  889 +{
  890 + Q_OBJECT
  891 +
  892 + TemplateList readBlock(bool *done)
  893 + {
  894 + *done = true;
  895 + TemplateList templates;
  896 + foreach (const QString &line, QtUtils::readLines(file)) {
  897 + const QStringList words = line.split(':');
  898 + if (words.size() != 2) qFatal("Expected exactly one ':' in: %s.", qPrintable(line));
  899 + File file(words[0]);
  900 + const QList<float> vals = QtUtils::toFloats(words[1].split(','));
  901 + if (vals.size() % 2 != 0) qFatal("Expected an even number of comma-separated values.");
  902 + QList<QPointF> points; points.reserve(vals.size()/2);
  903 + for (int i=0; i<vals.size(); i+=2)
  904 + points.append(QPointF(vals[i], vals[i+1]));
  905 + file.setPoints(points);
  906 + templates.append(file);
  907 + }
  908 + return templates;
  909 + }
  910 +
  911 + void write(const Template &t)
  912 + {
  913 + (void) t;
  914 + qFatal("Not implemented.");
  915 + }
  916 +};
  917 +
  918 +BR_REGISTER(Gallery, landmarksGallery)
  919 +
876 920 } // namespace br
877 921  
878 922 #include "gallery.moc"
... ...
openbr/plugins/gui.cpp
... ... @@ -143,6 +143,51 @@ private:
143 143  
144 144 };
145 145  
  146 +class PromptWindow : public DisplayWindow
  147 +{
  148 + bool eventFilter(QObject * obj, QEvent * event)
  149 + {
  150 + if (event->type() == QEvent::KeyPress)
  151 + {
  152 + event->accept();
  153 +
  154 + QKeyEvent * key_event = dynamic_cast<QKeyEvent *> (event);
  155 + if (key_event == NULL) {
  156 + qDebug("failed to donwcast key event");
  157 + return true;
  158 + }
  159 +
  160 + QString text = key_event->text();
  161 +
  162 + text =text.toLower();
  163 + if (text == "y" || text == "n")
  164 + {
  165 + gotString = key_event->text();
  166 + wait.wakeAll();
  167 + }
  168 + else qDebug("Please answer y/n");
  169 +
  170 + return true;
  171 + } else {
  172 + return QObject::eventFilter(obj, event);
  173 + }
  174 + }
  175 +
  176 +public:
  177 + QString waitForKeyPress()
  178 + {
  179 + QMutexLocker locker(&lock);
  180 + wait.wait(&lock);
  181 +
  182 + return gotString;
  183 + }
  184 +
  185 +private:
  186 + QString gotString;
  187 +
  188 +
  189 +};
  190 +
146 191  
147 192 // I want a template class that doesn't look like a template class
148 193 class NominalCreation
... ... @@ -382,6 +427,68 @@ public:
382 427  
383 428 BR_REGISTER(Transform, ManualTransform)
384 429  
  430 +
  431 +/*!
  432 + * \ingroup transforms
  433 + * \brief Display an image, and asks a yes/no question about it
  434 + * \author Charles Otto \cite caotto
  435 + */
  436 +class SurveyTransform : public ShowTransform
  437 +{
  438 + Q_OBJECT
  439 +
  440 +public:
  441 + Q_PROPERTY(QString question READ get_question WRITE set_question RESET reset_question STORED false)
  442 + BR_PROPERTY(QString, question, "Yes/No")
  443 +
  444 + Q_PROPERTY(QString propertyName READ get_propertyName WRITE set_propertyName RESET reset_propertyName STORED false)
  445 + BR_PROPERTY(QString, propertyName, "answer")
  446 +
  447 +
  448 + void projectUpdate(const TemplateList &src, TemplateList &dst)
  449 + {
  450 + if (Globals->parallelism > 1)
  451 + qFatal("SurveyTransform cannot execute in parallel.");
  452 +
  453 + dst = src;
  454 +
  455 + if (src.empty())
  456 + return;
  457 +
  458 + for (int i = 0; i < dst.size(); i++) {
  459 + foreach(const cv::Mat &m, dst[i]) {
  460 + qImageBuffer = toQImage(m);
  461 + displayBuffer->convertFromImage(qImageBuffer);
  462 +
  463 + emit updateImage(displayBuffer->copy(displayBuffer->rect()));
  464 +
  465 + // Blocking wait for a key-press
  466 + if (this->waitInput) {
  467 + QString answer = p_window->waitForKeyPress();
  468 +
  469 + dst[i].file.set(this->propertyName, answer);
  470 + }
  471 + }
  472 + }
  473 + }
  474 + PromptWindow * p_window;
  475 +
  476 +
  477 + void init()
  478 + {
  479 + if (!Globals->useGui)
  480 + return;
  481 +
  482 + initActual<PromptWindow>();
  483 + p_window = (PromptWindow *) window;
  484 +
  485 + emit changeTitle(this->question);
  486 + }
  487 +};
  488 +
  489 +BR_REGISTER(Transform, SurveyTransform)
  490 +
  491 +
385 492 class FPSLimit : public TimeVaryingTransform
386 493 {
387 494 Q_OBJECT
... ...
openbr/plugins/meta.cpp
... ... @@ -614,6 +614,11 @@ public:
614 614  
615 615 void train(const TemplateList &data)
616 616 {
  617 + if (!transform->trainable) {
  618 + qWarning("Attempted to train untrainable transform, nothing will happen.");
  619 + return;
  620 + }
  621 +
617 622 transform->train(data);
618 623 }
619 624  
... ... @@ -628,7 +633,6 @@ public:
628 633 else dst = output[0];
629 634 }
630 635  
631   -
632 636 // For each input template, form a single element TemplateList, push all those
633 637 // lists through transform, and form dst by concatenating the results.
634 638 // Process the single elemnt templates in parallel if parallelism is enabled.
... ... @@ -677,7 +681,6 @@ public:
677 681  
678 682 void init()
679 683 {
680   -
681 684 if (transform && transform->timeVarying())
682 685 transform = new br::TimeInvariantWrapperTransform(transform);
683 686 }
... ...
openbr/plugins/openbr_internal.h
... ... @@ -122,7 +122,10 @@ public:
122 122  
123 123 TimeInvariantWrapperTransform(Transform * basis) : transformSource(new TransformCopier(basis))
124 124 {
  125 + if (!basis)
  126 + qFatal("TimeInvariantWrapper created with NULL transform");
125 127 baseTransform = basis;
  128 + trainable = basis->trainable;
126 129 }
127 130  
128 131 virtual void project(const Template &src, Template &dst) const
... ... @@ -132,7 +135,6 @@ public:
132 135 transformSource.release(aTransform);
133 136 }
134 137  
135   -
136 138 void project(const TemplateList &src, TemplateList &dst) const
137 139 {
138 140 Transform * aTransform = transformSource.acquire();
... ...
openbr/plugins/stream.cpp
... ... @@ -649,7 +649,7 @@ public:
649 649 class ProcessingStage
650 650 {
651 651 public:
652   - friend class StreamTransform;
  652 + friend class DirectStreamTransform;
653 653 public:
654 654 ProcessingStage(int nThreads = 1)
655 655 {
... ... @@ -1015,15 +1015,23 @@ public:
1015 1015 };
1016 1016  
1017 1017  
1018   -class StreamTransform : public CompositeTransform
  1018 +
  1019 +class DirectStreamTransform : public CompositeTransform
1019 1020 {
1020 1021 Q_OBJECT
1021 1022 public:
1022 1023 Q_PROPERTY(int activeFrames READ get_activeFrames WRITE set_activeFrames RESET reset_activeFrames)
1023 1024 BR_PROPERTY(int, activeFrames, 100)
1024 1025  
  1026 + friend class StreamTransfrom;
  1027 +
1025 1028 void train(const TemplateList & data)
1026 1029 {
  1030 + if (!trainable) {
  1031 + qWarning("Attempted to train untrainable transform, nothing will happen.");
  1032 + return;
  1033 + }
  1034 + qFatal("Stream train is currently not implemented.");
1027 1035 foreach(Transform * transform, transforms) {
1028 1036 transform->train(data);
1029 1037 }
... ... @@ -1110,6 +1118,10 @@ public:
1110 1118 {
1111 1119 if (transforms.isEmpty()) return;
1112 1120  
  1121 + for (int i=0; i < processingStages.size();i++)
  1122 + delete processingStages[i];
  1123 + processingStages.clear();
  1124 +
1113 1125 // call CompositeTransform::init so that trainable is set
1114 1126 // correctly.
1115 1127 CompositeTransform::init();
... ... @@ -1185,12 +1197,13 @@ public:
1185 1197 collectionStage->nextStage = readStage;
1186 1198 }
1187 1199  
1188   - ~StreamTransform()
  1200 + ~DirectStreamTransform()
1189 1201 {
1190 1202 // Delete all the stages
1191 1203 for (int i = 0; i < processingStages.size(); i++) {
1192 1204 delete processingStages[i];
1193 1205 }
  1206 + processingStages.clear();
1194 1207 }
1195 1208  
1196 1209 protected:
... ... @@ -1232,12 +1245,150 @@ protected:
1232 1245 }
1233 1246 };
1234 1247  
1235   -QHash<QObject *, QThreadPool *> StreamTransform::pools;
1236   -QMutex StreamTransform::poolsAccess;
  1248 +QHash<QObject *, QThreadPool *> DirectStreamTransform::pools;
  1249 +QMutex DirectStreamTransform::poolsAccess;
  1250 +
  1251 +BR_REGISTER(Transform, DirectStreamTransform)
  1252 +
  1253 +;
  1254 +
  1255 +class StreamTransform : public TimeVaryingTransform
  1256 +{
  1257 + Q_OBJECT
  1258 +
  1259 +public:
  1260 + StreamTransform() : TimeVaryingTransform(false)
  1261 + {
  1262 + }
  1263 +
  1264 + Q_PROPERTY(br::Transform *transform READ get_transform WRITE set_transform RESET reset_transform STORED false)
  1265 + Q_PROPERTY(int activeFrames READ get_activeFrames WRITE set_activeFrames RESET reset_activeFrames)
  1266 + BR_PROPERTY(br::Transform *, transform, NULL)
  1267 + BR_PROPERTY(int, activeFrames, 100)
  1268 +
  1269 + bool timeVarying() const { return true; }
  1270 +
  1271 + void project(const Template &src, Template &dst) const
  1272 + {
  1273 + basis.project(src,dst);
  1274 + }
  1275 +
  1276 + void projectUpdate(const Template &src, Template &dst)
  1277 + {
  1278 + basis.projectUpdate(src,dst);
  1279 + }
  1280 + void projectUpdate(const TemplateList & src, TemplateList & dst)
  1281 + {
  1282 + basis.projectUpdate(src,dst);
  1283 + }
  1284 +
  1285 +
  1286 + void train(const TemplateList & data)
  1287 + {
  1288 + basis.train(data);
  1289 + }
  1290 +
  1291 + virtual void finalize(TemplateList & output)
  1292 + {
  1293 + (void) output;
  1294 + // Nothing in particular to do here, stream calls finalize
  1295 + // on all child transforms as part of projectUpdate
  1296 + }
  1297 +
  1298 + // reinterpret transform, set up the actual stream. We can only reinterpret pipes
  1299 + void init()
  1300 + {
  1301 + if (!transform)
  1302 + return;
  1303 + trainable = transform->trainable;
  1304 +
  1305 + basis.setParent(this->parent());
  1306 + basis.transforms.clear();
  1307 + basis.activeFrames = this->activeFrames;
  1308 +
  1309 + // We need at least a CompositeTransform * to acess transform's children.
  1310 + CompositeTransform * downcast = dynamic_cast<CompositeTransform *> (transform);
  1311 +
  1312 + // If this isn't even a composite transform, or it's not a pipe, just set up
  1313 + // basis with 1 stage.
  1314 + if (!downcast || QString(transform->metaObject()->className()) != "br::PipeTransform")
  1315 + {
  1316 + basis.transforms.append(transform);
  1317 + basis.init();
  1318 + return;
  1319 + }
  1320 + if (downcast->transforms.empty())
  1321 + {
  1322 + qWarning("Trying to set up empty stream");
  1323 + basis.init();
  1324 + return;
  1325 + }
  1326 +
  1327 + // OK now we will regroup downcast's children
  1328 + QList<QList<Transform *> > sets;
  1329 + sets.append(QList<Transform *> ());
  1330 + sets.last().append(downcast->transforms[0]);
  1331 + if (downcast->transforms[0]->timeVarying())
  1332 + sets.append(QList<Transform *> ());
  1333 +
  1334 + for (int i=1;i < downcast->transforms.size(); i++) {
  1335 + // If this is time varying it becomse its own stage
  1336 + if (downcast->transforms[i]->timeVarying()) {
  1337 + // If a set was already active, we add another one
  1338 + if (!sets.last().empty()) {
  1339 + sets.append(QList<Transform *>());
  1340 + }
  1341 + // add the item
  1342 + sets.last().append(downcast->transforms[i]);
  1343 + // Add another set to indicate separation.
  1344 + sets.append(QList<Transform *>());
  1345 + }
  1346 + // otherwise, we can combine non time-varying stages
  1347 + else {
  1348 + sets.last().append(downcast->transforms[i]);
  1349 + }
  1350 +
  1351 + }
  1352 + if (sets.last().empty())
  1353 + sets.removeLast();
  1354 +
  1355 + QList<Transform *> transform_set;
  1356 + transform_set.reserve(sets.size());
  1357 + for (int i=0; i < sets.size(); i++) {
  1358 + // If this is a single transform set, we add that to the list
  1359 + if (sets[i].size() == 1 ) {
  1360 + transform_set.append(sets[i].at(0));
  1361 + }
  1362 + //otherwise we build a pipe
  1363 + else {
  1364 + CompositeTransform * pipe = dynamic_cast<CompositeTransform *>(Transform::make("Pipe([])", this));
  1365 + pipe->transforms = sets[i];
  1366 + pipe->init();
  1367 + transform_set.append(pipe);
  1368 + }
  1369 + }
  1370 +
  1371 + basis.transforms = transform_set;
  1372 + basis.init();
  1373 + }
  1374 +
  1375 + Transform * smartCopy()
  1376 + {
  1377 + // We just want the DirectStream to begin with, so just return a copy of that.
  1378 + DirectStreamTransform * res = (DirectStreamTransform *) basis.smartCopy();
  1379 + res->activeFrames = this->activeFrames;
  1380 + return res;
  1381 + }
  1382 +
  1383 +
  1384 +private:
  1385 + DirectStreamTransform basis;
  1386 +};
1237 1387  
1238 1388 BR_REGISTER(Transform, StreamTransform)
1239 1389  
1240 1390  
  1391 +
1241 1392 } // namespace br
1242 1393  
1243 1394 #include "stream.moc"
... ...