diff --git a/idle.jpg b/idle.jpg new file mode 100644 index 0000000..c74540d Binary files /dev/null and b/idle.jpg differ diff --git a/photobooth.py b/photobooth.py index 14956ae..93f22f7 100755 --- a/photobooth.py +++ b/photobooth.py @@ -19,10 +19,33 @@ image_size = (640, 480) # Display offset for pictures image_offset = (80,60) +# Idle image +image_idle = "idle.jpg" + +# Image basename +image_basename = "pic" + ############### ### Classes ### ############### +class Images: + """Class to manage images and count them""" + def __init__(self, basename): + self.basename = basename + self.counter = 0 + self.suffix = ".jpg" + + def get(self, count): + return self.basename + str(count).zfill(5) + self.suffix + + def get_last(self): + return self.get(self.counter) + + def get_next(self): + self.counter += 1 + return self.get(self.counter) + class GUI_PyGame: """The GUI class using PyGame""" def __init__(self, name, size): @@ -47,12 +70,12 @@ class GUI_PyGame: self.screen.blit(image, offset) pygame.display.flip() - def mainloop(self, actions): + def mainloop(self, filename): while True: for event in pygame.event.get(): if event.type == pygame.QUIT: return elif event.type == pygame.KEYDOWN: handle_keypress(event.key) - actions() + self.show_picture(filename) def teardown(self): pygame.quit() @@ -60,12 +83,22 @@ class GUI_PyGame: class Camera: """Camera class providing functionality to take pictures""" #def __init__(self): - def preview(self, filename="/tmp/preview.jpg"): + def call_gphoto(self, action, filename): try: - output = subprocess.check_output("gphoto2 --force-overwrite --capture-preview --quiet --filename " + filename, shell=True, stderr=subprocess.STDOUT) + output = subprocess.check_output("gphoto2 --force-overwrite --quiet " + + action + " --filename " + filename, + shell=True, stderr=subprocess.STDOUT) except subprocess.CalledProcessError as e: - error("Error during preview when calling '" + e.cmd + "'!\nOutput: " + e.output, e.returncode) + error("Error during preview when calling '" + e.cmd + "'!\nOutput: " + + e.output, e.returncode) if "ERROR" in output: error("Error during preview!\n" + output) + + def preview(self, filename="/tmp/preview.jpg"): + self.call_gphoto("--capture-preview", filename) + return filename + + def take_picture(self, filename="/tmp/picture.jpg"): + self.call_gphoto("--capture-image-and-download", filename) return filename @@ -73,10 +106,6 @@ class Camera: ### Functions ### ################# -def actions(): - display.show_picture(camera.preview(), image_size, image_offset) - time.sleep(0.5) - def error(msg, exit_code=1): print "ERROR: " + msg teardown(exit_code) @@ -89,10 +118,14 @@ def handle_keypress(key): if key == ord('q'): teardown() elif key == ord('c'): - print "Taking picture" + print "Taking 3 pictures" + for x in xrange(3): + filename = camera.take_picture(images.get_next()) + display.show_picture(filename) + time.sleep(2) def main(): - display.mainloop(actions) + display.mainloop(image_idle) display.teardown() return 0 @@ -102,6 +135,7 @@ def main(): display = GUI_PyGame('Photobooth', display_size) camera = Camera() +images = Images(image_basename) if __name__ == "__main__": sys.exit(main()) \ No newline at end of file