예제 #1
0
class GuiPart:
    """
    Independent  class responsible for the GUI part of the tool
    """
    def __init__(self, master, client, camStatus, gpsStatus, recordData,
                 stopRecord):
        """
        Set up of the GUI, creation of the different frames
        """

        self.camStatus = camStatus
        self.gpsStatus = gpsStatus
        self.client = client
        self.frame_width = 900
        self.frame_height = 800
        self.frame1_width = 900
        self.frame1_height = 800
        self.img = None
        self.img1 = None

        style = ttk.Style()
        style.theme_create("ToolStyle",
                           parent="alt",
                           settings={
                               "TNotebook": {
                                   "configure": {
                                       "tabmargins": [2, 5, 2, 0]
                                   }
                               },
                               "TNotebook.Tab": {
                                   "configure": {
                                       "padding": [20, 20]
                                   },
                               },
                               "TProgressbar": {
                                   "configure": {
                                       "foreground": 'red',
                                       "background": 'red'
                                   }
                               }
                           })

        style.theme_use("ToolStyle")
        style.configure('TNotebook.Tab',
                        font=('Arial Bold', '15', 'bold'),
                        padding=[10, 10])

        self.tab_parent = ttk.Notebook(master)
        self.recording_tab = ttk.Frame(self.tab_parent)
        self.video_tab = ttk.Frame(self.tab_parent)

        self.tab_parent.add(
            self.recording_tab,
            text="Data recording",
        )
        self.tab_parent.add(self.video_tab, text="Video Output")
        self.tab_parent.pack(expand=1, fill='both')

        self.topFrame()
        self.leftFrame()
        self.rightFrame()
        self.videoFrame()
        self.framesCanvas()

    def topFrame(self):
        #welcome text
        self.topframe = Frame(self.recording_tab,
                              borderwidth=5,
                              relief=tkinter.GROOVE)
        self.topframe.pack(side=tkinter.TOP)
        self.welcome_text = tkinter.Label(self.topframe,
                                          text="D4RM synchronising tool",
                                          font=("Arial Bold", 20))
        self.welcome_text.pack(side=tkinter.TOP)

    def leftFrame(self):
        self.leftframe = LabelFrame(self.recording_tab,
                                    text="Input devices and settings",
                                    font=("Arial Bold", 15),
                                    height=800,
                                    width=500,
                                    borderwidth=5,
                                    relief=tkinter.GROOVE)
        self.leftframe.pack(side=tkinter.LEFT)
        self.leftframe.pack_propagate(False)
        self.cameraLabel()
        self.gpsLabel()

    def cameraLabel(self):
        # First camera Label
        self.camera_status_label = tkinter.Label(self.leftframe,
                                                 text="First Cameras Status",
                                                 font=("Arial Bold", 15),
                                                 padx=15,
                                                 pady=15)
        self.camera_status_label.pack()

        self.camera_device_label = tkinter.Label(self.leftframe,
                                                 text="Unknown",
                                                 font=("Arial Bold", 20),
                                                 padx=5,
                                                 pady=15)
        self.camera_device_label.pack()

        # Second camera label
        self.camera_status_label = tkinter.Label(self.leftframe,
                                                 text="Second Cameras Status",
                                                 font=("Arial Bold", 15),
                                                 padx=15,
                                                 pady=15)
        self.camera_status_label.pack()

        self.camera1_device_label = tkinter.Label(self.leftframe,
                                                  text="Unknown",
                                                  font=("Arial Bold", 20),
                                                  padx=5,
                                                  pady=15)
        self.camera1_device_label.pack()

    def gpsLabel(self):
        self.gps_status_label = tkinter.Label(self.leftframe,
                                              text="GPS Status",
                                              font=("Arial Bold", 15),
                                              padx=15,
                                              pady=15)
        self.gps_status_label.pack()

        self.gps_device_label = tkinter.Label(self.leftframe,
                                              text="Unknown",
                                              font=("Arial Bold", 20),
                                              padx=5,
                                              pady=15)
        self.gps_device_label.pack()

    def rightFrame(self):
        self.rightframe = LabelFrame(self.recording_tab,
                                     text="System informations",
                                     font=("Arial Bold", 15),
                                     height=800,
                                     width=1300,
                                     borderwidth=5,
                                     relief=tkinter.GROOVE)
        self.rightframe.pack(side=tkinter.LEFT)
        self.rightframe.pack_propagate(False)
        self.systemInfo()
        self.recordingButtons()
        self.progressBar()

    def systemInfo(self):
        self.notification_label = tkinter.Label(self.rightframe,
                                                text="Unknown",
                                                font=("Arial Bold", 20),
                                                padx=5,
                                                pady=15)
        self.notification_label.pack(anchor=tkinter.S, expand=True)

    def recordingButtons(self):
        # Start recording Button
        self.btn_record = tkinter.Button(self.rightframe,
                                         text="Record Data",
                                         command=self.client.recordData,
                                         font=("Arial Bold", 20))
        self.btn_record.pack(anchor=tkinter.S, expand=True)
        # Stop recording Button
        self.btn_stop = tkinter.Button(self.rightframe,
                                       text="Stop recording",
                                       command=self.client.stopRecord,
                                       font=("Arial Bold", 20))
        self.btn_stop.pack(anchor=tkinter.S, expand=True)

    def progressBar(self):
        self.progress_bar = ttk.Progressbar(self.rightframe,
                                            orient='horizontal',
                                            length=350,
                                            mode='determinate')
        self.progress_bar.pack(anchor=tkinter.S, expand=True)

    def videoFrame(self):
        # Set up of the Right frame (Camera output)
        self.videoframe = LabelFrame(self.video_tab,
                                     text="Camera output",
                                     font=("Arial Bold", 15),
                                     height=self.frame_height,
                                     width=self.frame_width,
                                     borderwidth=5,
                                     relief=tkinter.GROOVE)
        self.videoframe.pack(side=tkinter.RIGHT)
        self.videoframe.pack_propagate(False)
        # Set up of the left frame (Camera output 1)
        self.videoframe1 = LabelFrame(self.video_tab,
                                      text="Second Camera output",
                                      font=("Arial Bold", 15),
                                      height=self.frame_height,
                                      width=self.frame_width,
                                      borderwidth=5,
                                      relief=tkinter.GROOVE)
        self.videoframe1.pack(side=tkinter.RIGHT)
        self.videoframe1.pack_propagate(False)

    def framesCanvas(self):
        # Set of the canvas comporting the camera output frames
        self.canvas = tkinter.Canvas(self.videoframe,
                                     width=self.frame_width,
                                     height=self.frame_height,
                                     highlightcolor="red",
                                     bd=5)
        self.canvas.pack(anchor=tkinter.CENTER)
        self.first_canvas = self.canvas.create_text(
            0,
            0,
            font="Times 20 italic bold",
            text="  Camera Not Connected !",
            anchor=tkinter.NW)

        # Set of the canvas comporting the second camera output frames
        self.canvas1 = tkinter.Canvas(self.videoframe1,
                                      width=self.frame1_width,
                                      height=self.frame1_height,
                                      highlightcolor="red",
                                      bd=5)
        self.canvas1.pack(anchor=tkinter.CENTER)
        self.second_canvas = self.canvas1.create_text(
            0,
            0,
            font="Times 20 italic bold",
            text="  Camera Not Connected !",
            anchor=tkinter.NW)

    def processIncoming(self, camStatus, gpsStatus, videoOutput, frame,
                        frame1):
        """Handle the Status of the devices every 1 ms"""

        # If GPS connected
        if gpsStatus:
            self.gps_device_label.configure(text="Connected")
        else:
            self.gps_device_label.configure(text="Disconnected")

        # # if Both cameras are disconnected
        # if not camStatus[0] and not camStatus[2]:
        #     self.notification_label.configure(text="Both cameras are disconnected !", fg="red")

        # # if one of the cameras is disconnected
        # if not camStatus[0] or not camStatus[2]:
        #     self.notification_label.configure(text="One of the cameras is disconnected !", fg="red")

        # If First Camera connected
        if camStatus[0]:
            self.camera_device_label.configure(text="Connected")
            if videoOutput:
                if frame is not None:
                    self.notification_label.configure(
                        text=
                        "No Recording in Procces, Press the record button to start recording"
                    )
                    self.photo = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
                    self.photo = PIL.ImageTk.PhotoImage(
                        image=PIL.Image.fromarray(
                            self.photo))  # Transform the frame into PIL image
                    self.img = self.canvas.create_image(
                        0, 0, image=self.photo, anchor=tkinter.NW
                    )  # Display the image into the canvas GUI
                    #self.canvas.itemconfigure(self.first_canvas, image=self.photo)
            else:
                self.canvas.itemconfigure(
                    self.first_canvas,
                    text="  Can't show the video, recording in process.")
                self.notification_label.configure(text="Recording in Procces")

        else:
            self.camera_device_label.configure(text="Disconnected")
            self.canvas.itemconfigure(self.first_canvas,
                                      text=" Camera Not Connected !")

        # If second camera connected
        if camStatus[2]:
            self.camera1_device_label.configure(text="Connected")
            if videoOutput:
                if frame1 is not None:
                    self.notification_label.configure(
                        text=
                        "No Recording in Procces, Press the record button to start recording"
                    )
                    self.photo1 = cv2.cvtColor(frame1, cv2.COLOR_BGR2RGB)
                    self.photo1 = PIL.ImageTk.PhotoImage(
                        image=PIL.Image.fromarray(
                            self.photo1))  # Transform the frame into PIL image
                    self.img1 = self.canvas1.create_image(
                        0, 0, image=self.photo1, anchor=tkinter.NW
                    )  # Display the image into the canvas GUI
                    #self.canvas1.itemconfigure(self.first_canvas, image=self.photo1)
            else:
                self.canvas1.itemconfigure(
                    self.second_canvas,
                    text="  Can't show the video, recording in process.")
                self.notification_label.configure(text="Recording in Procces")

        else:
            self.camera1_device_label.configure(text="Disconnected")
            self.canvas1.itemconfigure(self.second_canvas,
                                       font="Times 20 italic bold",
                                       text=" Camera Not Connected !")
