capture -- live preview
[imago.git] / capture.py
index b9879d8..dbaef64 100755 (executable)
@@ -2,8 +2,10 @@
 
 """Go image capture"""
 
+import os
 import sys
 import argparse
+import time
 
 import pygame
 from pygame.locals import QUIT, KEYDOWN
@@ -12,9 +14,9 @@ import Image
 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()
 
@@ -28,22 +30,71 @@ def main():
     parser = argparse.ArgumentParser(description=__doc__)
     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(vid=args.d)
-    screen = Screen()
+
+    res=(args.r[0], args.r[1])
+
+    cam = Camera(vid=args.d, res=res)
+    screen = Screen(res)
 
     im_number = 0
 
-    while True:
-        event = pygame.event.wait()
-        if event.type == QUIT:
-            break
-        elif event.type == KEYDOWN:
+    saving_dir = "./captured/" + time.strftime("%Y-%m-%d %H:%M/")
+
+    if not os.path.isdir(saving_dir):
+        os.makedirs(saving_dir)
+
+    done = False
+    clock = pygame.time.Clock()
+    while not done: #live preview
+        for event in pygame.event.get():
+            if event.type == pygame.QUIT:
+                done = True
+                del cam
+                sys.exit()
+            if event.type == pygame.KEYDOWN:
+                done = True
+
+        im = cam.get_image()
+        screen.display_picture(im)
+        clock.tick(5)
+
+   
+    if args.a > 0:
+        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 > args.a:
+                last = time.time()
+                im = cam.get_image()
+                screen.display_picture(im)
+                im.save(saving_dir + "{0:0>3}.jpg".format(im_number), 'JPEG')
+                im_number += 1
+            clock.tick(15)
+
+    else:
+        while True:
+            event = pygame.event.wait()
+            if event.type == QUIT:
+                break
+            if event.type != KEYDOWN:
+                continue
+
             im = cam.get_image()
             screen.display_picture(im)
-            im.save("./captured/{0:0>3}.jpg".format(im_number), 'JPEG')
+            im.save(saving_dir + "{0:0>3}.jpg".format(im_number), 'JPEG')
             im_number += 1
+
+    del cam
     
 if __name__ == '__main__':
     try: