Esempio n. 1
0
    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
Esempio n. 2
0
    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.")
Esempio n. 3
0
    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,
        )
Esempio n. 4
0
    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()
Esempio n. 5
0
 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])