Definition at line 30 of file mainConstructCodebook.cpp. References Impala::Core::Table::TableTem< Col1T, Col2T, Col3T, Col4T, Col5T, Col6T, Col7T, Col8T, Col9T >::Add(), Impala::CmdOptions::AddOption(), Impala::atoi(), Impala::FileNamePath(), Impala::CmdOptions::GetArg(), Impala::Core::Database::RawDataSet::GetDatabase(), Impala::Core::Database::RawDataSet::GetFilePath(), Impala::CmdOptions::GetInstance(), Impala::Core::Database::RawDataSet::GetQuidClass(), Impala::Core::Database::RawDataSet::GetSetId(), Impala::CmdOptions::GetString(), ILOG_INFO, ILOG_VAR, ILOG_WARN, Impala::CmdOptions::Initialise(), Impala::Core::Matrix::KmeansClustering(), Impala::Core::Database::RawDataSet::MakeDir(), Impala::Core::Feature::FeatureTable::MakeFromDataSet(), Impala::MakeQuidCodebook(), Impala::Core::Database::MakeRawDataSet(), Impala::MakeString(), Impala::Core::Matrix::MatE(), Impala::Core::Matrix::MatNrCol(), Impala::Core::Matrix::MatNrRow(), Impala::CmdOptions::ParseArgs(), Impala::Core::Array::ReadRaw(), and Impala::Util::Write(). Referenced by main(). 00031 { 00032 CmdOptions& options = CmdOptions::GetInstance(); 00033 options.Initialise(false, false, true); 00034 options.AddOption(0, "rawFile", "filename", "", 0, true); 00035 00036 ILOG_VAR(Sandbox.koen.mainConstructCodebook); 00037 00038 if (! options.ParseArgs(argc, argv, "dataset featurename codebookoutputname k", 4)) 00039 return 1; 00040 00041 Core::Database::RawDataSet* dataset = Core::Database::MakeRawDataSet(options.GetArg(0)); 00042 if(!dataset) 00043 { 00044 ILOG_INFO_HEADNODE("failed to open dataset " << options.GetArg(0)); 00045 return 0; 00046 } 00047 00048 String feature = options.GetArg(1); 00049 String outputFilename = options.GetArg(2); 00050 int k = atoi(options.GetArg(3)); 00051 00052 String outputCheck = dataset->GetFilePath("", outputFilename, false, true); 00053 if(!outputCheck.empty()) 00054 { 00055 ILOG_WARN("Output codebook file already exists: " << outputFilename << "; skipping..."); 00056 return 0; 00057 } 00058 00059 ILOG_INFO("Clustering from dataset: " << options.GetArg(0)); 00060 ILOG_INFO("Feature: " << feature); 00061 ILOG_INFO("Output filename: " << outputFilename); 00062 ILOG_INFO("Clusters requested: " << k); 00063 00064 Mat* codebook = 0; 00065 if(options.GetString("rawFile").empty()) 00066 { 00067 Core::Feature::FeatureTable* clusterInput = 00068 Core::Feature::FeatureTable::MakeFromDataSet(dataset, 00069 Core::Feature::FeatureDefinition(feature), 00070 "Keyframes"); // always do keyframes for video sets 00071 ILOG_INFO("Clustering on: " << clusterInput->Size() << " points"); 00072 codebook = KmeansClustering(clusterInput->GetColumn2()->GetStorage(), k); 00073 delete clusterInput; 00074 } 00075 else 00076 { 00077 String rawFilename = options.GetString("rawFile"); 00078 rawFilename = dataset->GetFilePath("", rawFilename, false, false); 00079 Mat* rawData = 0; 00080 ReadRaw(rawData, rawFilename, dataset->GetDatabase()); 00081 codebook = KmeansClustering(rawData, k); 00082 delete rawData; 00083 } 00084 00085 Core::Feature::FeatureTable* codebookTable = new Core::Feature::FeatureTable( 00086 String("kmeans-clustering_k_") + MakeString(k), k, 00087 MatNrCol(codebook)); 00088 for(int i = 0; i < MatNrRow(codebook); i++) 00089 { 00090 Quid descr = MakeQuidCodebook(dataset->GetQuidClass(), dataset->GetSetId(), i); 00091 Core::Vector::VectorTem<Real64> v(MatNrCol(codebook)); 00092 for(int j = 0; j < MatNrCol(codebook); j++) 00093 { 00094 v[j] = *MatE(codebook, i, j); 00095 } 00096 codebookTable->Add(descr, v); 00097 } 00098 delete codebook; 00099 00100 dataset->MakeDir(FileNamePath(outputFilename)); 00101 String output2 = dataset->GetFilePath("", outputFilename, true, false); 00102 Core::Table::Write(codebookTable, output2, dataset->GetDatabase(), true); 00103 delete codebookTable; 00104 00105 return 0; 00106 }
Here is the call graph for this function: ![]()
|