mirror of
https://github.com/opencv/opencv_contrib.git
synced 2025-10-21 14:41:58 +08:00
updated or_sun dataset loader
This commit is contained in:
@@ -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:
|
|||||||
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[])
|
|||||||
|
|
||||||
// ***************
|
// ***************
|
||||||
// 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 @@
|
|||||||
#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:
|
|||||||
|
|
||||||
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)
|
|||||||
loadDataset(path);
|
loadDataset(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void OR_sunImp::loadDatasetPart(const string &path, vector< Ptr<Object> > &dataset_)
|
||||||
|
{
|
||||||
|
string line;
|
||||||
|
ifstream infile(path.c_str());
|
||||||
|
while (getline(infile, line))
|
||||||
|
{
|
||||||
|
Ptr<OR_sunObj> curr(new OR_sunObj);
|
||||||
|
curr->label = 397;
|
||||||
|
curr->name = line;
|
||||||
|
|
||||||
|
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)
|
void OR_sunImp::loadDataset(const string &path)
|
||||||
{
|
{
|
||||||
train.push_back(vector< Ptr<Object> >());
|
/*string classNameFile(path + "ClassName.txt");
|
||||||
test.push_back(vector< Ptr<Object> >());
|
|
||||||
validation.push_back(vector< Ptr<Object> >());
|
|
||||||
|
|
||||||
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)
|
|||||||
}
|
}
|
||||||
|
|
||||||
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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user