def _populate_experiment_table(self): self.treeview.delete(*self.treeview.get_children()) if not self.experiments: return # Populate the table with saved experiments. for exp in self.experiments: n_imgs = -1 if not os.path.exists(exp.img_path): print("Can't find this path...", exp.img_path) messagebox.showwarning( "Experiment problem", "Can't find directory {} for experiment {}.".format( exp.img_path, exp.name)) exp.status = "Error" else: imgs = get_images_from_dir(exp.img_path) n_imgs = len(imgs) if not n_imgs: messagebox.showwarning( "Experiment problem", "Problem with images for experiment {}.".format( exp.name)) exp.status = "Error" values = [exp.name, exp.species, exp.panel_n, n_imgs, exp.status] e_item = self.treeview.insert('', 'end', values=values) self.exp_treeview_ids[exp.eid] = e_item
def _save_masks_function(exp, sev_dir): scatter_f = os.path.join(exp.get_results_dir(), "panel_seed_idxs.json") if not os.path.exists(scatter_f): return with open(scatter_f) as fh: panel_seed_idxs = json.load(fh) exp_masks_dir_frame = os.path.join(exp.get_masks_dir(), "frame_%d") for idx in range(exp.start_img, len(get_images_from_dir(exp.img_path))): masks = np.load(exp_masks_dir_frame % idx) for curr_panel, mask in enumerate(masks): fig = plt.figure() ax = fig.add_subplot(111) ax.imshow(mask) m, n = mask.shape ys, xs = [], [] for i, y, x in panel_seed_idxs[str(curr_panel)]: if i == -1: continue if idx >= i: ys.append(y) xs.append(x) if len(ys) and len(xs): ax.scatter(xs, ys, c='r', s=40) ax.set_xlim(0, n) ax.set_ylim(m, 0) fig.canvas.draw() fig.savefig( os.path.join( sev_dir, 'panel_%d_frame_%d.jpg' % (curr_panel, idx))) plt.close(fig) messagebox.showinfo("", "Masks Finished Saving.")
def __init__(self, exp): Tkinter.Toplevel.__init__(self) self.title("View masks") self.iconbitmap('logo.ico') self.exp = exp self.imgs = get_images_from_dir(self.exp.img_path) self.exp_masks_dir = pj(self.exp.exp_path, "masks") self.exp_masks_dir_frame = pj(self.exp_masks_dir, "frame_%d.npy") self.exp_results_dir = pj(self.exp.exp_path, "results") self.showing_scatter = False self.panel_seed_idxs = None self.scatter = None scatter_f = pj(self.exp_results_dir, "panel_seed_idxs.json") if os.path.exists(scatter_f): with open(scatter_f) as fh: self.panel_seed_idxs = json.load(fh) self.showing_scatter = True self.num_images = len(self.imgs) self.curr_panel = 0 self.pan_btns = [] self.playing = False self.fig = plt.Figure() self.ax = self.fig.add_subplot(111) for tic in self.ax.xaxis.get_major_ticks(): tic.tick1On = tic.tick2On = False tic.label1On = tic.label2On = False for tic in self.ax.yaxis.get_major_ticks(): tic.tick1On = tic.tick2On = False tic.label1On = tic.label2On = False self.tk_fig_canvas = FigureCanvasTkAgg(self.fig, master=self) self.tk_fig_canvas.draw() self.tk_fig_canvas_widget = self.tk_fig_canvas.get_tk_widget() self.fn_label_var = Tkinter.StringVar() self.fn_label_var.set("") self.filename_label = Tkinter.Label(master=self, textvariable=self.fn_label_var) #img = imread(img_path) self.curr_img = self.exp.start_img print(self.curr_img) self.img_plot = self.ax.imshow(self._get_image(self.curr_img)) self.panel_frame = Tkinter.Frame(self) self._add_panel_selectors() self.prev_button = Tkinter.Button(master=self, text="Previous", command=self._prev_click) self.play_stop_button = Tkinter.Button(master=self, text="Start", command=self._play_stop_click) self.next_button = Tkinter.Button(master=self, text="Next", command=self._next_click) self.filename_label.grid(in_=self, column=1, row=0, columnspan=3, sticky='news') self.tk_fig_canvas_widget.grid(in_=self, column=1, row=1, columnspan=3, sticky='news') self.prev_button.grid( in_=self, column=1, row=2, #sticky=' ) self.play_stop_button.grid( in_=self, column=2, row=2, ) self.next_button.grid( in_=self, column=3, row=2, ) self.panel_frame.grid( in_=self, column=4, row=1, rowspan=3, )
def _add(self): name = self.name_entry.get() dir_ = self.dir_entry.get() panel_n = self.panel_num_entry.get() seeds_row_n = self.seeds_per_panel_row_entry.get() seeds_col_n = self.seeds_per_panel_col_entry.get() species = self.species_var.get() bg_remover = self.removers_var.get() start_img = self.start_image_entry.get() end_img = self.end_image_entry.get() if len(end_img) < 1: end_img = '-1' if len(start_img) < 1: start_img = '-1' use_colour = self.use_colour.get() use_delta = self.use_delta.get() pre_conditions = [ (len(name) < 1, "Experiment name is too short"), (len(dir_) < 1, "Need to enter a directory"), (len(panel_n) < 1, "Need to enter the number of panels"), (len(seeds_col_n) < 1, "Need to enter the number of seeds per column"), (len(seeds_row_n) < 1, "Need to enter the number of seeds per row"), (len(start_img) < 1, "Need to enter start image index"), (len(end_img) < 1, "Need to enter end image index") ] if not self._warning_conditions(pre_conditions): self.app.lift() return post_conditions = [ (self.db.get(where("name") == name) is not None, "Experiment with this name already exists"), (not os.path.exists(dir_), "Cannot find experiment directory"), (len(os.listdir(dir_)) < 1, "Directory does not contain any files"), (not self._is_int(panel_n), "Panel value needs to be an integer"), (not self._is_int(seeds_row_n), "Seeds row value needs to be an integer"), (not self._is_int(seeds_col_n), "Seeds column value needs to be an integer"), (not self._is_int(start_img), "Start image index needs to be an integer"), (not self._is_int(end_img), "End image index needs to be an integer") ] if not self._warning_conditions(post_conditions): self.app.lift() return panel_n = int(panel_n) seeds_col_n = int(seeds_col_n) seeds_row_n = int(seeds_row_n) start_img = int(start_img) end_img = int(end_img) imgs = get_images_from_dir(dir_) if end_img == -1: end_img = len(imgs) if start_img == -1: start_img = 0 if not imgs: messagebox.showwarning("Warning", "Cannot find images in directory: {}".format(dir_)) self.app.lift() return exp_path = "./data/experiments/%s" % (slugify(name)) exp = Experiment(name=name, img_path=dir_, panel_n=panel_n, seeds_col_n=seeds_col_n, seeds_row_n=seeds_row_n, species=species, exp_path=exp_path, start_img=start_img, end_img=end_img, bg_remover=bg_remover, use_colour=use_colour, use_delta=use_delta, panel_labelled=False, _yuv_ranges_set=False, _status="") exp.create_directories() exp.insert_into_database() self.app.experiments.append(exp) self.destroy() self.app._populate_experiment_table() self.app.lift()
def _view_images(self): exp = self._get_exp() imgs = get_images_from_dir(exp.img_path) self.image_viewer = ImageViewer(exp.img_path, imgs[exp.start_img:exp.end_img])