19 delete this->interface_config;
30 GtkWidget *
title = gtk_label_new(
"");
31 gtk_label_set_markup(GTK_LABEL(title),
view->
getString(
"TrainingTitle"));
33 TabAdd(gtk_hseparator_new());
37 this->interface_box = gtk_vbox_new(
false, 0);
38 this->updating_view =
false;
39 this->training_stopped_manually =
false;
46 btn_start = gtk_button_new_with_label(
view->
getString(
"TrainingStr1"));
47 g_signal_connect(G_OBJECT(btn_start),
49 G_CALLBACK(CB_startTraining),
52 btn_stop = gtk_button_new_with_label(
view->
getString(
"TrainingStr2"));
53 gtk_widget_set_sensitive(btn_stop,
false);
54 g_signal_connect(G_OBJECT(btn_stop),
56 G_CALLBACK(CB_stopTraining),
59 spin_classes = gtk_spin_button_new_with_range(2,50,1);
60 gtk_widget_set_size_request(spin_classes,40,25);
62 g_signal_connect(G_OBJECT(spin_classes),
64 G_CALLBACK(CB_changeNumClasses),
67 spin_sequences = gtk_spin_button_new_with_range(1,50,1);
68 gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_sequences),3);
69 gtk_widget_set_size_request(spin_sequences,40,25);
70 g_signal_connect(G_OBJECT(spin_sequences),
72 G_CALLBACK(CB_changeNumSequences),
75 spin_sequence_length = gtk_spin_button_new_with_range(1,50,1);
76 gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_sequence_length),3);
77 gtk_widget_set_size_request(spin_sequence_length,40,25);
78 g_signal_connect(G_OBJECT(spin_sequence_length),
80 G_CALLBACK(CB_changeSequenceLength),
83 spin_pause_length = gtk_spin_button_new_with_range(1,50,1);
84 gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_pause_length),3);
85 gtk_widget_set_size_request(spin_pause_length,40,25);
86 g_signal_connect(G_OBJECT(spin_pause_length),
88 G_CALLBACK(CB_changePauseLength),
91 btn_load = gtk_button_new_with_label(
view->
getString(
"TrainingStr3"));
92 g_signal_connect(G_OBJECT(btn_load),
94 G_CALLBACK(CB_loadData),
97 btn_save = gtk_button_new_with_label(
view->
getString(
"TrainingStr4"));
98 g_signal_connect(G_OBJECT(btn_save),
100 G_CALLBACK(CB_saveData),
104 info_frame1 = gtk_viewport_new(NULL,NULL);
106 label_info = gtk_label_new(
"");
108 info_frame2 = gtk_viewport_new(NULL,NULL);
110 label_data = gtk_label_new(
"");
114 controls_hbox1 = gtk_hbox_new(
false,0);
115 controls_hbox2 = gtk_hbox_new(
false,0);
116 controls_hbox3 = gtk_hbox_new(
false,0);
117 controls_hbox4 = gtk_hbox_new(
false,0);
118 GtkWidget * btn_box1 = gtk_hbutton_box_new();
119 GtkWidget * btn_box2 = gtk_hbutton_box_new();
120 GtkWidget * btn_box3 = gtk_hbutton_box_new();
121 GtkWidget * btn_box4 = gtk_hbutton_box_new();
122 gtk_button_box_set_layout(GTK_BUTTON_BOX(btn_box1),GTK_BUTTONBOX_START);
123 gtk_button_box_set_layout(GTK_BUTTON_BOX(btn_box2),GTK_BUTTONBOX_START);
124 gtk_button_box_set_layout(GTK_BUTTON_BOX(btn_box3),GTK_BUTTONBOX_START);
125 gtk_button_box_set_layout(GTK_BUTTON_BOX(btn_box4),GTK_BUTTONBOX_START);
131 gtk_box_pack_start(GTK_BOX(btn_box1),btn_start,
false,
false,2);
132 gtk_box_pack_start(GTK_BOX(btn_box1),btn_stop,
false,
false,2);
133 gtk_box_pack_start(GTK_BOX(controls_hbox1),btn_box1,
false,
false,2);
135 gtk_box_pack_end(GTK_BOX(controls_hbox1),source_combo,
false,
true,2);
136 gtk_box_pack_end(GTK_BOX(controls_hbox1),
140 gtk_box_pack_start(GTK_BOX(controls_hbox2),spin_classes,
false,
false,2);
141 gtk_box_pack_start(GTK_BOX(controls_hbox2),
144 gtk_box_pack_start(GTK_BOX(controls_hbox2),spin_sequences,
false,
false,2);
145 gtk_box_pack_start(GTK_BOX(controls_hbox2),
148 gtk_box_pack_start(GTK_BOX(controls_hbox2),
149 spin_sequence_length,
false,
false,2);
150 gtk_box_pack_start(GTK_BOX(controls_hbox2),
153 gtk_box_pack_start(GTK_BOX(controls_hbox2),
154 spin_pause_length,
false,
false,2);
155 gtk_box_pack_start(GTK_BOX(controls_hbox2),
158 gtk_container_add(GTK_CONTAINER(info_frame1),label_info);
160 gtk_box_pack_start(GTK_BOX(btn_box3),btn_load,
false,
false,2);
161 gtk_box_pack_start(GTK_BOX(btn_box3),btn_save,
false,
false,2);
162 gtk_box_pack_start(GTK_BOX(controls_hbox3),btn_box3,
false,
false,2);
163 gtk_container_add(GTK_CONTAINER(info_frame2),label_data);
168 check_classification_feedback =
169 gtk_check_button_new_with_label(
"Classification Feedback");
170 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_classification_feedback),
172 gtk_box_pack_start(GTK_BOX(btn_box4),check_classification_feedback,
174 g_signal_connect(G_OBJECT(check_classification_feedback),
176 G_CALLBACK(CB_toggleClassificationFeedback),
179 gtk_box_pack_start(GTK_BOX(controls_hbox4),btn_box4,
false,
false,2);
183 controls_box = gtk_vbox_new(
false,0);
184 gtk_box_pack_start(GTK_BOX(controls_box), controls_hbox1,
true,
true, 2);
185 gtk_box_pack_start(GTK_BOX(controls_box), controls_hbox2,
true,
true, 2);
186 gtk_box_pack_start(GTK_BOX(controls_box), info_frame1,
true,
true, 4);
187 gtk_box_pack_start(GTK_BOX(controls_box), controls_hbox3,
true,
true, 2);
188 gtk_box_pack_start(GTK_BOX(controls_box), info_frame2,
true,
true, 4);
189 gtk_box_pack_start(GTK_BOX(controls_box), controls_hbox4,
true,
true, 2);
200 gtk_box_pack_end(GTK_BOX(controls_hbox3),this->interface_combo,
false,
false,0);
201 this->btn_interface_cfg = this->interface_config->
getButton();
202 gtk_box_pack_end(GTK_BOX(controls_hbox3),btn_interface_cfg,
false,
false,0);
203 gtk_widget_show_all(controls_hbox3);
205 this->
interface = NULL;
208 gtk_widget_set_size_request(controls_box,700,-1);
210 TabAdd(interface_box,
true,
true,0);
219 this->updating_view =
true;
227 gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_classes),num_classes);
228 gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_sequences),num_sequences);
229 gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_sequence_length),
231 gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_pause_length),pause_length);
232 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_classification_feedback),
268 text =
"<small>" + text +
"</small>";
269 gtk_label_set_markup(GTK_LABEL(this->label_data),
280 if(new_interface != this->interface)
282 if(this->interface != NULL)
284 this->interface->
hide();
285 gtk_container_remove(GTK_CONTAINER(this->interface_box),
289 this->
interface = new_interface;
290 if(this->interface != NULL)
292 gtk_box_pack_start(GTK_BOX(this->interface_box),
297 this->interface->
show();
301 this->updating_view =
false;
309 void TabTraining::updateInterface()
313 int n = int(gtk_spin_button_get_value(GTK_SPIN_BUTTON(spin_classes)));
321 void TabTraining::updateTextInfo()
328 int total_data_time = num_classes * num_sequences * sequence_length;
329 int total_time = total_data_time + pause_length * num_sequences * num_classes;
331 int minutes = total_data_time/60;
332 int seconds = total_data_time % 60;
333 int minutes2 = total_time/60;
334 int seconds2 = total_time % 60;
346 gtk_label_set_markup(GTK_LABEL(label_info),ss.str().c_str());
347 gtk_widget_set_size_request(label_info,300,-1);
353 gint TabTraining::timedUpdateInterface(gpointer parent)
363 if(!tab->training_stopped_manually)
365 if(tab->interface!=NULL)
367 tab->enableControls();
377 if(!training_classifier)
382 if(training_classifier)
415 if(classification_feedback)
418 std::vector<double> std_props =
420 ublas::vector<double> proportions =
422 if(proportions.size() > 0)
429 if(tab->interface==NULL)
431 tab->enableControls();
439 if(tab->interface!=NULL)
441 tab->enableControls();
455 void TabTraining::disableControls()
457 gtk_widget_set_sensitive(btn_stop,
true);
458 gtk_widget_set_sensitive(btn_start,
false);
459 gtk_widget_set_sensitive(source_combo,
false);
460 gtk_widget_hide(controls_hbox2);
461 gtk_widget_hide(controls_hbox3);
462 gtk_widget_hide(controls_hbox4);
463 gtk_widget_hide(info_frame2);
466 void TabTraining::enableControls()
468 gtk_widget_set_sensitive(btn_stop,
false);
469 gtk_widget_set_sensitive(btn_start,
true);
470 gtk_widget_set_sensitive(source_combo,
true);
471 gtk_widget_show(controls_hbox2);
472 gtk_widget_show(controls_hbox3);
473 gtk_widget_show(controls_hbox4);
474 gtk_widget_show(info_frame2);
489 this->CB_stopTraining(NULL,
this);
490 if(this->interface != NULL)
492 this->interface->
hide();
493 gtk_container_remove(GTK_CONTAINER(this->interface_box),this->interface->
getContainer());
495 this->
interface = NULL;
496 this->enableControls();
506 void TabTraining::CB_startTraining(GtkWidget *w, gpointer data)
516 string msg = view->
getString(
"TrainingStr24") + string(e.what()) +
")";
520 tab->training_stopped_manually =
false;
521 tab->disableControls();
522 g_timeout_add(50, timedUpdateInterface, tab);
525 void TabTraining::CB_stopTraining(GtkWidget *w, gpointer data)
529 if(tab->interface != NULL)
531 tab->training_stopped_manually =
true;
534 void TabTraining::CB_changeNumClasses(GtkWidget *w, gpointer data)
537 if(!tab->updating_view)
539 int n = int(gtk_spin_button_get_value(GTK_SPIN_BUTTON(tab->spin_classes)));
541 tab->updateInterface();
542 tab->updateTextInfo();
546 void TabTraining::CB_changeNumSequences(GtkWidget *w, gpointer data)
549 if(!tab->updating_view)
551 int n = int(gtk_spin_button_get_value(GTK_SPIN_BUTTON(tab->spin_sequences)));
553 tab->updateTextInfo();
556 void TabTraining::CB_changeSequenceLength(GtkWidget *w, gpointer data)
559 if(!tab->updating_view)
561 int n = int(gtk_spin_button_get_value(GTK_SPIN_BUTTON(tab->spin_sequence_length)));
563 tab->updateTextInfo();
568 void TabTraining::CB_changePauseLength(GtkWidget *w, gpointer data)
571 if(!tab->updating_view)
573 int n = int(gtk_spin_button_get_value(GTK_SPIN_BUTTON(tab->spin_pause_length)));
575 tab->updateTextInfo();
581 void TabTraining::CB_loadData(GtkWidget *w, gpointer data)
589 if(!
WidgetUtils::Confirm(
"Replace Data?",
"You already have training data loaded. If you load training data, any unsaved training data will be lost."))
600 void TabTraining::CB_saveData(GtkWidget *w, gpointer data)
615 string msg =
"Failed to save training data: " + string(e.what());
631 void TabTraining::CB_toggleClassificationFeedback(GtkWidget *w, gpointer data)
635 if(!tab->updating_view)
638 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(tab->check_classification_feedback));