@@ -38,8 +38,8 @@ namespace dest {
3838 const ImportParameters & opts,
3939 std::vector<float > *scaleFactors)
4040 {
41- const bool isIMM = util::findFilesInDir (directory, " asf" , true ).size () > 0 ;
42- const bool isIBUG = util::findFilesInDir (directory, " pts" , true ).size () > 0 ;
41+ const bool isIMM = util::findFilesInDir (directory, " asf" , true , true ).size () > 0 ;
42+ const bool isIBUG = util::findFilesInDir (directory, " pts" , true , true ).size () > 0 ;
4343
4444 if (isIMM) {
4545 bool ok = importIMMFaceDatabase (directory, rectangleFile, images, shapes, rects, opts, scaleFactors);
@@ -69,6 +69,20 @@ namespace dest {
6969 s *= factor;
7070 r *= factor;
7171 }
72+
73+ cv::Mat loadImageFromFilePrefix (const std::string &prefix) {
74+ const std::string extensions[] = { " .png" , " .jpg" , " .jpeg" , " .bmp" , " " };
75+
76+ cv::Mat img;
77+ const std::string *ext = extensions;
78+
79+ do {
80+ img = cv::imread (prefix + *ext, cv::IMREAD_GRAYSCALE);
81+ ++ext;
82+ } while (*ext != " " && img.empty ());
83+
84+ return img;
85+ }
7286
7387 void mirrorImageShapeAndRectVertically (cv::Mat &img,
7488 core::Shape &s,
@@ -214,7 +228,7 @@ namespace dest {
214228 std::vector<float > *scaleFactors)
215229 {
216230
217- std::vector<std::string> paths = util::findFilesInDir (directory, " asf" , true );
231+ std::vector<std::string> paths = util::findFilesInDir (directory, " asf" , true , true );
218232 DEST_LOG (" Loading IMM database. Found " << paths.size () << " candidate entries." << std::endl);
219233
220234 std::vector<core::Rect> loadedRects;
@@ -232,13 +246,12 @@ namespace dest {
232246 size_t initialSize = images.size ();
233247
234248 for (size_t i = 0 ; i < paths.size (); ++i) {
235- const std::string fileNameImg = paths[i] + " .jpg" ;
236- const std::string fileNamePts = paths[i] + " .asf" ;
249+ const std::string fileNameAsf = paths[i] + " .asf" ;
237250
238251 core::Shape s;
239252 core::Rect r;
240- bool asfOk = parseAsfFile (fileNamePts , s);
241- cv::Mat cvImg = cv::imread (fileNameImg, cv::IMREAD_GRAYSCALE );
253+ bool asfOk = parseAsfFile (fileNameAsf , s);
254+ cv::Mat cvImg = loadImageFromFilePrefix (paths[i] );
242255
243256 if (asfOk && !cvImg.empty ()) {
244257
@@ -405,7 +418,7 @@ namespace dest {
405418 std::vector<float > *scaleFactors)
406419 {
407420
408- std::vector<std::string> paths = util::findFilesInDir (directory, " pts" , true );
421+ std::vector<std::string> paths = util::findFilesInDir (directory, " pts" , true , true );
409422 DEST_LOG (" Loading ibug database. Found " << paths.size () << " candidate entries." << std::endl);
410423
411424 std::vector<core::Rect> loadedRects;
@@ -424,13 +437,12 @@ namespace dest {
424437 size_t initialSize = images.size ();
425438
426439 for (size_t i = 0 ; i < paths.size (); ++i) {
427- const std::string fileNameImg = paths[i] + " .jpg" ;
428440 const std::string fileNamePts = paths[i] + " .pts" ;
429441
430442 core::Shape s;
431443 core::Rect r;
432444 bool ptsOk = parsePtsFile (fileNamePts, s);
433- cv::Mat cvImg = cv::imread (fileNameImg, cv::IMREAD_GRAYSCALE );
445+ cv::Mat cvImg = loadImageFromFilePrefix (paths[i] );
434446
435447 if (ptsOk && !cvImg.empty ()) {
436448
0 commit comments