enable training test. refactor globbing
authormarina.kolpakova <marina.kolpakova@itseez.com>
Wed, 13 Mar 2013 09:40:11 +0000 (13:40 +0400)
committermarina.kolpakova <marina.kolpakova@itseez.com>
Wed, 13 Mar 2013 09:43:22 +0000 (13:43 +0400)
apps/sft/dataset.cpp
modules/softcascade/test/test_training.cpp

index 52ec8ac..d89a38e 100644 (file)
 #include <iostream>
 #include <queue>
 
-inline std::string itoa(long i) { return cv::format("%ld", i); }
-
-#if !defined (_WIN32) && ! defined(__MINGW32__)
-# include <glob.h>
-
-namespace {
-using namespace sft;
-void glob(const string& path, svector& ret)
-{
-    glob_t glob_result;
-    glob(path.c_str(), GLOB_TILDE, 0, &glob_result);
-
-    ret.clear();
-    ret.reserve(glob_result.gl_pathc);
-
-    for(unsigned int i = 0; i < glob_result.gl_pathc; ++i)
-    {
-        ret.push_back(std::string(glob_result.gl_pathv[i]));
-        dprintf("%s\n", ret[i].c_str());
-    }
-
-    globfree(&glob_result);
-}
-
-}
-#else
-
-# include <windows.h>
-namespace {
-using namespace sft;
-void glob(const string& refRoot, const string& refExt, svector &refvecFiles)
-{
-    std::string     strFilePath;             // File path
-    std::string     strExtension;            // Extension
-
-    std::string strPattern = refRoot + "\\*.*";
-
-    WIN32_FIND_DATA FileInformation;         // File information
-    HANDLE hFile = ::FindFirstFile(strPattern.c_str(), &FileInformation);
-
-    if(hFile == INVALID_HANDLE_VALUE)
-        CV_Error(CV_StsBadArg, "Your dataset search path is incorrect");
-
-    do
-    {
-        if(FileInformation.cFileName[0] != '.')
-        {
-            strFilePath.erase();
-            strFilePath = refRoot + "\\" + FileInformation.cFileName;
-
-            if( !(FileInformation.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) )
-            {
-                // Check extension
-                strExtension = FileInformation.cFileName;
-                strExtension = strExtension.substr(strExtension.rfind(".") + 1);
-
-                if(strExtension == refExt)
-                    // Save filename
-                    refvecFiles.push_back(strFilePath);
-            }
-        }
-    }
-    while(::FindNextFile(hFile, &FileInformation) == TRUE);
-
-    // Close handle
-    ::FindClose(hFile);
-
-    DWORD dwError = ::GetLastError();
-    if(dwError != ERROR_NO_MORE_FILES)
-        CV_Error(CV_StsBadArg, "Your dataset search path is incorrect");
-}
-}
-
-#endif
-
 // in the default case data folders should be aligned as following:
 // 1. positives: <train or test path>/octave_<octave number>/pos/*.png
 // 2. negatives: <train or test path>/octave_<octave number>/neg/*.png
-ScaledDataset::ScaledDataset(const string& path, const int oct)
+sft::ScaledDataset::ScaledDataset(const string& path, const int oct)
 {
     dprintf("%s\n", "get dataset file names...");
     dprintf("%s\n", "Positives globing...");
-
-#if !defined (_WIN32) && ! defined(__MINGW32__)
-    glob(path + "/pos/octave_" + itoa(oct) + "/*.png", pos);
-#else
-    glob(path + "/pos/octave_" + itoa(oct),     "png", pos);
-#endif
+    cv::glob(path + "/pos/octave_" + cv::format("%d", oct) + "/*.png", pos);
 
     dprintf("%s\n", "Negatives globing...");
-#if !defined (_WIN32) && ! defined(__MINGW32__)
-    glob(path + "/neg/octave_" + itoa(oct) + "/*.png", neg);
-#else
-    glob(path + "/neg/octave_" + itoa(oct),     "png", neg);
-#endif
+    cv::glob(path + "/neg/octave_" + cv::format("%d", oct) + "/*.png", neg);
 
     // Check: files not empty
     CV_Assert(pos.size() != size_t(0));
     CV_Assert(neg.size() != size_t(0));
 }
 
-cv::Mat ScaledDataset::get(SampleType type, int idx) const
+cv::Mat sft::ScaledDataset::get(SampleType type, int idx) const
 {
     const std::string& src = (type == POSITIVE)? pos[idx]: neg[idx];
     return cv::imread(src);
 }
 
-int ScaledDataset::available(SampleType type) const
+int sft::ScaledDataset::available(SampleType type) const
 {
     return (int)((type == POSITIVE)? pos.size():neg.size());
 }
 
-ScaledDataset::~ScaledDataset(){}
\ No newline at end of file
+sft::ScaledDataset::~ScaledDataset(){}
\ No newline at end of file
index a03ab8a..0d9f632 100644 (file)
 #include <fstream>
 #include <vector>
 
