particle swarm optimization
[imago.git] / capture.py
index 963f6ed..7f3234b 100755 (executable)
@@ -6,6 +6,8 @@ import os
 import sys
 import argparse
 import time
 import sys
 import argparse
 import time
+from threading import Thread
+from Queue import Queue, Empty
 
 import pygame
 from pygame.locals import QUIT, KEYDOWN
 
 import pygame
 from pygame.locals import QUIT, KEYDOWN
@@ -40,16 +42,26 @@ class Capture:
     def __del__(self):
         del self.cam
 
     def __del__(self):
         del self.cam
 
-    def live(self):
+    def live(self, q):
         done = False
         clock = pygame.time.Clock()
         while not done: #live preview
         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
+            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)
 
             im = self.cam.get_image()
             self.screen.display_picture(im)
@@ -66,10 +78,7 @@ class Capture:
                     done = True
             if time.time() - last > interval:
                 last = time.time()
                     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
+                self.take()
             clock.tick(15)
 
     def manual(self):
             clock.tick(15)
 
     def manual(self):
@@ -79,16 +88,20 @@ class Capture:
                 break
             if event.type != KEYDOWN:
                 continue
                 break
             if event.type != KEYDOWN:
                 continue
+            self.take()
+            
 
 
-            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 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
 
 
 def main():
     parser = argparse.ArgumentParser(description=__doc__)
 
 
 def main():
     parser = argparse.ArgumentParser(description=__doc__)
+    parser.add_argument('-c', '--cmd', dest='cmd', action='store_true',
+                    help="take commands from stdin")
     parser.add_argument('-d', type=int, default=0,
                         help="video device id")
     parser.add_argument('-a', type=int, default=0,
     parser.add_argument('-d', type=int, default=0,
                         help="video device id")
     parser.add_argument('-a', type=int, default=0,
@@ -100,12 +113,41 @@ def main():
     res=(args.r[0], args.r[1])
     capture = Capture(args.d, res)
 
     res=(args.r[0], args.r[1])
     capture = Capture(args.d, res)
 
-    capture.live()
 
 
-    if args.a > 0:
-        capture.auto(args.a)
+    if args.cmd:
+
+        def enqueue_input(queue):
+            for line in iter(sys.stdin.readline, b''):
+                queue.put(line)
+
+        q = Queue()
+        t = Thread(target=enqueue_input, args=(q,))
+        t.daemon = True 
+        t.start()
+        
+        capture.live(q)
+
+        clock = pygame.time.Clock()
+        while True:
+
+            try:
+                line = q.get_nowait() # or q.get(timeout=.1)
+            except Empty:
+                pass
+            else: 
+                if line == "take\n":
+                    capture.take()
+                elif line == "exit\n":
+                    break
+            clock.tick(10)
+
     else:
     else:
-        capture.manual()
+        capture.live(None)
+        if args.a > 0:
+            capture.auto(args.a)
+        else:
+            capture.manual()
+
     del capture
     
 if __name__ == '__main__':
     del capture
     
 if __name__ == '__main__':