Code cleanups

This commit is contained in:
2019-06-29 13:52:38 +02:00
parent 8a78f03814
commit 845a3309b0
3 changed files with 12 additions and 56 deletions
+6 -41
View File
@@ -1,10 +1,6 @@
#include "DescriptorManager.h" #include "DescriptorManager.h"
//Default constructor, don't use this DescriptorManager::DescriptorManager() {} //don't use this
DescriptorManager::DescriptorManager() {
img_path = "data"; //default value
}
DescriptorManager::DescriptorManager(const fs::path & image_path) { DescriptorManager::DescriptorManager(const fs::path & image_path) {
img_path = image_path; img_path = image_path;
if (!fs::exists(img_path)) { if (!fs::exists(img_path)) {
@@ -75,9 +71,7 @@ Image* DescriptorManager::GetMutated(Image* image, string image_name, int method
return mutated; return mutated;
} }
//Takes the unmodified image and loads its features into memory. //Fills the features array with all descriptors for the given image.
//Either by reading them from disk, or calculating them directly.
//For each of the defined descriptors.
void DescriptorManager::LoadFeatures(string image_path, string image_name) { void DescriptorManager::LoadFeatures(string image_path, string image_name) {
for (int i = 0; i < numDescriptors; i++) { for (int i = 0; i < numDescriptors; i++) {
//First check if we already have this information from the loaded cache //First check if we already have this information from the loaded cache
@@ -104,6 +98,7 @@ void DescriptorManager::LoadFeatures(string image_path, string image_name) {
} }
} }
//Fills the mutatedFeatures array with all descriptors for the given mutation and image.
void DescriptorManager::LoadMutationFeatures(string image_path, string image_name, int mutation) { void DescriptorManager::LoadMutationFeatures(string image_path, string image_name, int mutation) {
for (int i = 0; i < numDescriptors; i++) { for (int i = 0; i < numDescriptors; i++) {
//First check if we already have this information from the loaded cache //First check if we already have this information from the loaded cache
@@ -132,14 +127,13 @@ void DescriptorManager::LoadMutationFeatures(string image_path, string image_nam
} }
//Calculates all features, mutations and features of mutations. //Calculates all features, mutations and features of mutations.
//This is generally the first step required //Do this before anything else.
void DescriptorManager::Init() { void DescriptorManager::Init() {
LoadFromDisk(); LoadFromDisk();
int filecount = 0; int filecount = 0;
for (fs::directory_iterator itr(img_path); itr != fs::directory_iterator(); ++itr) { for (fs::directory_iterator itr(img_path); itr != fs::directory_iterator(); ++itr) {
if (!itr->path().has_extension()) continue; //skip directories and such if (!itr->path().has_extension()) continue; //skip directories and such
string image_name = itr->path().filename().generic_string(); string image_name = itr->path().filename().generic_string();
//Image* image = new Image;
string image_path = itr->path().string(); string image_path = itr->path().string();
{ //Progress bar { //Progress bar
filecount++; filecount++;
@@ -154,20 +148,15 @@ void DescriptorManager::Init() {
} }
if (current_image) delete current_image; if (current_image) delete current_image;
current_image = NULL; current_image = NULL;
//delete image;
SaveToDisk(); SaveToDisk();
} }
initialized = true;
} }
//Saves feature map to disk. //Saves feature map to disk.
//Makes it so that it can reload easily
void DescriptorManager::SaveToDisk() { void DescriptorManager::SaveToDisk() {
{ //Boost serialization { //Boost serialization
ofstream f("features.map", ios::binary); ofstream f("features.map", ios::binary);
//ofstream feature_cache_backup("features.map.bak", ios::binary);
//feature_cache_backup << feature_cache.rdbuf();
ar::binary_oarchive oa(f); ar::binary_oarchive oa(f);
oa << features; oa << features;
@@ -175,13 +164,6 @@ void DescriptorManager::SaveToDisk() {
ar::binary_oarchive oam(fm); ar::binary_oarchive oam(fm);
oam << mutatedFeatures; oam << mutatedFeatures;
} }
/*{ //YAS serialization
yas::file_ostream os("features.yas", yas::file_mode::file_trunc);
//const std::size_t flg = yas::binary|yas::file;
yas::binary_oarchive<yas::file_ostream, yas::file|yas::binary> oa(os);
oa & features;
//yas::save<yas::file|yas::binary>(image_name, features);
}*/
} }
//Loads saved feature maps from disk. //Loads saved feature maps from disk.
@@ -198,16 +180,13 @@ void DescriptorManager::LoadFromDisk() {
bim >> mutatedFeatures; bim >> mutatedFeatures;
} }
} }
{ //YAS
}
} }
//Sorts all base (unmutated) images in order of distance from the given image //Sorts all base (unmutated) images in order of distance from the given image
//After this function the distances array will be filled //After this function the distances array will be filled
void DescriptorManager::rankImages(string image_name, int method) { void DescriptorManager::rankImages(string image_name, int method) {
uint64_t target; uint64_t target;
if (features[method].count(image_name) && initialized) { //if we have image if (features[method].count(image_name)) { //Check if this image was properly initialized
target = features[method][image_name]; target = features[method][image_name];
} }
else { else {
@@ -226,7 +205,7 @@ void DescriptorManager::rankImages(string image_name, int method) {
//Assumes the distances array is filled with the normal distances //Assumes the distances array is filled with the normal distances
multiset<pair<uint64_t, string>> DescriptorManager::rankMutations(string image_name, int method) { multiset<pair<uint64_t, string>> DescriptorManager::rankMutations(string image_name, int method) {
uint64_t target; uint64_t target;
if (features[method].count(image_name) && initialized) { //this should always be the case if (features[method].count(image_name)) { //Check if this image was properly initialized
target = features[method][image_name]; target = features[method][image_name];
} }
@@ -240,22 +219,8 @@ multiset<pair<uint64_t, string>> DescriptorManager::rankMutations(string image_n
//upper_bound //upper_bound
} }
return local_distance; return local_distance;
/*
//cout << "..." << endl;
for (int i = 0; i < numMutations; i++) {
int j = 0;
for (std::multiset<pair<uint64_t, string>>::iterator it = local_distance.begin(); it != local_distance.end(); ++it) {
//cout << "hey " << endl;
if (it->second == mutators[i]->ToString()) {
cout << j << "th position: ";
cout << "(" << it->first << ", " << it->second << ")" << endl;
}
j++;
}
}*/
} }
//Needs to be called after Init().
//Takes all the calculated features and rankes //Takes all the calculated features and rankes
void DescriptorManager::runExperiments() { void DescriptorManager::runExperiments() {
fs::ofstream ofs; fs::ofstream ofs;
+5 -6
View File
@@ -56,18 +56,17 @@ public:
void outputMap(); void outputMap();
void outputRank(string imagename, int method); void outputRank(string imagename, int method);
private: private:
fs::path img_path;
int numImages;
static const int numDescriptors = 8; static const int numDescriptors = 8;
static const int numMutations = 8; static const int numMutations = 8;
//TODO: automagically update this? Descriptor* descriptor_types[numDescriptors];
Mutation* mutators[numMutations];
bool initialized = false;
int numImages;
Image* current_image = NULL; //for caching purposes Image* current_image = NULL; //for caching purposes
map<string, uint64_t> features[numDescriptors]; //array of maps that will hold the descriptors map<string, uint64_t> features[numDescriptors]; //array of maps that will hold the descriptors
map<string, uint64_t> mutatedFeatures[numDescriptors][numMutations]; map<string, uint64_t> mutatedFeatures[numDescriptors][numMutations];
multiset<pair<uint64_t, string> > distances; //multiset that stores the distances multiset<pair<uint64_t, string> > distances; //multiset that stores the distances
fs::path img_path; //where the images are
Descriptor* descriptor_types[numDescriptors];
Mutation* mutators[numMutations];
}; };
-8
View File
@@ -40,14 +40,6 @@ int main(int argc, char **argv) {
} }
InitializeMagick(*argv); InitializeMagick(*argv);
DescriptorManager* manager = new DescriptorManager("test"); DescriptorManager* manager = new DescriptorManager("test");
//smanager->generatePreviews(imagename);
//cout << "Intializing..." << endl;
manager->Init(); manager->Init();
//cout << endl;
//manager->outputMap();
//manager->outputRank(imagename, method);
//cout << "done!" << endl;
// manager->runExperiments();
return 0; return 0;
} }