コード例 #1
0
class GUI:
    def __init__(self, master, search_path):
        self.search_path = search_path
        self.master = master
        self.searcher = Searcher()
        self.default_weights = self.searcher.get_weights()

        self.file_name = None
        self.result_image_frame = Frame(self.master)
        self.query_image_frame = Frame(self.master)

        top_frame = Frame(self.master)
        top_frame.pack()

        # Buttons
        topspace = Label(top_frame).grid(row=0, columnspan=2)
        self.browse_button = Button(top_frame,
                                    text=" Choose an image ",
                                    command=self.browse_query_image)
        self.browse_button.grid(row=1, column=1)
        self.search_button = Button(top_frame,
                                    text=" Search ",
                                    command=self.show_results_images,
                                    width=20,
                                    bd=3)
        self.search_button.grid(row=1, column=3)

        self.color_check = IntVar()
        self.word_check = IntVar()
        self.learning_check = IntVar()

        # check everything
        self.color_check.set(1)
        self.word_check.set(1)
        self.learning_check.set(1)

        color_checkbox = Checkbutton(top_frame,
                                     text="Color Histogram",
                                     variable=self.color_check,
                                     onvalue=1,
                                     offvalue=0,
                                     height=5)
        word_checkbox = Checkbutton(top_frame,
                                    text="Visual Words",
                                    variable=self.word_check,
                                    onvalue=1,
                                    offvalue=0,
                                    height=5)
        learning_checkbox = Checkbutton(top_frame,
                                        text="Deep Learning",
                                        variable=self.learning_check,
                                        onvalue=1,
                                        offvalue=0,
                                        height=5)

        color_checkbox.grid(row=2, column=1)
        word_checkbox.grid(row=2, column=2)
        learning_checkbox.grid(row=2, column=3)

        tag_label = Label(top_frame, text="Tags ")
        tag_label.grid(row=3, column=1)
        self.tag_box = Entry(top_frame)
        self.tag_box.grid(row=3, column=2)
        downspace = Label(top_frame).grid(row=4, columnspan=4)

        self.master.mainloop()

    def browse_query_image(self):
        try:
            self.query_image_frame.destroy()
            self.result_image_frame.destroy()
        except AttributeError:
            None

        self.query_image_frame = Frame(self.master)
        self.query_image_frame.pack()
        self.file_name = tkFileDialog.askopenfile(
            title='Choose an Image File').name

        # show query image
        image_file = Image.open(self.file_name)
        resized = image_file.resize((100, 100), Image.ANTIALIAS)
        im = ImageTk.PhotoImage(resized)
        image_label = Label(self.query_image_frame, image=im)
        image_label.pack()

        self.query_image_frame.mainloop()

    def show_results_images(self):
        try:
            self.result_image_frame.destroy()
        except AttributeError:
            None

        tags = self.tag_box.get()
        if tags == "":
            tags = []
            tag_check = 0
        else:
            tags = tags.split()
            tag_check = 1

        weights = get_weights(self.color_check.get(), self.word_check.get(),
                              self.learning_check.get(), tag_check)
        self.searcher.set_weights(weights)
        text_only = self.color_check.get() + self.word_check.get(
        ) + self.learning_check.get() == 0

        self.result_image_frame = Frame(self.master)
        self.result_image_frame.pack()

        # perform the search
        start = time.time()
        if text_only or self.file_name is None:
            try:
                self.query_image_frame.destroy()
            except AttributeError:
                None
            results = self.searcher.retrieve_by_tags(tags)
        else:
            results = self.searcher.retrieve_images(self.file_name, tags)
        end = time.time()
        print "Search time: %s" % str(end - start)

        # show result pictures
        image_count = 0
        for (score, image_id) in results:
            # load the result image and display it
            image_count += 1
            row, column = divmod(image_count - 1, DISPLAY_IMAGE_COLUMNS)
            im = Image.open(self.search_path + "/" + image_id)
            resized_image = im.resize((100, 100), Image.ANTIALIAS)
            tkimage = ImageTk.PhotoImage(resized_image)
            myvar = Label(self.result_image_frame, image=tkimage)
            myvar.image = tkimage
            myvar.grid(row=row, column=column)

        self.result_image_frame.mainloop()