def fill(self, class_id): """Fills internal structer with new training samples. Do not call directly. :param class_id: class identification """ # get training samples for i in range(len(self.sel_files)): row = self.sel_files[0] samples = self.all_files[row].samples feat = mfcc(samples, 16000, winlen=0.030, appendEnergy=False, VAD=simpleVAD) # add two symptoms from the middle self.X.append(feat[int(len(feat) / 2 - 1)]) self.y.append(class_id) self.X.append(feat[int(len(feat) / 2 + 1)]) self.y.append(class_id) # clear from the list del_iter = self.file_store.get_iter(Gtk.TreePath.new_from_indices([row])) self.file_store.remove(del_iter) del self.all_files[row] # print results if Classifier.new_training(self.X, self.y): self.status_label.set_text("{0} vzorků, {1} tříd".format(len(self.X), len(self.class_names))) else: self.status_label.set_text("Klasifikátor potřebuje víc tříd")
def __init__(self): self.builder = Gtk.Builder() self.builder.add_from_file("app.glade") self.builder.connect_signals(self) self.window = self.builder.get_object("window") self.file_store = self.builder.get_object("filestore") self.file_view = self.builder.get_object("fileview") self.status_label = self.builder.get_object("status") self.run_indicator = self.builder.get_object("running") self.audiofilter = self.builder.get_object("audiofilter") self.classcombo = self.builder.get_object("classcombo") self.aboutdialog = self.builder.get_object("aboutdialog") self.file_dialog = Gtk.FileChooserDialog(title="Otevřít", transient_for=self.window, action=Gtk.FileChooserAction.OPEN) self.file_dialog.add_buttons(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OPEN, Gtk.ResponseType.OK) self.file_dialog.set_default_response(Gtk.ResponseType.OK) self.file_dialog.set_select_multiple(True) if os.name != 'nt': self.audiofilter.set_name("Zvuk") self.file_dialog.add_filter(self.audiofilter) self.last_dir = None # all_files tuple of Files self.all_files = [] # sel_files: indexes to the all_files tuple self.sel_files = [] self.X = [] self.y = [] self.class_names = {} try: with open('dataset.pickle', 'rb') as f: (self.X, self.y, self.class_names) = pickle.load(f) for name in self.class_names.items(): self.classcombo.append(str(name[0]), name[1]) ok = Classifier.new_training(self.X, self.y) if ok: self.status_label.set_text("{0} vzorků, {1} tříd".format(len(self.X), len(self.class_names))) except IOError as e: pass self.window.show_all()