Commit e16ba043 authored by Dmitriy Anisimov's avatar Dmitriy Anisimov

updated or_sun dataset loader

parent 99a5f4cf
...@@ -56,8 +56,8 @@ namespace datasets ...@@ -56,8 +56,8 @@ namespace datasets
struct OR_sunObj : public Object struct OR_sunObj : public Object
{ {
int label;
std::string name; std::string name;
std::vector<std::string> imageNames;
}; };
class CV_EXPORTS OR_sun : public Dataset class CV_EXPORTS OR_sun : public Dataset
...@@ -66,6 +66,8 @@ public: ...@@ -66,6 +66,8 @@ public:
virtual void load(const std::string &path) = 0; virtual void load(const std::string &path) = 0;
static Ptr<OR_sun> create(); static Ptr<OR_sun> create();
std::vector<std::string> paths;
}; };
} }
......
...@@ -70,16 +70,15 @@ int main(int argc, char *argv[]) ...@@ -70,16 +70,15 @@ int main(int argc, char *argv[])
// *************** // ***************
// dataset contains for each object its images. // dataset contains for each object its images.
// For example, let output dataset size and last object. // For example, let output splits number, dataset size and last image.
int numSplits = dataset->getNumSplits();
printf("splits number: %u\n", numSplits);
printf("dataset size: %u\n", (unsigned int)dataset->getTrain().size()); printf("dataset size: %u\n", (unsigned int)dataset->getTrain().size());
OR_sunObj *example = static_cast<OR_sunObj *>(dataset->getTrain().back().get()); OR_sunObj *example = static_cast<OR_sunObj *>(dataset->getTrain().back().get());
printf("last object name: %s\n", example->name.c_str()); printf("last image:\nname: %s\n", example->name.c_str());
printf("last object images number: %u\n", (unsigned int)example->imageNames.size()); printf("label: %u\n", example->label);
vector<string> &imageNames = example->imageNames; printf("label path: %s\n", dataset->paths[example->label].c_str());
for (vector<string>::iterator it=imageNames.begin(); it!=imageNames.end(); ++it)
{
printf("%s\n", (*it).c_str());
}
return 0; return 0;
} }
...@@ -43,6 +43,8 @@ ...@@ -43,6 +43,8 @@
#include "opencv2/datasets/util.hpp" #include "opencv2/datasets/util.hpp"
#include "precomp.hpp" #include "precomp.hpp"
#include <map>
namespace cv namespace cv
{ {
namespace datasets namespace datasets
...@@ -61,6 +63,10 @@ public: ...@@ -61,6 +63,10 @@ public:
private: private:
void loadDataset(const string &path); void loadDataset(const string &path);
void loadDatasetPart(const string &path, vector< Ptr<Object> > &dataset_);
map<string, int> pathLabel;
}; };
/*OR_sunImp::OR_sunImp(const string &path) /*OR_sunImp::OR_sunImp(const string &path)
...@@ -73,13 +79,40 @@ void OR_sunImp::load(const string &path) ...@@ -73,13 +79,40 @@ void OR_sunImp::load(const string &path)
loadDataset(path); loadDataset(path);
} }
void OR_sunImp::loadDataset(const string &path) void OR_sunImp::loadDatasetPart(const string &path, vector< Ptr<Object> > &dataset_)
{ {
train.push_back(vector< Ptr<Object> >()); string line;
test.push_back(vector< Ptr<Object> >()); ifstream infile(path.c_str());
validation.push_back(vector< Ptr<Object> >()); while (getline(infile, line))
{
Ptr<OR_sunObj> curr(new OR_sunObj);
curr->label = 397;
curr->name = line;
string classNameFile(path + "ClassName.txt"); size_t pos = curr->name.rfind('/');
if (pos != string::npos)
{
string labelStr(curr->name.substr(0, pos+1));
map<string, int>::iterator it = pathLabel.find(labelStr);
if (it != pathLabel.end())
{
curr->label = (*it).second;
} else
{
curr->label = pathLabel.size();
pathLabel.insert(make_pair(labelStr, curr->label));
paths.push_back(labelStr);
}
curr->name = curr->name.substr(pos+1);
}
dataset_.push_back(curr);
}
}
void OR_sunImp::loadDataset(const string &path)
{
/*string classNameFile(path + "ClassName.txt");
ifstream infile(classNameFile.c_str()); ifstream infile(classNameFile.c_str());
string line; string line;
while (getline(infile, line)) while (getline(infile, line))
...@@ -96,6 +129,29 @@ void OR_sunImp::loadDataset(const string &path) ...@@ -96,6 +129,29 @@ void OR_sunImp::loadDataset(const string &path)
} }
train.back().push_back(curr); train.back().push_back(curr);
}*/
for (unsigned int i=1; i<=10; ++i)
{
char tmp[3];
sprintf(tmp, "%u", i);
string numStr;
if (i<10)
{
numStr = string("0") + string(tmp);
} else
{
numStr = tmp;
}
string trainFile(path + "Partitions/Training_" + numStr + ".txt");
string testFile(path + "Partitions/Testing_" + numStr + ".txt");
train.push_back(vector< Ptr<Object> >());
test.push_back(vector< Ptr<Object> >());
validation.push_back(vector< Ptr<Object> >());
loadDatasetPart(trainFile, train.back());
loadDatasetPart(testFile, test.back());
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment