#!/usr/bin/env python
-"""Go image capture."""
+"""Go image capture"""
+import os
import sys
import argparse
+import time
import pygame
from pygame.locals import QUIT, KEYDOWN
from camera import Camera
class Screen:
- def __init__(self):
+ def __init__(self, res):
pygame.init()
- pygame.display.set_mode((640,480))
+ pygame.display.set_mode(res)
pygame.display.set_caption("Go image capture")
self._screen = pygame.display.get_surface()
self._screen.blit(pg_img, (0,0))
pygame.display.flip()
+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):
+ done = False
+ clock = pygame.time.Clock()
+ while not done: #live preview
+ for event in pygame.event.get():
+ if event.type == pygame.QUIT:
+ done = True
+ sys.exit()
+ if 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()
+ 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
+ clock.tick(15)
+
+ def manual(self):
+ while True:
+ event = pygame.event.wait()
+ if event.type == QUIT:
+ break
+ if event.type != KEYDOWN:
+ continue
+
+ im = 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
+
+
def main():
parser = argparse.ArgumentParser(description=__doc__)
- #parser.add_argument('file', metavar='file', nargs=1,
- # help="image to analyse")
- #parser.add_argument('-w', type=int, default=640,
- # help="scale image to the specified width before analysis")
- parser.add_argument('-d', '--device', type=int, default=0,
- help="number of video device to use")
- #parser.add_argument('-s', '--save', dest='do_something', action='store_const',
- # const=image_save, default=im_debug.show,
- # help="save images instead of displaying them")
+ parser.add_argument('-d', type=int, default=0,
+ help="video device id")
+ parser.add_argument('-a', type=int, default=0,
+ help="take picture automaticaly every A seconds")
+ parser.add_argument('-r', type=int, nargs=2, default=[640, 480],
+ help="set camera resolution")
args = parser.parse_args()
- cam = Camera(device=args.device)
- screen = Screen()
-
- im = cam.get_image()
- screen.display_picture(im)
+ res=(args.r[0], args.r[1])
+ capture = Capture(args.d, res)
- im_number = 0
+ capture.live()
- while True:
- event = pygame.event.wait()
- if event.type == QUIT:
- break
- elif event.type == KEYDOWN:
- im = cam.get_image()
- screen.display_picture(im)
- im.save("./captured/{0:0>3}.jpg".format(im_number), 'JPEG')
- im_number += 1
+ if args.a > 0:
+ capture.auto(args.a)
+ else:
+ capture.manual()
+ del capture
if __name__ == '__main__':
try: