Commit 4db5b304a5edc9da9447a4e91c43368fa830e234

Authored by Austin Blanton
2 parents a7fbfd50 a585324d

Merge MORE sliding window conflicts

Conflicts:
	openbr/plugins/slidingwindow.cpp
openbr/plugins/slidingwindow.cpp
... ... @@ -78,7 +78,6 @@ private:
78 78 stream >> windowHeight;
79 79 }
80 80  
81   -protected: // Let IntegralSlidingWindowTransform access this
82 81 void project(const Template &src, Template &dst) const
83 82 {
84 83 (void)src;(void)dst;qFatal("don't do that");
... ... @@ -86,6 +85,13 @@ protected: // Let IntegralSlidingWindowTransform access this
86 85  
87 86 void project(const TemplateList &src, TemplateList &dst) const
88 87 {
  88 + float scale = src.first().file.get<float>("scale", 1);
  89 + projectHelp(src, dst, windowWidth, windowHeight, scale);
  90 + }
  91 +
  92 +protected:
  93 + void projectHelp(const TemplateList &src, TemplateList &dst, int windowWidth, int windowHeight, float scale = 1) const
  94 + {
89 95 // no need to slide a window over ground truth data
90 96 if (src.first().file.getBool("Train", false)) {
91 97 dst = src;
... ... @@ -93,9 +99,8 @@ protected: // Let IntegralSlidingWindowTransform access this
93 99 }
94 100  
95 101 foreach (const Template &t, src) {
96   - float scale = t.file.get<float>("scale", 1);
97   - for (double y = 0; y + windowHeight < t.m().rows; y += stepSize) {
98   - for (double x = 0; x + windowWidth < t.m().cols; x += stepSize) {
  102 + for (float y = 0; y + windowHeight < t.m().rows; y += windowHeight*stepFraction) {
  103 + for (float x = 0; x + windowWidth < t.m().cols; x += windowWidth*stepFraction) {
99 104 Mat windowMat(t.m(), Rect(x, y, windowWidth, windowHeight));
100 105 Template detect;
101 106 transform->project(Template(t.file, windowMat), detect);
... ... @@ -103,7 +108,7 @@ protected: // Let IntegralSlidingWindowTransform access this
103 108 // the result will be the only value in the Mat
104 109 float conf = detect.m().at<float>(0);
105 110 if (conf > threshold) {
106   - detect.file.set("Detection", QRectF((float) x * scale, (float) y * scale, (float) windowWidth * scale, (float) windowHeight * scale));
  111 + detect.file.set("Detection", QRectF(x*scale, y*scale, windowWidth*scale, windowHeight*scale));
107 112 detect.file.set("Confidence", conf);
108 113 dst.append(detect);
109 114 if (takeFirst)
... ... @@ -127,10 +132,10 @@ class IntegralSlidingWindowTransform : public SlidingWindowTransform
127 132 {
128 133 Q_OBJECT
129 134  
130   - void project(const Template &src, Template &dst) const
  135 + void project(const TemplateList &src, TemplateList &dst) const
131 136 {
132 137 // TODO: call SlidingWindowTransform::project on multiple scales
133   - SlidingWindowTransform::project(src, dst);
  138 + SlidingWindowTransform::projectHelp(src, dst, 24, 24);
134 139 }
135 140 };
136 141  
... ...
scripts/downloadDatasets.sh
... ... @@ -102,3 +102,21 @@ if [ ! -d ../data/MEDS/img ]; then
102 102 mv data/*/*.jpg ../data/MEDS/img
103 103 rm -r data NIST_SD32_MEDS-II_face.zip
104 104 fi
  105 +
  106 +#LFPW
  107 +if [ ! -d ../data/lfpw/trainset ]; then
  108 + echo "Downloading LFPW..."
  109 + if hash curl 2>/dev/null; then
  110 + curl -OL http://ibug.doc.ic.ac.uk/media/uploads/competitions/lfpw.zip
  111 + else
  112 + wget http://ibug.doc.ic.ac.uk/media/uploads/competitions/lfpw.zip
  113 + fi
  114 +
  115 + unzip lfpw.zip
  116 + mv lfpw ../data
  117 + cd ../data/lfpw
  118 + python ../../scripts/lfpwToSigset.py
  119 + cd ../../scripts
  120 + rm lfpw.zip
  121 +fi
  122 +
... ...
scripts/lfpwToSigset.py 0 → 100644
  1 +#!/usr/bin/python
  2 +
  3 +# This scripts converts the LFPW .pts files into xml sigsets that can be readily
  4 +# used within openbr.
  5 +
  6 +from xml.dom.minidom import Document
  7 +import glob
  8 +import os
  9 +
  10 +for lfpwType in ['train','test']:
  11 + files = glob.glob('%sset/*.pts' % lfpwType)
  12 + files.sort()
  13 + cnt = 0
  14 +
  15 + xmlDoc = Document()
  16 + xmlRoot = xmlDoc.createElement('biometric-signature-set')
  17 + for ptsFile in files:
  18 + cnt += 1
  19 + ini = open(ptsFile)
  20 + lines = ini.readlines()
  21 + ini.close()
  22 +
  23 + pntStrList = []
  24 + n = int(lines[1].split()[1])
  25 + for i in range(3,3+n):
  26 + pntStrList.append('(%s)' % (','.join(lines[i].split())))
  27 + pntStr = '[%s]' % ','.join(pntStrList)
  28 +
  29 + xmlSubj = xmlDoc.createElement('biometric-signature')
  30 + xmlSubj.setAttribute('name','subj_%05d' % cnt)
  31 + xmlPres = xmlDoc.createElement('presentation')
  32 + xmlPres.setAttribute('file-name','%sset/%s.png' % (lfpwType,os.path.splitext(ptsFile)[0]))
  33 + xmlPres.setAttribute('Points',pntStr)
  34 + xmlSubj.appendChild(xmlPres)
  35 + xmlRoot.appendChild(xmlSubj)
  36 +
  37 + if not os.path.exists('sigset'):
  38 + os.mkdir('sigset')
  39 + out = open('sigset/%s.xml' % lfpwType,'w')
  40 + print >> out, xmlRoot.toprettyxml()
  41 + out.close()
  42 +
  43 +
... ...