9 from threading import Thread
10 from Queue import Queue, Empty
13 from pygame.locals import QUIT, KEYDOWN
16 from camera import Camera
19 def __init__(self, res):
21 pygame.display.set_mode(res)
22 pygame.display.set_caption("Go image capture")
23 self._screen = pygame.display.get_surface()
25 def display_picture(self, im):
26 pg_img = pygame.image.frombuffer(im.tostring(), im.size, im.mode)
27 self._screen.blit(pg_img, (0,0))
31 def __init__(self, device, res):
32 self.cam = Camera(vid=device, res=res)
33 self.screen = Screen(res)
37 self.saving_dir = "./captured/" + time.strftime("%Y-%m-%d %H:%M/")
39 if not os.path.isdir(self.saving_dir):
40 os.makedirs(self.saving_dir)
47 clock = pygame.time.Clock()
48 while not done: #live preview
51 line = q.get_nowait() # or q.get(timeout=.1)
58 for event in pygame.event.get():
59 if event.type == pygame.QUIT:
62 elif event.type == pygame.KEYDOWN:
65 im = self.cam.get_image()
66 self.screen.display_picture(im)
69 def auto(self, interval):
71 clock = pygame.time.Clock()
75 for event in pygame.event.get():
76 if event.type == pygame.QUIT:
78 if time.time() - last > interval:
85 event = pygame.event.wait()
86 if event.type == QUIT:
88 if event.type != KEYDOWN:
94 im = self.cam.get_image()
95 self.screen.display_picture(im)
96 im.save(self.saving_dir + "{0:0>3}.jpg".format(self.im_number), 'JPEG')
101 parser = argparse.ArgumentParser(description=__doc__)
102 parser.add_argument('-c', '--cmd', dest='cmd', action='store_true',
103 help="take commands from stdin")
104 parser.add_argument('-d', type=int, default=0,
105 help="video device id")
106 parser.add_argument('-a', type=int, default=0,
107 help="take picture automaticaly every A seconds")
108 parser.add_argument('-r', type=int, nargs=2, default=[640, 480],
109 help="set camera resolution")
110 args = parser.parse_args()
112 res=(args.r[0], args.r[1])
113 capture = Capture(args.d, res)
118 def enqueue_input(queue):
119 for line in iter(sys.stdin.readline, b''):
123 t = Thread(target=enqueue_input, args=(q,))
129 clock = pygame.time.Clock()
133 line = q.get_nowait() # or q.get(timeout=.1)
139 elif line == "exit\n":
152 if __name__ == '__main__':