Commit 93d6e860e326c08acdc8cec17712fbe1b7e22191

Authored by Josh Klontz
1 parent 99e03750

first draft of br-enroll reference implementation

app/br-download/br-download.cpp
@@ -60,9 +60,6 @@ static bool processReply(QNetworkReply* reply) @@ -60,9 +60,6 @@ static bool processReply(QNetworkReply* reply)
60 if (!permissive && imdecode(Mat(1, data.size(), CV_8UC1, (void*)data.data()), IMREAD_ANYDEPTH | IMREAD_ANYCOLOR).empty()) 60 if (!permissive && imdecode(Mat(1, data.size(), CV_8UC1, (void*)data.data()), IMREAD_ANYDEPTH | IMREAD_ANYCOLOR).empty())
61 return false; 61 return false;
62 62
63 - static QMutex lock;  
64 - QMutexLocker locker(&lock);  
65 -  
66 const QByteArray hash = QCryptographicHash::hash(data, QCryptographicHash::Md5); 63 const QByteArray hash = QCryptographicHash::hash(data, QCryptographicHash::Md5);
67 br_append_utemplate_contents(stdout, reinterpret_cast<const int8_t*>(hash.data()), reinterpret_cast<const int8_t*>(hash.data()), 3, data.size(), reinterpret_cast<const int8_t*>(data.data())); 64 br_append_utemplate_contents(stdout, reinterpret_cast<const int8_t*>(hash.data()), reinterpret_cast<const int8_t*>(hash.data()), 3, data.size(), reinterpret_cast<const int8_t*>(data.data()));
68 return true; 65 return true;
@@ -75,7 +72,7 @@ int main(int argc, char *argv[]) @@ -75,7 +72,7 @@ int main(int argc, char *argv[])
75 QNetworkAccessManager networkAccessManager; 72 QNetworkAccessManager networkAccessManager;
76 73
77 for (int i=1; i<argc; i++) { 74 for (int i=1; i<argc; i++) {
78 - if (!strcmp(argv[i], "-help" )) { help(); exit(0); } 75 + if (!strcmp(argv[i], "-help" )) { help(); exit(EXIT_SUCCESS); }
79 else if (!strcmp(argv[i], "-json" )) json = true; 76 else if (!strcmp(argv[i], "-json" )) json = true;
80 else if (!strcmp(argv[i], "-permissive")) permissive = true; 77 else if (!strcmp(argv[i], "-permissive")) permissive = true;
81 else { url_provided = processReply(networkAccessManager.get(QNetworkRequest(QUrl(argv[i])))); } 78 else { url_provided = processReply(networkAccessManager.get(QNetworkRequest(QUrl(argv[i])))); }
app/br-enroll/br-enroll.cpp
@@ -46,17 +46,25 @@ static void enroll_utemplate(br_const_utemplate utemplate) @@ -46,17 +46,25 @@ static void enroll_utemplate(br_const_utemplate utemplate)
46 if (utemplate->algorithmID != 3) 46 if (utemplate->algorithmID != 3)
47 qFatal("Expected an encoded image."); 47 qFatal("Expected an encoded image.");
48 48
49 - TemplateList templateList;  
50 - templateList.append(Template(imdecode(Mat(1, utemplate->size, CV_8UC1, (void*) utemplate->data), IMREAD_UNCHANGED)));  
51 - templateList >> *algorithm; 49 + TemplateList templates;
  50 + templates.append(Template(imdecode(Mat(1, utemplate->size, CV_8UC1, (void*) utemplate->data), IMREAD_UNCHANGED)));
  51 + templates >> *algorithm;
  52 +
  53 + foreach (const Template &t, templates) {
  54 + const Mat &m = t.m();
  55 + const uint32_t size = m.rows * m.cols * m.elemSize();
  56 + const QByteArray templateID = QCryptographicHash::hash(QByteArray((const char*) m.data, size), QCryptographicHash::Md5);
  57 + br_append_utemplate_contents(stdout, utemplate->imageID, (const int8_t*) templateID.data(), -1, size, (const int8_t*) m.data);
  58 + }
52 } 59 }
53 60
54 int main(int argc, char *argv[]) 61 int main(int argc, char *argv[])
55 { 62 {
56 for (int i=1; i<argc; i++) 63 for (int i=1; i<argc; i++)
57 - if (!strcmp(argv[i], "-help")) { help(); exit(0); } 64 + if (!strcmp(argv[i], "-help")) { help(); exit(EXIT_SUCCESS); }
58 65
59 Context::initialize(argc, argv, "", false); 66 Context::initialize(argc, argv, "", false);
  67 + Globals->quiet = true;
60 algorithm = Transform::fromAlgorithm("FaceRecognition"); 68 algorithm = Transform::fromAlgorithm("FaceRecognition");
61 br_iterate_utemplates_file(stdin, enroll_utemplate); 69 br_iterate_utemplates_file(stdin, enroll_utemplate);
62 Context::finalize(); 70 Context::finalize();
openbr/universal_template.cpp
@@ -27,13 +27,14 @@ void br_append_utemplate(FILE *file, br_const_utemplate utemplate) @@ -27,13 +27,14 @@ void br_append_utemplate(FILE *file, br_const_utemplate utemplate)
27 27
28 void br_append_utemplate_contents(FILE *file, const int8_t *imageID, const int8_t *templateID, int32_t algorithmID, uint32_t size, const int8_t *data) 28 void br_append_utemplate_contents(FILE *file, const int8_t *imageID, const int8_t *templateID, int32_t algorithmID, uint32_t size, const int8_t *data)
29 { 29 {
30 - QFile qFile;  
31 - qFile.open(file, QFile::WriteOnly | QFile::Append);  
32 - qFile.write((const char*) imageID, 16);  
33 - qFile.write((const char*) templateID, 16);  
34 - qFile.write((const char*) &algorithmID, 4);  
35 - qFile.write((const char*) &size, 4);  
36 - qFile.write((const char*) data, size); 30 + static QMutex lock;
  31 + QMutexLocker locker(&lock);
  32 +
  33 + fwrite(imageID, 16, 1, file);
  34 + fwrite(templateID, 16, 1, file);
  35 + fwrite(&algorithmID, 4, 1, file);
  36 + fwrite(&size, 4, 1, file);
  37 + fwrite(data, 1, size, file);
37 } 38 }
38 39
39 void br_iterate_utemplates(br_const_utemplate begin, br_const_utemplate end, br_utemplate_callback callback) 40 void br_iterate_utemplates(br_const_utemplate begin, br_const_utemplate end, br_utemplate_callback callback)
@@ -46,18 +47,16 @@ void br_iterate_utemplates(br_const_utemplate begin, br_const_utemplate end, br_ @@ -46,18 +47,16 @@ void br_iterate_utemplates(br_const_utemplate begin, br_const_utemplate end, br_
46 47
47 void br_iterate_utemplates_file(FILE *file, br_utemplate_callback callback) 48 void br_iterate_utemplates_file(FILE *file, br_utemplate_callback callback)
48 { 49 {
49 - QFile qFile;  
50 - qFile.open(file, QFile::ReadOnly);  
51 - while (!qFile.atEnd()) {  
52 - br_universal_template header;  
53 - if (qFile.peek((char*) &header, sizeof(br_universal_template)) != sizeof(br_universal_template))  
54 - qFatal("Unexpected EOF when peeking universal template header.");  
55 -  
56 - const uint32_t size = sizeof(br_universal_template) + header.size;  
57 - QByteArray data = qFile.read(size);  
58 - if (uint32_t(data.size()) != size)  
59 - qFatal("Unexepected EOF when reading universal template.");  
60 -  
61 - callback(reinterpret_cast<br_const_utemplate>(data.data())); 50 + while (!feof(file)) {
  51 + br_utemplate t = (br_utemplate) malloc(sizeof(br_universal_template));
  52 +
  53 + if (fread(t, sizeof(br_universal_template), 1, file) > 0) {
  54 + t = (br_utemplate) realloc(t, sizeof(br_universal_template) + t->size);
  55 + if (fread(t+1, 1, t->size, file) != t->size)
  56 + qFatal("Unexepected EOF when reading universal template data.");
  57 + callback(t);
  58 + }
  59 +
  60 + free(t);
62 } 61 }
63 } 62 }