Commit 0f6b8002 authored by Maria Dimashova's avatar Maria Dimashova

fixed save/load of dot; added data for the sample

parent 1c9f4e7c
...@@ -684,7 +684,6 @@ protected: ...@@ -684,7 +684,6 @@ protected:
vector<vector<int> >& dotTemplateIndices ) const; vector<vector<int> >& dotTemplateIndices ) const;
TrainParams trainParams; TrainParams trainParams;
//bool isAddImageAndGradientMask;
std::vector<std::string> objectClassNames; std::vector<std::string> objectClassNames;
std::vector<DOTTemplate> dotTemplates; std::vector<DOTTemplate> dotTemplates;
......
...@@ -424,8 +424,8 @@ void DOTDetector::TrainParams::isConsistent() const ...@@ -424,8 +424,8 @@ void DOTDetector::TrainParams::isConsistent() const
void DOTDetector::TrainParams::read( FileNode& fn ) void DOTDetector::TrainParams::read( FileNode& fn )
{ {
winSize.width = fn["winSize.width"]; winSize.width = fn["winSize_width"];
winSize.height = fn["winSize.height"]; winSize.height = fn["winSize_height"];
regionSize = fn["regionSize"]; regionSize = fn["regionSize"];
minMagnitude = fn["minMagnitude"]; minMagnitude = fn["minMagnitude"];
...@@ -441,8 +441,8 @@ void DOTDetector::TrainParams::write( FileStorage& fs ) const ...@@ -441,8 +441,8 @@ void DOTDetector::TrainParams::write( FileStorage& fs ) const
{ {
CV_Assert( fs.isOpened() ); CV_Assert( fs.isOpened() );
fs << "winSize.width" << winSize.width; fs << "winSize_width" << winSize.width;
fs << "winSize.height" << winSize.height; fs << "winSize_height" << winSize.height;
fs << "regionSize" << regionSize; fs << "regionSize" << regionSize;
fs << "minMagnitude" << minMagnitude; fs << "minMagnitude" << minMagnitude;
...@@ -557,14 +557,22 @@ float DOTDetector::DOTTemplate::computeTexturelessRatio( const cv::Mat& quantize ...@@ -557,14 +557,22 @@ float DOTDetector::DOTTemplate::computeTexturelessRatio( const cv::Mat& quantize
void DOTDetector::DOTTemplate::read( FileNode& fn ) void DOTDetector::DOTTemplate::read( FileNode& fn )
{ {
fn["template"] >> quantizedImage; fn["template"] >> quantizedImage;
fn["objectClassIDs"] >> objectClassIDs; for( FileNodeIterator fni = fn["objectClassIDs"].begin(); fni != fn["objectClassIDs"].end(); fni++ )
{
objectClassIDs.push_back( *fni );
}
texturelessRatio = fn["texturelessRatio"]; texturelessRatio = fn["texturelessRatio"];
} }
void DOTDetector::DOTTemplate::write( FileStorage& fs ) const void DOTDetector::DOTTemplate::write( FileStorage& fs ) const
{ {
fs << "template" << quantizedImage; fs << "template" << quantizedImage;
fs << "objectClassIDs" << objectClassIDs; fs << "objectClassIDs" << "[";
for( size_t i = 0; i < objectClassIDs.size(); i++ )
{
fs << objectClassIDs[i];
}
fs << "]";
fs << "texturelessRatio" << texturelessRatio; fs << "texturelessRatio" << texturelessRatio;
} }
...@@ -601,8 +609,8 @@ void DOTDetector::read( FileNode& fn ) ...@@ -601,8 +609,8 @@ void DOTDetector::read( FileNode& fn )
trainParams.read( fn_params ); trainParams.read( fn_params );
// read class names // read class names
int classCount = fn["class_count"]; int classCount = fn["object_class_count"];
FileNodeIterator fni = fn["class_names"].begin(); FileNodeIterator fni = fn["object_class_names"].begin();
for( int i = 0; i < classCount; i++ ) for( int i = 0; i < classCount; i++ )
{ {
string name; string name;
...@@ -612,11 +620,12 @@ void DOTDetector::read( FileNode& fn ) ...@@ -612,11 +620,12 @@ void DOTDetector::read( FileNode& fn )
// read DOT templates // read DOT templates
int templatesCount = fn["templates_count"]; int templatesCount = fn["templates_count"];
fni = fn["templates"].begin();
for( int i = 0; i < templatesCount; i++ ) for( int i = 0; i < templatesCount; i++ )
{ {
stringstream ss;
ss << "template_" << i;
dotTemplates.push_back( DOTTemplate() ); dotTemplates.push_back( DOTTemplate() );
FileNode cur_fn = *fni; FileNode cur_fn = fn["templates"][ss.str()];
dotTemplates.rbegin()->read( cur_fn ); dotTemplates.rbegin()->read( cur_fn );
} }
} }
...@@ -629,8 +638,8 @@ void DOTDetector::write( FileStorage& fs ) const ...@@ -629,8 +638,8 @@ void DOTDetector::write( FileStorage& fs ) const
fs << "}"; //params fs << "}"; //params
// write class names // write class names
fs << "class_count" << (int)objectClassNames.size(); fs << "object_class_count" << (int)objectClassNames.size();
fs << "class_names" << "["; fs << "object_class_names" << "[";
for( size_t i = 0; i < objectClassNames.size(); i++ ) for( size_t i = 0; i < objectClassNames.size(); i++ )
{ {
fs << objectClassNames[i]; fs << objectClassNames[i];
...@@ -639,12 +648,16 @@ void DOTDetector::write( FileStorage& fs ) const ...@@ -639,12 +648,16 @@ void DOTDetector::write( FileStorage& fs ) const
// write dot templates // write dot templates
fs << "templates_count" << (int)dotTemplates.size(); fs << "templates_count" << (int)dotTemplates.size();
fs << "templates" << "["; fs << "templates" << "{";
for( size_t i = 0; i < dotTemplates.size(); i++ ) for( size_t i = 0; i < dotTemplates.size(); i++ )
{ {
stringstream ss;
ss << "template_" << i;
fs << ss.str() << "{";
dotTemplates[i].write( fs ); dotTemplates[i].write( fs );
fs << "}";
} }
fs << "]"; fs << "}";
} }
void DOTDetector::load( const std::string& filename ) void DOTDetector::load( const std::string& filename )
......
...@@ -41,15 +41,15 @@ int main( int argc, char **argv ) ...@@ -41,15 +41,15 @@ int main( int argc, char **argv )
{ {
if( argc != 1 && argc != 3 ) if( argc != 1 && argc != 3 )
{ {
cout << "Format: base; " << endl << "or without arguments to use default data" << endl; cout << "Format: train_data test_data; " << endl << "or without arguments to use default data" << endl;
return -1; return -1;
} }
string baseDirName, testDirName; string baseDirName, testDirName;
if( argc == 1 ) if( argc == 1 )
{ {
baseDirName = "../MultiScaleDOT/Data/train/"; baseDirName = "../../opencv/samples/cpp/dot_data/train/";
testDirName = "../MultiScaleDOT/Data/test/"; testDirName = "../../opencv/samples/cpp/dot_data/test/";
} }
else else
{ {
...@@ -71,6 +71,9 @@ int main( int argc, char **argv ) ...@@ -71,6 +71,9 @@ int main( int argc, char **argv )
DOTDetector dotDetector; DOTDetector dotDetector;
dotDetector.train( baseDirName, trainParams, true ); dotDetector.train( baseDirName, trainParams, true );
// dotDetector.save( "../../dot.xml.gz" );
// dotDetector.load( "../../dot.xml.gz" );
const vector<string>& objectClassNames = dotDetector.getObjectClassNames(); const vector<string>& objectClassNames = dotDetector.getObjectClassNames();
const vector<DOTDetector::DOTTemplate>& dotTemplates = dotDetector.getDOTTemplates(); const vector<DOTDetector::DOTTemplate>& dotTemplates = dotDetector.getDOTTemplates();
......
black_coffee_cup
#blue_bowl
#blue_cup
#nvidia_cup
#rose_cup
#white_bowl
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