def upload(event=None):
     global image_preview, image_preview01, image_preview02, image_preview03
     print('Uploads image')
     path = "/home/pi/DC-Box/leaf_upload.png"
     path_canny = "/home/pi/DC-Box/leaf_canny.png"
     path_gray = "/home/pi/DC-Box/leaf_gray.png"
     path_background = "/home/pi/DC-Box/leaf_background.png"
     
     filename = filedialog.askopenfilename(initialdir = "/home/pi/",title = "Select file",filetypes = (("jpeg files","*.jpg"),("png files","*.png"),("all files","*.*")))
     image_upload = filename
     upload(image_upload, path)
     canny(image_upload, path_canny)
     gray(image_upload, path_gray)
     background(image_upload, path_background)
     
     image_preview = ImageTk.PhotoImage(Image.open("leaf_upload.png"))
     image_panel01 = tk.Label(previewimageframe, image = image_preview)
     image_panel01.grid(column=0, row=2, sticky="W")
     
     image_preview01 = ImageTk.PhotoImage(Image.open("/home/pi/DC-Box/leaf_canny.png"))
     image_panel01 = tk.Label(section04, image = image_preview01)
     image_panel01.grid(column=0, row=1, sticky="W")
     
     image_preview02 = ImageTk.PhotoImage(Image.open("/home/pi/DC-Box/leaf_gray.png"))
     image_panel02 = tk.Label(section04, image = image_preview02)
     image_panel02.grid(column=1, row=1, sticky="W")
     
     image_preview03 = ImageTk.PhotoImage(Image.open("/home/pi/DC-Box/leaf_background.png"))
     image_panel03 = tk.Label(section04, image = image_preview03)
     image_panel03.grid(column=2, row=1, sticky="W")   
 def preview(self):
     global image_preview, image_preview01, image_preview02, image_preview03
     print('Save Preview Image')
     path = "leaf_preview.png"
     path_canny = "/home/pi/DC-Box/leaf_canny.png"
     path_gray = "/home/pi/DC-Box/leaf_gray.png"
     path_background = "/home/pi/DC-Box/leaf_background.png"
     
     preview_image(path)
     
     image_preview = ImageTk.PhotoImage(Image.open("leaf_preview.png"))
     image_panel01 = tk.Label(previewimageframe, image = image_preview)
     image_panel01.grid(column=0, row=2, sticky="W")
     
     canny(path, path_canny)
     gray(path, path_gray)
     background(path, path_background)
     
     image_preview01 = ImageTk.PhotoImage(Image.open("/home/pi/DC-Box/leaf_canny.png"))
     image_panel01 = tk.Label(section04, image = image_preview01)
     image_panel01.grid(column=0, row=1, sticky="W")
     
     image_preview02 = ImageTk.PhotoImage(Image.open("/home/pi/DC-Box/leaf_gray.png"))
     image_panel02 = tk.Label(section04, image = image_preview02)
     image_panel02.grid(column=1, row=1, sticky="W")
     
     image_preview03 = ImageTk.PhotoImage(Image.open("/home/pi/DC-Box/leaf_background.png"))
     image_panel03 = tk.Label(section04, image = image_preview03)
     image_panel03.grid(column=2, row=1, sticky="W")
    def update_images(self, image):
        self.image_preview = ImageTk.PhotoImage(Image.fromarray(image))
        self.image_panel01.configure(image=self.image_preview)

        self.image_livepreview = ImageTk.PhotoImage(Image.fromarray(image))
        self.image_panel02.configure(image=self.image_livepreview)

        self.image_canny = ImageTk.PhotoImage(
            Image.fromarray(canny(self.current_image_path, "./canny.png")))
        self.image_panel03.configure(image=self.image_canny)

        self.image_gray = ImageTk.PhotoImage(
            Image.fromarray(gray(self.current_image_path, "./gray.png")))
        self.image_panel04.configure(image=self.image_gray)

        self.image_bg = ImageTk.PhotoImage(
            Image.fromarray(
                background(self.current_image_path, "./background.png")))
        self.image_panel05.configure(image=self.image_bg)

        self.image_detection = ImageTk.PhotoImage(Image.fromarray(image))
        self.image_panel06.configure(image=self.image_detection)

        self.image_classification = ImageTk.PhotoImage(Image.fromarray(image))
        self.image_panel07.configure(image=self.image_classification)

        self.image_segmentation = ImageTk.PhotoImage(Image.fromarray(image))
        self.image_panel08.configure(image=self.image_segmentation)

        self.image_bb = ImageTk.PhotoImage(
            Image.fromarray(
                boundingbox(self.current_image_path, "./boundingbox.png")))
        self.image_panel09.configure(image=self.image_bb)
    def __init__(self, classifier, SegmentationDetector, imagepath):
        #Tktiner
        root = tk.Tk()
        root.geometry('1200x1000+0+0')
        root.title("DC-Box")

        self.root = root
        self.classification_text = tk.StringVar(root)
        self.classification_text.set('\nClassification:\n\n')
        self.classifier = classifier

        self.segmentation_text = tk.StringVar(root)
        self.segmentation_text.set('\nSegmentation:\n\n')
        self.segmentationDetector = segmentationDetector

        self.detection_text = tk.StringVar(root)
        self.detection_text.set('\nDetection:\nBounding Box: xyz')

        self.livepreview_text = tk.StringVar(root)
        self.livepreview_text.set('Live-Preview')
        #local variables for data exchange
        self.current_image_path = imagepath
        self.thread = None
        self.thread_stop = True

        #Frames für die GUI
        topframe = tk.Frame(root, width=1600, height=50, bg="blue")
        topframe.grid(row=0, column=0, padx=10, pady=2)

        section01 = tk.Frame(root)
        section01.grid(row=1, column=0, padx=10, pady=2, sticky="W")

        previewframe = tk.Frame(root)
        previewframe.grid(row=2, column=0, padx=10, pady=2, sticky="W")
        previewimageframe = tk.Frame(root)
        previewimageframe.grid(row=3, column=0, padx=10, pady=2, sticky="W")

        section04 = tk.Frame(root)
        section04.grid(row=4, column=0, padx=10, pady=2, sticky="W")

        dcframe = tk.Frame(root)
        dcframe.grid(row=6, column=0, padx=10, pady=2, sticky="W")
        dcimageframe = tk.Frame(root)
        dcimageframe.grid(row=7, column=0, padx=10, pady=2, sticky="W")
        #Head
        head_text = tk.Label(topframe, font=('arial', 28), text='DC-Box').grid(
            row=0,
            column=1,
        )

        # Section 1
        section01_heading = tk.Label(section01,
                                     font=('arial', 16),
                                     text='Settings').grid(column=0,
                                                           row=0,
                                                           sticky="W")
        project_text = tk.Label(section01,
                                font=('arial', 12),
                                text='Project:  ').grid(column=0,
                                                        row=1,
                                                        sticky="W")
        #project =["Leafs"]

        f = open("program/project.txt", "r")
        project = []
        for line in f:
            project.append(line.strip())
        f.close()

        bt_new_project = tk.Button(section01,
                                   padx=1,
                                   bd=1,
                                   text="New",
                                   fg="blue",
                                   command=self.newproject)
        bt_new_project.grid(row=1, column=2, padx=5, sticky="W")

        self.project_input = ttk.Combobox(section01, values=project, width=40)
        #new
        #self.project_input.current(0)
        self.project_input.grid(column=1, row=1, pady=5)

        imagesize_text = tk.Label(section01,
                                  font=('arial', 12),
                                  text='Image Size:  ').grid(column=0,
                                                             row=2,
                                                             sticky="W")
        imagesize = ["224x224"]
        imagesize_input = ttk.Combobox(section01, values=imagesize, width=40)
        imagesize_input.current(0)
        imagesize_input.grid(column=1, row=2, pady=5)
        #new
        bt_new_imagesize = tk.Button(section01,
                                     padx=1,
                                     bd=1,
                                     text="New",
                                     fg="blue",
                                     command=self.newimagesize)
        bt_new_imagesize.grid(row=2, column=2, padx=5, sticky="W")

        label_text = tk.Label(section01, font=('arial', 12),
                              text='Label:  ').grid(column=0,
                                                    row=3,
                                                    sticky="W")
        #label=["","Abies", "Acer", "Betula"]

        labelname = "program/label.txt"
        t = open(labelname, "r")
        label = []
        for line in t:
            label.append(line.strip())
        t.close()

        self.label_input = ttk.Combobox(section01, values=label, width=40)
        self.label_input.current(0)
        self.label_input.grid(column=1, row=3, pady=5)
        #new
        bt_new_label = tk.Button(section01,
                                 padx=1,
                                 bd=1,
                                 text="New",
                                 fg="blue",
                                 command=self.newlabel)
        bt_new_label.grid(row=3, column=2, padx=5, sticky="W")

        #Preview
        preview_text = tk.Label(previewframe,
                                font=('arial', 16),
                                text='Preview').grid(column=0,
                                                     row=0,
                                                     sticky="W")
        bt_preview = tk.Button(previewframe,
                               padx=16,
                               bd=2,
                               text="Preview",
                               fg="blue",
                               command=self.preview).grid(row=1,
                                                          column=0,
                                                          pady=5,
                                                          sticky="W")
        bt_livepreview = tk.Button(previewframe,
                                   padx=16,
                                   bd=2,
                                   textvariable=self.livepreview_text,
                                   fg="blue",
                                   command=self.preview_live).grid(row=1,
                                                                   column=2,
                                                                   pady=5,
                                                                   sticky="W")
        bt_quit = tk.Button(previewframe,
                            padx=16,
                            bd=2,
                            text="Upload",
                            fg="blue",
                            command=self.upload).grid(row=1,
                                                      column=1,
                                                      pady=5,
                                                      sticky="W")
        bt_upload = tk.Button(previewframe,
                              padx=16,
                              bd=2,
                              text="Quit",
                              fg="blue",
                              command=self.root.quit).grid(row=1,
                                                           column=3,
                                                           pady=5,
                                                           sticky="W")
        saveimage_text = tk.Label(previewframe,
                                  font=('arial', 12),
                                  text='Save Image:  ').grid(column=0,
                                                             row=2,
                                                             sticky="W")
        bt_side1 = tk.Button(previewframe,
                             padx=16,
                             bd=2,
                             text="Save: Side 1",
                             fg="red",
                             command=self.side1).grid(row=3,
                                                      column=0,
                                                      pady=5,
                                                      sticky="W")
        bt_side2 = tk.Button(previewframe,
                             padx=16,
                             bd=2,
                             text="Save: Side 2",
                             fg="red",
                             command=self.side2).grid(row=3,
                                                      column=1,
                                                      pady=5,
                                                      sticky="W")

        image_preview_text = tk.Label(previewimageframe,
                                      font=('arial', 12),
                                      text='Preview Image:  ').grid(column=0,
                                                                    row=1,
                                                                    sticky="W")
        self.image_preview = ImageTk.PhotoImage(
            Image.open(self.current_image_path))
        self.image_panel01 = tk.Label(previewimageframe,
                                      image=self.image_preview)
        self.image_panel01.grid(column=0, row=2, sticky="W")

        image_livepreview_text = tk.Label(previewimageframe,
                                          font=('arial', 12),
                                          text='Live-Preview Image:  ').grid(
                                              column=1, row=1, sticky="W")
        self.image_livepreview = ImageTk.PhotoImage(
            Image.open(self.current_image_path))
        self.image_panel02 = tk.Label(previewimageframe,
                                      image=self.image_livepreview)
        self.image_panel02.grid(column=1, row=2, sticky="W")

        self.image_canny = ImageTk.PhotoImage(
            Image.fromarray(canny(self.current_image_path, "./canny.png")))
        self.image_panel03 = tk.Label(section04, image=self.image_canny)
        self.image_panel03.grid(column=0, row=1, sticky="W")

        self.image_gray = ImageTk.PhotoImage(
            Image.fromarray(gray(self.current_image_path, "./gray.png")))
        self.image_panel04 = tk.Label(section04, image=self.image_gray)
        self.image_panel04.grid(column=1, row=1, sticky="W")

        self.image_background = ImageTk.PhotoImage(
            Image.fromarray(
                background(self.current_image_path, "./backround.png")))
        self.image_panel05 = tk.Label(section04, image=self.image_background)
        self.image_panel05.grid(column=2, row=1, sticky="W")

        self.image_boundingbox = ImageTk.PhotoImage(
            Image.fromarray(
                boundingbox(self.current_image_path, "./boundingbox.png")))
        self.image_panel09 = tk.Label(section04, image=self.image_boundingbox)
        self.image_panel09.grid(column=3, row=1, sticky="W")

        # Detection/Classification
        dc_text = tk.Label(dcframe,
                           font=('arial', 14),
                           text='Detection/Classification ').grid(column=0,
                                                                  row=0)
        bt_detection = tk.Button(dcframe,
                                 padx=16,
                                 bd=2,
                                 text="Detection",
                                 fg="green",
                                 command=self.detection).grid(row=1,
                                                              column=0,
                                                              pady=5,
                                                              sticky="EW")
        bt_classification = tk.Button(dcframe,
                                      padx=16,
                                      bd=2,
                                      text="Classification",
                                      fg="green",
                                      command=self.classification).grid(
                                          row=1, column=1, pady=5)
        bt_segmentation = tk.Button(dcframe,
                                    padx=16,
                                    bd=2,
                                    text="Segmentation",
                                    fg="green",
                                    command=self.segmentation).grid(row=1,
                                                                    column=2,
                                                                    pady=5)

        self.image_detection = ImageTk.PhotoImage(
            Image.open(self.current_image_path))
        self.image_panel06 = tk.Label(dcimageframe, image=self.image_detection)
        self.image_panel06.grid(column=0, row=2, sticky="W")
        detection_image_text = tk.Label(dcimageframe,
                                        font=('arial', 12),
                                        textvariable=self.detection_text).grid(
                                            column=0, row=3, sticky="EW")

        self.image_classification = ImageTk.PhotoImage(
            Image.open(self.current_image_path))
        self.image_panel07 = tk.Label(dcimageframe,
                                      image=self.image_classification)
        self.image_panel07.grid(column=1, row=2, sticky="W")
        classification_image_text = tk.Label(
            dcimageframe,
            font=('arial', 12),
            textvariable=self.classification_text).grid(column=1,
                                                        row=3,
                                                        sticky="EW")

        self.image_segmentation = ImageTk.PhotoImage(
            Image.open(self.current_image_path))
        self.image_panel08 = tk.Label(dcimageframe,
                                      image=self.image_segmentation)
        self.image_panel08.grid(column=2, row=2, sticky="W")
        segmentation_image_text = tk.Label(
            dcimageframe,
            font=('arial', 12),
            textvariable=self.segmentation_text).grid(column=2,
                                                      row=3,
                                                      sticky="EW")

        self.root.mainloop()