works without pygame, where not needed
[imago.git] / src / imago.py
index b87da99..698ef2d 100755 (executable)
@@ -1,9 +1,6 @@
 #!/usr/bin/env python
 
-"""Go image recognition.
-
-This is the main UI module of Imago.
-"""
+"""Go image recognition."""
 
 import sys
 import os
@@ -11,14 +8,12 @@ import argparse
 import pickle
 
 try:
-    import Image, ImageDraw
+    from PIL import Image, ImageDraw
 except ImportError, msg:
     print >> sys.stderr, msg
     sys.exit(1)
 
-import im_debug
 import linef
-import manual
 import intrsc
 import gridf3 as gridf
 import output
@@ -76,16 +71,29 @@ def main():
         do_something = Imsave("saved/" + args.files[0][:-4] + "_" +
                                str(image.size[0]) + "/").save
     else:
+        import im_debug
         do_something = im_debug.show
 
     if verbose:
-        def logger(m):
-            print >> sys.stderr, m
+        import time
+        class Logger:
+            def __init__(self):
+                self.t = 0
+
+            def __call__(self, m):
+                t_n = time.time()
+                if self.t > 0:
+                    print >> sys.stderr, "\t" + str(t_n - self.t)
+                print >> sys.stderr, m
+                self.t = t_n
+        logger = Logger()
+
     else:
         def logger(m):
             pass
         
     if args.manual_mode:
+        import manual
         try:
             lines = manual.find_lines(image)
         except manual.UserQuitError:
@@ -122,8 +130,12 @@ def main():
                 draw.line(l, fill=(64, 255, 64), width=1)
             do_something(im_g, "grid", name="grid")
 
-    board = intrsc.board(image, lines, show_all, do_something)
+    intersections = intrsc.b_intersects(image, lines, show_all, do_something, logger)
+    board = intrsc.board(image, intersections, show_all, do_something, logger)
 
+    logger("finished")
+
+    # TODO! refactor this mess:
     if len(args.files) == 1:
 
         if args.sgf_output:
@@ -143,7 +155,10 @@ def main():
                 print >> sys.stderr, "Opening", f
             if image.mode == 'P':
                 image = image.convert('RGB')
-            board = intrsc.board(image, lines, show_all, do_something)
+            if image.size[0] > args.w:
+                image = image.resize((args.w, int((float(args.w)/image.size[0]) *
+                              image.size[1])), Image.ANTIALIAS)
+            board = intrsc.board(image, intersections, show_all, do_something, logger)
             if args.sgf_output:
                 game.addMove(board)
             else:
@@ -160,14 +175,15 @@ class Imsave():
         self.saving_num = 0
 
     def save(self, image, title='', name=None):
+        im_format = ('.png', 'PNG')
         if name:
-            filename = self.saving_dir + name + '.jpg'
+            filename = self.saving_dir + name + im_format[0]
         else:
-            filename = self.saving_dir + "{0:0>2}".format(self.saving_num) + '.jpg'
+            filename = self.saving_dir + "{0:0>3}".format(self.saving_num) + im_format[0]
             self.saving_num += 1
         if not os.path.isdir(self.saving_dir):
             os.makedirs(self.saving_dir)
-        image.save(filename, 'JPEG')
+        image.save(filename, im_format[1])
 
 if __name__ == '__main__':
     try: