diff --git a/AscCam.py b/AscCam.py new file mode 100755 index 0000000..74c3092 --- /dev/null +++ b/AscCam.py @@ -0,0 +1,139 @@ +#!/usr/bin/python3 + +# Few required libraries +import tkinter as tk +import os +import time +from picamera import PiCamera + +# Main Tkinter class +class GUI(tk.Frame): + + # Initialization of the class + def __init__(self, master=None): + super().__init__(master) + self.master = master + + # Create the GUI + self.create_widgets() + + # Instantiate the camera + self.camera = PiCamera(sensor_mode=3, resolution=PiCamera.MAX_RESOLUTION, framerate=1) + + #filepath for output: + self.basePath = '/home/pi/Desktop/Imaging/{}'.format(time.strftime('%Y-%m-%d')) + if not os.path.exists(self.basePath): + os.mkdir(self.basePath) + os.chown(self.basePath, 1000, 1000) + + # Create the main GUI + def create_widgets(self): + + # Create separate frames to group similar buttons + frame1 = tk.Frame(master=self.master, bd=2, relief="ridge") + frame1.grid(row=0, column=0, columnspan=1, rowspan=3, sticky="N") + + frame2 = tk.Frame(master=self.master, bd=2) + frame2.grid(row=0, column=1, columnspan=2, rowspan=1, sticky="NW") + + frame3 = tk.Frame(master=self.master, bd=2, relief="ridge") + frame3.grid(row=2, column=1, columnspan=2, rowspan=2, sticky="NW") + + # In Frame1 the general handling buttons + # Place the first item (a label) in the first frame + self.camLabel = tk.Label(master=frame1, text="CAMERA") + self.camLabel.pack() + + # Then the buttons + self.camOnButt = tk.Button(master=frame1, text="ON", fg="green", command=self.camOn) + self.camOnButt.pack() + self.camOffButt = tk.Button(master=frame1, text="OFF", fg="red", command=self.camOff) + self.camOffButt.pack() + + # the acquisition section + self.camResLabel = tk.Label(master=frame1, text=" Acquisition ") + self.camResLabel.pack() + + self.camSnapButt = tk.Button(master=frame1, text="Snapshot", command=self.camSnap) + self.camSnapButt.pack() + self.camTLButt = tk.Button(master=frame1, text="Time Lapse", command=self.camTL) + self.camTLButt.pack() + self.camRecButt = tk.Button(master=frame1, text="Video", command=self.camRec) + self.camRecButt.pack() + + # The Exit section + self.camResLabel = tk.Label(master=frame1, text=" Exit ") + self.camResLabel.pack(fill="x") + self.quit= tk.Button(master=frame1, text="QUIT", fg="blue", command=self.master.destroy) + self.quit.pack() + + # In Frame 2, the camera's options + self.zoomVar = tk.DoubleVar(value=1.0) + self.camZoom = tk.Scale(master=frame2, label="Digi Zoom", + variable=self.zoomVar, from_=1, + to=10, resolution=1, orient="horizontal", + command=self.setZoom) + self.camZoom.set(1.0) + self.camZoom.pack() + + + self.wbLabel = tk.Label(master=frame2, text=" White-balance modes ") + self.wbLabel.pack(fill="x") + wb_options = list(PiCamera.AWB_MODES.keys()) + self.wbVar = tk.StringVar() + self.wbVar.set("auto") + self.wbMenu = tk.OptionMenu(frame2, self.wbVar, *wb_options) + self.wbMenu.pack(fill="x") + + self.expLabel = tk.Label(master=frame2, text=" Exposure modes ") + self.expLabel.pack(fill="x") + exp_options = list(PiCamera.EXPOSURE_MODES.keys()) + self.expVar = tk.StringVar() + self.expVar.set("auto") + self.expMenu = tk.OptionMenu(frame2, self.expVar, *exp_options) + self.expMenu.pack(fill="x") + + + def camOn(self): + self.camera.start_preview(fullscreen=False, window=(0, 0, 640, 480)) + return + + def camOff(self): + self.camera.stop_preview() + return + + def camSnap(self): + photoPath = self.basePath + '/snaps/' + #check to see if the snap output folder is present: + if not os.path.exists(photoPath): + #if not, create it: + os.makedirs(photoPath) + os.chown(photoPath, 1000, 1000) + + # Camera warm-up time + time.sleep(1) + self.camera.capture(photoPath + 'snap_' + + time.strftime("%Y-%m-%d-%H-%M-%S") + '.jpg') + return + + def camTL(self): + return + + def camRec(self): + return + + def setZoom(self, zoom): + + zoomSide = 1 / float(zoom) + edge = (1 - zoomSide)*0.5 + + self.camera.zoom = (edge, edge, zoomSide, zoomSide) + + return + +root = tk.Tk() +root.title("AscCam 0.01") +root.resizable(width=False, height=False) +root.geometry("+15+400") +app = GUI(master=root) +app.mainloop()