-#include "test_precomp.hpp"
-#if !defined (_WIN32) && ! defined(__MINGW32__)
-# include <glob.h>
-#else
-# include <windows.h>
-#endif
-
 using namespace std;
 
 namespace {
@@ -74,92 +67,10 @@ private:
     svector neg;
 };
 
-string itoa(long i)
-{
-    char s[65];
-    sprintf(s, "%ld", i);
-    return std::string(s);
-}
-
-
-#if !defined (_WIN32) && ! defined(__MINGW32__)
-
-void glob(const string& path, svector& ret)
-{
-    glob_t glob_result;
-    glob(path.c_str(), GLOB_TILDE, 0, &glob_result);
-
-    ret.clear();
-    ret.reserve(glob_result.gl_pathc);
-
-    for(unsigned int i = 0; i < glob_result.gl_pathc; ++i)
-    {
-        ret.push_back(std::string(glob_result.gl_pathv[i]));
-    }
-
-    globfree(&glob_result);
-}
-
-#else
-
-void glob(const string& refRoot, const string& refExt, svector &refvecFiles)
-{
-    std::string     strFilePath;             // File path
-    std::string     strExtension;            // Extension
-
-    std::string strPattern = refRoot + "\\*.*";
-
-    WIN32_FIND_DATA FileInformation;         // File information
-    HANDLE hFile = ::FindFirstFile(strPattern.c_str(), &FileInformation);
-
-    if(hFile == INVALID_HANDLE_VALUE)
-        CV_Error(CV_StsBadArg, "Your dataset search path is incorrect");
-
-    do
-    {
-        if(FileInformation.cFileName[0] != '.')
-        {
-            strFilePath.erase();
-            strFilePath = refRoot + "\\" + FileInformation.cFileName;
-
-            if( !(FileInformation.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) )
-            {
-                // Check extension
-                strExtension = FileInformation.cFileName;
-                strExtension = strExtension.substr(strExtension.rfind(".") + 1);
-
-                if(strExtension == refExt)
-                    // Save filename
-                    refvecFiles.push_back(strFilePath);
-            }
-        }
-    }
-    while(::FindNextFile(hFile, &FileInformation) == TRUE);
-
-    // Close handle
-    ::FindClose(hFile);
-
-    DWORD dwError = ::GetLastError();
-    if(dwError != ERROR_NO_MORE_FILES)
-        CV_Error(CV_StsBadArg, "Your dataset search path is incorrect");
-}
-
-#endif
-
 ScaledDataset::ScaledDataset(const string& path, const int oct)
 {
-
-#if !defined (_WIN32) && ! defined(__MINGW32__)
-    glob(path + "/pos/octave_" + itoa(oct) + "/*.png", pos);
-#else
-    glob(path + "/pos/octave_" + itoa(oct),     "png", pos);
-#endif
-
-#if !defined (_WIN32) && ! defined(__MINGW32__)
-    glob(path + "/neg/octave_" + itoa(oct) + "/*.png", neg);
-#else
-    glob(path + "/neg/octave_" + itoa(oct),     "png", neg);
-#endif
+    cv::glob(path + cv::format("/octave_%d/*.png", oct), pos);
+    cv::glob(path + "/*.png", neg);
 
     // Check: files not empty
     CV_Assert(pos.size() != size_t(0));
@@ -181,7 +92,7 @@ ScaledDataset::~ScaledDataset(){}
 
 }
 
-TEST(DISABLED_SoftCascade, training)
+TEST(SoftCascade, training)
 {
     // // 2. check and open output file
     string outXmlPath = cv::tempfile(".xml");
@@ -214,8 +125,8 @@ TEST(DISABLED_SoftCascade, training)
 
         cv::Ptr<FeaturePool> pool = FeaturePool::create(model, nfeatures, 10);
         nfeatures = pool->size();
-        int npositives = 20;
-        int nnegatives = 40;
+        int npositives = 10;
+        int nnegatives = 20;
 
         cv::Rect boundingBox = cv::Rect( cvRound(20 * octave), cvRound(20  * octave),
                                          cvRound(64 * octave), cvRound(128 * octave));
@@ -223,7 +134,7 @@ TEST(DISABLED_SoftCascade, training)
         cv::Ptr<ChannelFeatureBuilder> builder = ChannelFeatureBuilder::create("HOG6MagLuv");
         cv::Ptr<Octave> boost = Octave::create(boundingBox, npositives, nnegatives, *it, shrinkage, builder);
 
-        std::string path = cvtest::TS::ptr()->get_data_path() + "softcascade/sample_training_set";
+        std::string path = cvtest::TS::ptr()->get_data_path() + "cascadeandhog/sample_training_set";
         ScaledDataset dataset(path, *it);
 
         if (boost->train(&dataset, pool, 3, 2))