Commit c7311392 authored by Davis King's avatar Davis King

Added the start of a GUI to edit the image metadata files.

parent 8e1f4d4c
......@@ -16,6 +16,8 @@ ADD_EXECUTABLE(${target_name}
src/main.cpp
src/image_dataset_metadata.h
src/image_dataset_metadata.cpp
src/metadata_editor.h
src/metadata_editor.cpp
)
......
#include "image_dataset_metadata.h"
#include "metadata_editor.h"
#include <iostream>
#include <fstream>
......@@ -113,7 +114,7 @@ int main(int argc, char** argv)
if (parser.option("h"))
{
cout << "Usage: imglab [options] <image files/directories or XML file list>\n";
cout << "Usage: imglab [options] <image files/directories or XML file>\n";
parser.print_options(cout);
cout << endl << endl;
return EXIT_SUCCESS;
......@@ -127,9 +128,8 @@ int main(int argc, char** argv)
if (parser.number_of_arguments() == 1)
{
dlib::image_dataset_metadata::dataset meta;
load_image_dataset_metadata(meta, parser[0]);
save_image_dataset_metadata(meta, "out.xml");
metadata_editor editor(parser[0]);
editor.wait_until_closed();
}
}
catch (exception& e)
......
// Copyright (C) 2011 Davis E. King (davis@dlib.net)
// License: Boost Software License See LICENSE.txt for the full license.
#include "metadata_editor.h"
#include <dlib/array.h>
#include <dlib/queue.h>
using namespace std;
using namespace dlib;
// ----------------------------------------------------------------------------------------
metadata_editor::
metadata_editor(
const std::string& filename_
) :
filename(filename_),
mbar(*this),
lb_images(*this),
image_pos(0)
{
load_image_dataset_metadata(metadata, filename);
dlib::array<std::string>::expand_1a files;
files.resize(metadata.images.size());
for (unsigned long i = 0; i < metadata.images.size(); ++i)
{
files[i] = metadata.images[i].filename;
}
lb_images.load(files);
lb_images.enable_multiple_select();
select_image(0);
lb_images.set_click_handler(*this, &metadata_editor::on_lb_images_clicked);
mbar.set_number_of_menus(1);
mbar.set_menu_name(0,"File",'F');
mbar.menu(0).add_menu_item(menu_item_text("Save",*this,&metadata_editor::file_save,'S'));
mbar.menu(0).add_menu_item(menu_item_text("Save As",*this,&metadata_editor::file_save_as,'A'));
mbar.menu(0).add_menu_item(menu_item_separator());
mbar.menu(0).add_menu_item(menu_item_text("Remove Selected Images",*this,&metadata_editor::remove_selected_images,'R'));
mbar.menu(0).add_menu_item(menu_item_separator());
mbar.menu(0).add_menu_item(menu_item_text("Quit",static_cast<base_window&>(*this),&drawable_window::close_window,'Q'));
// set the size of this window
set_size(430,380);
on_window_resized();
set_title("Image Dataset Metadata Editor");
show();
}
// ----------------------------------------------------------------------------------------
metadata_editor::
~metadata_editor(
)
{
close_window();
}
// ----------------------------------------------------------------------------------------
void metadata_editor::
file_save()
{
save_metadata_to_file(filename);
}
// ----------------------------------------------------------------------------------------
void metadata_editor::
save_metadata_to_file (
const std::string& file
)
{
try
{
save_image_dataset_metadata(metadata, file);
}
catch (dlib::error& e)
{
message_box("Error saving file", e.what());
}
}
// ----------------------------------------------------------------------------------------
void metadata_editor::
file_save_as()
{
save_file_box(*this, &metadata_editor::save_metadata_to_file);
}
// ----------------------------------------------------------------------------------------
void metadata_editor::
remove_selected_images()
{
}
// ----------------------------------------------------------------------------------------
void metadata_editor::
on_window_resized(
)
{
drawable_window::on_window_resized();
unsigned long width, height;
get_size(width, height);
lb_images.set_pos(0,mbar.bottom()+1);
lb_images.set_size(150, height - mbar.height());
}
// ----------------------------------------------------------------------------------------
void metadata_editor::
on_keydown (
unsigned long key,
bool is_printable,
unsigned long state
)
{
drawable_window::on_keydown(key, is_printable, state);
if (is_printable)
return;
if (key == base_window::KEY_UP)
{
select_image(image_pos-1);
}
else if (key == base_window::KEY_DOWN)
{
select_image(image_pos+1);
}
}
// ----------------------------------------------------------------------------------------
void metadata_editor::
select_image(
unsigned long idx
)
{
if (idx < lb_images.size())
{
// unselect all currently selected images
dlib::queue<unsigned long>::kernel_1a list;
lb_images.get_selected(list);
list.reset();
while (list.move_next())
{
lb_images.unselect(list.element());
}
lb_images.select(idx);
image_pos = idx;
}
}
// ----------------------------------------------------------------------------------------
void metadata_editor::
on_lb_images_clicked(
unsigned long idx
)
{
image_pos = idx;
}
// ----------------------------------------------------------------------------------------
// Copyright (C) 2011 Davis E. King (davis@dlib.net)
// License: Boost Software License See LICENSE.txt for the full license.
#ifndef DLIB_METADATA_EdITOR_H__
#define DLIB_METADATA_EdITOR_H__
#include <dlib/gui_widgets.h>
#include "image_dataset_metadata.h"
// ----------------------------------------------------------------------------------------
class metadata_editor : public dlib::drawable_window
{
public:
metadata_editor(
const std::string& filename_
);
~metadata_editor();
private:
void file_save();
void file_save_as();
void remove_selected_images();
virtual void on_window_resized();
virtual void on_keydown (
unsigned long key,
bool is_printable,
unsigned long state
);
void on_lb_images_clicked(unsigned long idx);
void select_image(unsigned long idx);
void save_metadata_to_file (const std::string& file);
std::string filename;
dlib::image_dataset_metadata::dataset metadata;
dlib::menu_bar mbar;
dlib::list_box lb_images;
unsigned long image_pos;
};
// ----------------------------------------------------------------------------------------
#endif // DLIB_METADATA_EdITOR_H__
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