#pragma once #include #include #include #include #include #include #include #include template auto read_database(std::string const & database_directory, bool output_files = false){ namespace fs = boost::filesystem; namespace ar = boost::archive; image_database db; auto const database_file = database_directory + "-" + db.fingerprint_name() + ".db"; if (!boost::filesystem::exists(database_file)){ fs::path const directory(database_directory); fs::directory_iterator eod; for(fs::directory_iterator it(directory); it != eod; ++it){ auto const path = it->path(); auto const ext = to_lower(path.extension().string()); if(ext != ".png" && ext != ".jpg" && ext != ".jpeg" && ext != ".gif") continue; if(output_files) std::cout << path << std::endl; db.add(path.string()); } std::ofstream file(database_file); ar::binary_oarchive archive(file); archive << db; } else { std::ifstream file(database_file); ar::binary_iarchive archive(file); archive >> db; } return db; }