예제 #2
0
canvas = Canvas(root, bg="white")
canvas.pack()

# авторизация
lf = LabelFrame(canvas, text="Аторизация", bd=4, fg="red")
lf.pack()
log = Entry(lf, width=WIDTH, font="Arial 14", fg="light gray")
log.pack()
mail = Entry(lf, width=WIDTH, font="Arial 14", fg="light gray")
mail.pack()
pas = Entry(lf, width=WIDTH, font="Arial 14", fg="light gray")
pas.pack()
rep = Entry(lf, width=WIDTH, font="Arial 14", fg="light gray")
rep.pack()
log.insert(0, "login, например ProV2019")
mail.insert(0, "email, например [email protected]")
pas.insert(0, "password, например 2019ProV")
rep.insert(0, "repository, например My2")
btn = Button(lf, text="Вход", fg='blue', command=authorization)
btn.pack()
lf2 = LabelFrame(canvas, text="Терминал", fg="red", height=250, bd=4)
lf2.pack_propagate(False)
lf2.pack(fill="both")
text = scroll.ScrolledText(lf2, font="Arial 12")
text.pack()
Button(canvas, text="ВЫХОД", fg="red", command=root.destroy).pack()

root.bind("1", enter)
root.mainloop()
    def __init__(self, vs, outputPath):
        # store the video stream object and output path, then initialize
        # the most recently read frame, thread for reading frames, and
        # the thread stop event
        self.vs = vs
        self.outputPath = "output"
        self.frame = None
        self.thread = None
        self.stopEvent = None
        # initialize the root window and image panel
        self.root = Tk()
        self.root.iconbitmap(
            "Resources/card+id+id+card+identity+identity+card+icon+icon-1320196206727682853.ico"
        )
        self.root.title("Card Generator")
        self.face_cascade = cv2.CascadeClassifier(
            "Resources/haarcascade_frontalface_default.xml")
        self.root.resizable(False, False)
        self.panel = None

        # Frame Creation
        frame_form = LabelFrame(self.root,
                                text="Date Personale",
                                padx=5,
                                pady=5,
                                width=350,
                                height=420)
        frame_form.grid_propagate(False)
        frame_form.grid(row=0, column=0, padx=10, pady=10)
        frame_video = LabelFrame(self.root,
                                 text="Captura Camera Web",
                                 padx=5,
                                 pady=5,
                                 width=500,
                                 height=420)
        frame_video.pack_propagate(False)
        frame_video.grid(row=0, column=1, padx=10, pady=10)
        frame_send = LabelFrame(self.root,
                                text="Salvare & Generare",
                                padx=5,
                                pady=5,
                                width=350,
                                height=234)
        frame_send.grid_propagate(False)
        frame_send.grid(row=1, column=0, padx=10, pady=10)
        frame_image = LabelFrame(self.root,
                                 text="Editare Imagine",
                                 padx=5,
                                 pady=5,
                                 width=500,
                                 height=234)
        frame_image.grid_propagate(False)
        frame_image.grid(row=1, column=1, padx=10, pady=10)

        # --------------Frame Form--------------
        # Label Init
        nume_label = Label(frame_form, text="Nume: ").grid(row=0,
                                                           column=0,
                                                           sticky="w")
        nume_empty_label = Label(frame_form, text="").grid(row=1, column=0)
        prenume_label = Label(frame_form, text="Prenume: ").grid(row=2,
                                                                 column=0,
                                                                 sticky="w")
        prenume_empty_label = Label(frame_form, text="").grid(row=3, column=0)
        cnp_label = Label(frame_form, text="CNP: ").grid(row=4,
                                                         column=0,
                                                         sticky="w")
        cnp_empty_label = Label(frame_form, text="").grid(row=5, column=0)
        matr_label = Label(frame_form, text="Nr. Matricol: ").grid(row=6,
                                                                   column=0,
                                                                   sticky="w")
        matr_empty_label = Label(frame_form, text="").grid(row=7, column=0)
        email_label = Label(frame_form, text="Email: ").grid(row=8,
                                                             column=0,
                                                             sticky="w")
        email_empty_label = Label(frame_form, text="").grid(row=9, column=0)
        uni_label = Label(frame_form, text="Universitate: ").grid(row=10,
                                                                  column=0,
                                                                  sticky="w")
        uni_empty_label = Label(frame_form, text="").grid(row=11, column=0)
        fac_label = Label(frame_form, text="Facultate: ").grid(row=12,
                                                               column=0,
                                                               sticky="w")
        fac_empty_label = Label(frame_form, text="").grid(row=13, column=0)
        an_label = Label(frame_form, text="An: ").grid(row=14,
                                                       column=0,
                                                       sticky="w")
        an_empty_label = Label(frame_form, text="").grid(row=15, column=0)

        # Entry Init
        matr_reg = (self.root.register(self.validate_matr), '%P')
        cnp_reg = (self.root.register(self.validate_cnp), '%P')
        email_reg = (self.root.register(self.validate_email), '%P')
        self.nume_entry = Entry(frame_form, width=40, borderwidth=5)
        self.nume_entry.grid(row=0, column=1)
        self.prenume_entry = Entry(frame_form, width=40, borderwidth=5)
        self.prenume_entry.grid(row=2, column=1)
        self.cnp_entry = Entry(frame_form,
                               width=40,
                               borderwidth=5,
                               validate="all",
                               validatecommand=cnp_reg)
        self.cnp_entry.grid(row=4, column=1)
        self.cnp_empty_entry = Label(frame_form, text="", fg="red")
        self.cnp_empty_entry.grid(row=5, column=1)
        self.matr_entry = Entry(frame_form,
                                width=40,
                                borderwidth=5,
                                validate="all",
                                validatecommand=matr_reg)
        self.matr_entry.grid(row=6, column=1)
        self.matr_empty_entry = Label(frame_form, text="", fg="red")
        self.matr_empty_entry.grid(row=7, column=1)
        self.email_entry = Entry(frame_form,
                                 width=40,
                                 borderwidth=5,
                                 validate="all",
                                 validatecommand=email_reg)
        self.email_entry.grid(row=8, column=1)
        self.email_empty_entry = Label(frame_form, text="", fg="red")
        self.email_empty_entry.grid(row=9, column=1)

        # Dropdown Init
        self.var_uni = StringVar()
        self.var_fac = StringVar()
        self.var_an = StringVar()
        uni_drop = OptionMenu(frame_form,
                              self.var_uni,
                              "UPT",
                              "UVT",
                              "UBB",
                              command=lambda x: self.pick(frame_form))
        uni_drop.grid(row=10, column=1, sticky="ew")
        print(self.var_uni.get())
        self.fac_drop = OptionMenu(frame_form, self.var_fac,
                                   "").grid(row=12, column=1, sticky="ew")
        an_drop = OptionMenu(frame_form, self.var_an, "1", "2", "3",
                             "4").grid(row=14, column=1, sticky="w")

        # --------------Frame Save & Export--------------
        # Label Init
        imagine_label = Label(frame_send,
                              text="Imagine de fundal: ").grid(row=0,
                                                               column=0,
                                                               sticky="w")
        imagine_empty_label = Label(frame_send, text="").grid(row=1, column=0)
        save_db_label = Label(frame_send, text="Salvare DB: ").grid(row=2,
                                                                    column=0,
                                                                    sticky="w")
        save_empty_label = Label(frame_send, text="").grid(row=3, column=0)
        generate_label = Label(frame_send,
                               text="Generare card: ").grid(row=4,
                                                            column=0,
                                                            sticky="w")
        generate_empty_label = Label(frame_send, text="").grid(row=5, column=0)
        # Button Init
        search = Button(frame_send,
                        text="Cauta Imagine",
                        padx=5,
                        pady=5,
                        command=lambda: self.search_im(frame_send))
        search.grid(row=0, column=1)
        self.photo_save = ImageTk.PhotoImage(
            Image.open("Resources/save.png").resize((75, 50)))
        save_btn = Button(frame_send,
                          image=self.photo_save,
                          command=self.db_save)
        save_btn.grid(row=2, column=1)
        self.photo_generate = ImageTk.PhotoImage(
            Image.open(
                "Resources/card+id+id+card+identity+identity+card+icon+icon-1320196206727682853.png"
            ).resize((75, 50)))
        self.generate_btn = Button(frame_send,
                                   image=self.photo_generate,
                                   padx=5,
                                   pady=5,
                                   state=DISABLED,
                                   command=self.generate)
        self.generate_btn.grid(row=4, column=1)

        # Descriptions
        self.var_preview = IntVar()
        preview = Checkbutton(frame_send,
                              text="Previzualizare",
                              variable=self.var_preview)
        preview.grid(row=4, column=2)

        # --------------Frame Webcam--------------
        # Inits
        web_btn = Button(frame_video,
                         text="Activare camera web",
                         command=self.Open_cam).pack()
        self.black_placeholder = ImageTk.PhotoImage(
            Image.open("Resources/placeholder.png").resize((400, 300)))
        self.web_feed = Label(frame_video, image=self.black_placeholder)
        self.web_feed.pack()
        self.take_btn = Button(frame_video,
                               text="Faceti poza",
                               padx=40,
                               pady=40,
                               state=DISABLED,
                               command=self.takeSnapshot)
        self.take_btn.pack()

        # --------------Frame Image--------------
        # Inits
        self.black_placeholder_image = ImageTk.PhotoImage(
            Image.open("Resources/placeholder.png").resize((200, 200)))
        self.image_feed = Label(frame_image,
                                image=self.black_placeholder_image)
        self.image_feed.grid(row=0, column=0, rowspan=4)
        self.filter1 = Button(frame_image,
                              text="Blur",
                              padx=5,
                              pady=5,
                              state=DISABLED,
                              command=self.fil1)
        self.filter1.grid(row=0, column=1, padx=10)
        self.filter2 = Button(frame_image,
                              text="Sepia",
                              padx=5,
                              pady=5,
                              state=DISABLED,
                              command=self.fil2)
        self.filter2.grid(row=0, column=2)
        self.filter3 = Button(frame_image,
                              text="Gray",
                              padx=5,
                              pady=5,
                              state=DISABLED,
                              command=self.fil3)
        self.filter3.grid(row=0, column=3, padx=10)
        self.filter4 = Button(frame_image,
                              text="Sharpening",
                              padx=5,
                              pady=5,
                              state=DISABLED,
                              command=self.fil4)
        self.filter4.grid(row=0, column=4)
        selected_filter = Label(frame_image,
                                text="Selected filter:").grid(row=1,
                                                              column=1,
                                                              columnspan=4)
        self.selected_filter_name = Label(frame_image,
                                          text="No Filter Selected")
        self.selected_filter_name.grid(row=2, column=1, columnspan=4)

        self.root.wm_protocol("WM_DELETE_WINDOW", self.onClose)