| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| #include "exe/database.h" |
|
|
| #include "base/database.h" |
| #include "util/misc.h" |
| #include "util/option_manager.h" |
|
|
| namespace colmap { |
|
|
| int RunDatabaseCleaner(int argc, char** argv) { |
| std::string type; |
|
|
| OptionManager options; |
| options.AddRequiredOption("type", &type, "{all, images, features, matches}"); |
| options.AddDatabaseOptions(); |
| options.Parse(argc, argv); |
|
|
| StringToLower(&type); |
| Database database(*options.database_path); |
| PrintHeading1("Clearing database"); |
| { |
| DatabaseTransaction transaction(&database); |
| if (type == "all") { |
| PrintHeading2("Clearing all tables"); |
| database.ClearAllTables(); |
| } else if (type == "images") { |
| PrintHeading2("Clearing Images and all dependent tables"); |
| database.ClearImages(); |
| database.ClearTwoViewGeometries(); |
| database.ClearMatches(); |
| } else if (type == "features") { |
| PrintHeading2("Clearing image features and matches"); |
| database.ClearDescriptors(); |
| database.ClearKeypoints(); |
| database.ClearTwoViewGeometries(); |
| database.ClearMatches(); |
| } else if (type == "matches") { |
| PrintHeading2("Clearing image matches"); |
| database.ClearTwoViewGeometries(); |
| database.ClearMatches(); |
| } else { |
| std::cout << "ERROR: Invalid cleanup type; no changes in database" |
| << std::endl; |
| return EXIT_FAILURE; |
| } |
| } |
|
|
| return EXIT_SUCCESS; |
| } |
|
|
| int RunDatabaseCreator(int argc, char** argv) { |
| OptionManager options; |
| options.AddDatabaseOptions(); |
| options.Parse(argc, argv); |
|
|
| Database database(*options.database_path); |
|
|
| return EXIT_SUCCESS; |
| } |
|
|
| int RunDatabaseMerger(int argc, char** argv) { |
| std::string database_path1; |
| std::string database_path2; |
| std::string merged_database_path; |
|
|
| OptionManager options; |
| options.AddRequiredOption("database_path1", &database_path1); |
| options.AddRequiredOption("database_path2", &database_path2); |
| options.AddRequiredOption("merged_database_path", &merged_database_path); |
| options.Parse(argc, argv); |
|
|
| if (ExistsFile(merged_database_path)) { |
| std::cout << "ERROR: Merged database file must not exist." << std::endl; |
| return EXIT_FAILURE; |
| } |
|
|
| Database database1(database_path1); |
| Database database2(database_path2); |
| Database merged_database(merged_database_path); |
| Database::Merge(database1, database2, &merged_database); |
|
|
| return EXIT_SUCCESS; |
| } |
|
|
| } |
|
|