9b93ba65d6eccd6ee27380291ce6e7921ef26ca5
[imago.git] / capture.py
1 #!/usr/bin/env python
2
3 """Go image capture"""
4
5 import os
6 import sys
7 import argparse
8 import time
9
10 import pygame
11 from pygame.locals import QUIT, KEYDOWN
12 import Image
13
14 from camera import Camera
15
16 class Screen:
17     def __init__(self, res):
18         pygame.init()
19         pygame.display.set_mode(res)
20         pygame.display.set_caption("Go image capture")
21         self._screen = pygame.display.get_surface()
22
23     def display_picture(self, im):
24         pg_img = pygame.image.frombuffer(im.tostring(), im.size, im.mode)
25         self._screen.blit(pg_img, (0,0))
26         pygame.display.flip()
27
28
29 def main():
30     parser = argparse.ArgumentParser(description=__doc__)
31     parser.add_argument('-d', type=int, default=0,
32                         help="video device id")
33     parser.add_argument('-a', type=int, default=0,
34                         help="take picture automaticaly every A seconds")
35     parser.add_argument('-r', type=int, nargs=2, default=[640, 480],
36                         help="set camera resolution")
37     args = parser.parse_args()
38
39     res=(args.r[0], args.r[1])
40
41     cam = Camera(vid=args.d, res=res)
42     screen = Screen(res)
43
44     im_number = 0
45
46     saving_dir = "./captured/" + time.strftime("%Y-%m-%d %H:%M")
47
48     if not os.path.isdir(saving_dir):
49         os.makedirs(saving_dir)
50     
51     if args.a > 0:
52         last = 0
53         clock = pygame.time.Clock()
54         done = False
55
56         while not done:
57             for event in pygame.event.get():
58                 if event.type == pygame.QUIT:
59                     done = True
60             if time.time() - last > args.a:
61                 last = time.time()
62                 im = cam.get_image()
63                 screen.display_picture(im)
64                 im.save(saving_dir + "{0:0>3}.jpg".format(im_number), 'JPEG')
65                 im_number += 1
66             clock.tick(15)
67
68     else:
69         while True:
70             event = pygame.event.wait()
71             if event.type == QUIT:
72                 break
73             if event.type != KEYDOWN:
74                 continue
75
76             im = cam.get_image()
77             screen.display_picture(im)
78             im.save(saving_dir + "{0:0>3}.jpg".format(im_number), 'JPEG')
79             im_number += 1
80
81     del cam
82     
83 if __name__ == '__main__':
84     try:
85         main()
86     finally:
87         pygame.quit()