capture class
authorTomas Musil <tomik.musil@gmail.com>
Fri, 7 Sep 2012 21:56:26 +0000 (23:56 +0200)
committerTomas Musil <tomik.musil@gmail.com>
Fri, 7 Sep 2012 21:56:26 +0000 (23:56 +0200)
capture.py

index dbaef64..963f6ed 100755 (executable)
@@ -25,46 +25,37 @@ class Screen:
         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)
 
-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()
+        self.im_number = 0
 
-    res=(args.r[0], args.r[1])
+        self.saving_dir = "./captured/" + time.strftime("%Y-%m-%d %H:%M/")
 
-    cam = Camera(vid=args.d, res=res)
-    screen = Screen(res)
+        if not os.path.isdir(self.saving_dir):
+            os.makedirs(self.saving_dir)
 
-    im_number = 0
+    def __del__(self):
+        del self.cam
 
-    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
+    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 = cam.get_image()
-        screen.display_picture(im)
-        clock.tick(5)
+            im = self.cam.get_image()
+            self.screen.display_picture(im)
+            clock.tick(5)
 
-   
-    if args.a > 0:
+    def auto(self, interval):
         last = 0
         clock = pygame.time.Clock()
         done = False
@@ -73,15 +64,15 @@ def main():
             for event in pygame.event.get():
                 if event.type == pygame.QUIT:
                     done = True
-            if time.time() - last > args.a:
+            if time.time() - last > interval:
                 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
+                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)
 
-    else:
+    def manual(self):
         while True:
             event = pygame.event.wait()
             if event.type == QUIT:
@@ -90,11 +81,32 @@ def main():
                 continue
 
             im = cam.get_image()
-            screen.display_picture(im)
-            im.save(saving_dir + "{0:0>3}.jpg".format(im_number), 'JPEG')
-            im_number += 1
+            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('-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()
 
-    del cam
+    res=(args.r[0], args.r[1])
+    capture = Capture(args.d, res)
+
+    capture.live()
+
+    if args.a > 0:
+        capture.auto(args.a)
+    else:
+        capture.manual()
+    del capture
     
 if __name__ == '__main__':
     try: