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)
57 elif line == "exit\n":
60 for event in pygame.event.get():
61 if event.type == pygame.QUIT:
63 elif event.type == pygame.KEYDOWN:
66 im = self.cam.get_image()
67 self.screen.display_picture(im)
70 def auto(self, interval):
72 clock = pygame.time.Clock()
76 for event in pygame.event.get():
77 if event.type == pygame.QUIT:
79 if time.time() - last > interval:
86 event = pygame.event.wait()
87 if event.type == QUIT:
89 if event.type != KEYDOWN:
95 im = self.cam.get_image()
96 self.screen.display_picture(im)
97 im.save(self.saving_dir + "{0:0>3}.jpg".format(self.im_number), 'JPEG')
102 parser = argparse.ArgumentParser(description=__doc__)
103 parser.add_argument('-c', '--cmd', dest='cmd', action='store_true',
104 help="take commands from stdin")
105 parser.add_argument('-d', type=int, default=0,
106 help="video device id")
107 parser.add_argument('-a', type=int, default=0,
108 help="take picture automaticaly every A seconds")
109 parser.add_argument('-r', type=int, nargs=2, default=[640, 480],
110 help="set camera resolution")
111 args = parser.parse_args()
113 res=(args.r[0], args.r[1])
114 capture = Capture(args.d, res)
119 def enqueue_input(queue):
120 for line in iter(sys.stdin.readline, b''):
124 t = Thread(target=enqueue_input, args=(q,))
130 clock = pygame.time.Clock()
134 line = q.get_nowait() # or q.get(timeout=.1)
140 elif line == "exit\n":
153 if __name__ == '__main__':