Commit 51f633f32529f38b6194a3c18579f0fd78320eb7

Authored by Austin Blanton
1 parent 8ea461f0

Decode and enroll images from strings in C API

openbr/core/core.cpp
... ... @@ -160,7 +160,7 @@ struct AlgorithmCore
160 160 data.removeAt(i);
161 161 const int numFiles = data.size();
162 162  
163   - data >> *transform;
  163 + enroll(data);
164 164  
165 165 g->writeBlock(data);
166 166 const FileList newFiles = data.files();
... ... @@ -184,6 +184,11 @@ struct AlgorithmCore
184 184 return fileList;
185 185 }
186 186  
  187 + void enroll(TemplateList &data)
  188 + {
  189 + data >> *transform;
  190 + }
  191 +
187 192 void retrieveOrEnroll(const File &file, QScopedPointer<Gallery> &gallery, FileList &galleryFiles)
188 193 {
189 194 if (!file.getBool("enroll") && (QStringList() << "gal" << "mem" << "template").contains(file.suffix())) {
... ... @@ -371,6 +376,14 @@ FileList br::Enroll(const File &amp;input, const File &amp;gallery)
371 376 return AlgorithmManager::getAlgorithm(gallery.get<QString>("algorithm"))->enroll(input, gallery);
372 377 }
373 378  
  379 +void br::Enroll(const Template &tmpl)
  380 +{
  381 + QList<Template> tmpls;
  382 + tmpls.append(tmpl);
  383 + TemplateList tl(tmpls);
  384 + AlgorithmManager::getAlgorithm(tmpl.file.get<QString>("algorithm"))->enroll(tl);
  385 +}
  386 +
374 387 void br::Compare(const File &targetGallery, const File &queryGallery, const File &output)
375 388 {
376 389 AlgorithmManager::getAlgorithm(output.get<QString>("algorithm"))->compare(targetGallery, queryGallery, output);
... ...
openbr/openbr.cpp
... ... @@ -23,6 +23,7 @@
23 23 #include "core/plot.h"
24 24 #include "core/qtutils.h"
25 25 #include "plugins/openbr_internal.h"
  26 +#include <opencv2/highgui/highgui.hpp>
26 27  
27 28 using namespace br;
28 29  
... ... @@ -114,6 +115,14 @@ void br_initialize(int &amp;argc, char *argv[], const char *sdk_path)
114 115 Context::initialize(argc, argv, sdk_path);
115 116 }
116 117  
  118 +void br_initialize_default()
  119 +{
  120 + int argc = 1;
  121 + char app[] = "br";
  122 + char *argv[1] = {app};
  123 + Context::initialize(argc, argv, "");
  124 +}
  125 +
117 126 bool br_is_classifier(const char *algorithm)
118 127 {
119 128 return IsClassifier(algorithm);
... ... @@ -289,3 +298,36 @@ void br_slave_process(const char * baseName)
289 298 worker->mainLoop();
290 299 delete worker;
291 300 }
  301 +
  302 +br_template br_load_img(const char *data)
  303 +{
  304 + int size = strlen(data);
  305 + std::vector<char> buf(data, data+size);
  306 + cv::Mat img = cv::imdecode(cv::Mat(buf), CV_LOAD_IMAGE_ANYDEPTH);
  307 + Template *tmpl = new Template(img);
  308 + return (br_template)tmpl;
  309 +}
  310 +
  311 +const unsigned char *br_unload_img(br_template tmpl)
  312 +{
  313 + Template *t = (Template*)tmpl;
  314 + return t->m().data;
  315 +}
  316 +
  317 +int br_img_rows(br_template tmpl)
  318 +{
  319 + Template *t = (Template*)tmpl;
  320 + return t->m().rows;
  321 +}
  322 +
  323 +int br_img_cols(br_template tmpl)
  324 +{
  325 + Template *t = (Template*)tmpl;
  326 + return t->m().cols;
  327 +}
  328 +
  329 +void br_enroll_template(br_template tmpl)
  330 +{
  331 + Template *t = (Template*)tmpl;
  332 + Enroll(*t);
  333 +}
... ...
openbr/openbr.h
... ... @@ -206,6 +206,7 @@ BR_EXPORT void br_fuse(int num_input_simmats, const char *input_simmats[],
206 206 * \see br_finalize
207 207 */
208 208 BR_EXPORT void br_initialize(int &argc, char *argv[], const char *sdk_path = "");
  209 +BR_EXPORT void br_initialize_default();
209 210  
210 211 /*!
211 212 * \brief Wraps br::IsClassifier()
... ... @@ -414,6 +415,22 @@ BR_EXPORT const char *br_version();
414 415 */
415 416 BR_EXPORT void br_slave_process(const char * baseKey);
416 417  
  418 +// to avoid having to include unwanted headers
  419 +// this will be this header's conception of a template
  420 +// any functions that need a Template pointer
  421 +// will take this typedef and cast it
  422 +// (and then we'll cross our fingers)
  423 +typedef void* br_template;
  424 +/*!
  425 + * \brief Load an image from a string buffer.
  426 + * Easy way to pass an image in memory from another programming language to openbr.
  427 + */
  428 +BR_EXPORT br_template br_load_img(const char *data);
  429 +BR_EXPORT const unsigned char* br_unload_img(br_template tmpl);
  430 +BR_EXPORT int br_img_rows(br_template tmpl);
  431 +BR_EXPORT int br_img_cols(br_template tmpl);
  432 +BR_EXPORT void br_enroll_template(br_template tmpl);
  433 +
417 434 /*! @}*/
418 435  
419 436 #ifdef __cplusplus
... ...
openbr/openbr_plugin.h
... ... @@ -1317,6 +1317,11 @@ BR_EXPORT void Train(const File &amp;input, const File &amp;model);
1317 1317 * \see br_enroll
1318 1318 */
1319 1319 BR_EXPORT FileList Enroll(const File &input, const File &gallery = File());
  1320 +/*!
  1321 + * \brief High-level function for enrolling templates.
  1322 + * \see br_enroll
  1323 + */
  1324 +BR_EXPORT void Enroll(const Template &tmpl);
1320 1325  
1321 1326 /*!
1322 1327 * \brief High-level function for comparing galleries.
... ...