+class Capture:
+ def __init__(self, device, res):
+ self.cam = Camera(vid=device, res=res)
+ self.screen = Screen(res)
+
+ self.im_number = 0
+
+ self.saving_dir = "./captured/" + time.strftime("%Y-%m-%d %H:%M/")
+
+ if not os.path.isdir(self.saving_dir):
+ os.makedirs(self.saving_dir)
+
+ def __del__(self):
+ del self.cam
+
+ def live(self, q):
+ done = False
+ clock = pygame.time.Clock()
+ while not done: #live preview
+ if q:
+ try:
+ line = q.get_nowait() # or q.get(timeout=.1)
+ except Empty:
+ pass
+ else:
+ if line == "stop\n":
+ done = True
+ elif line == "exit\n":
+ sys.exit()
+ else:
+ for event in pygame.event.get():
+ if event.type == pygame.QUIT:
+ sys.exit()
+ elif event.type == pygame.KEYDOWN:
+ done = True
+
+ im = self.cam.get_image()
+ self.screen.display_picture(im)
+ clock.tick(5)
+
+ def auto(self, interval):
+ last = 0
+ clock = pygame.time.Clock()
+ done = False
+
+ while not done:
+ for event in pygame.event.get():
+ if event.type == pygame.QUIT:
+ done = True
+ if time.time() - last > interval:
+ last = time.time()
+ self.take()
+ clock.tick(15)
+
+ def manual(self):
+ while True:
+ event = pygame.event.wait()
+ if event.type == QUIT:
+ break
+ if event.type != KEYDOWN:
+ continue
+ self.take()
+
+
+ def take(self):
+ im = self.cam.get_image()
+ self.screen.display_picture(im)
+ im.save(self.saving_dir + "{0:0>3}.jpg".format(self.im_number), 'JPEG')
+ self.im_number += 1
+