refactor logger in linef
[imago.git] / imago_pack / imago.py
index c0e6202..18f13d3 100755 (executable)
@@ -1,6 +1,9 @@
 #!/usr/bin/env python
 
-"""Go image recognition."""
+"""Go image recognition.
+
+This is the main UI module of Imago.
+"""
 
 import sys
 import os
@@ -18,6 +21,7 @@ import linef
 import manual
 import intrsc
 import gridf
+import output
 
 def argument_parser():
     parser = argparse.ArgumentParser(description=__doc__)
@@ -35,11 +39,14 @@ def argument_parser():
                         help="save images instead of displaying them")
     parser.add_argument('-c', '--cache', dest='l_cache', action='store_true',
                         help="use cached lines")
+    parser.add_argument('-S', '--sgf', dest='sgf_output', action='store_true',
+                        help="output in SGF")
     parser.add_argument('-v', '--verbose', dest='verbose', action='store_true',
                         help="report progress")
     return parser
  
 
+# TODO factor this into smaller functions
 def main():
     """Main function of the program."""
     
@@ -60,10 +67,16 @@ def main():
     if image.size[0] > args.w:
         image = image.resize((args.w, int((float(args.w)/image.size[0]) *
                               image.size[1])), Image.ANTIALIAS)
-    do_something = im_debug.show
-    if args.saving:
+
+    if not show_all:
+        def nothing(a, b):
+            pass
+        do_something = nothing
+    elif args.saving:
         do_something = Imsave("saved/" + args.files[0][:-4] + "_" +
                                str(image.size[0]) + "/").save
+    else:
+        do_something = im_debug.show
 
     if args.manual_mode:
         try:
@@ -79,16 +92,15 @@ def main():
             if os.path.exists(filename):
                 lines, l1, l2, bounds, hough = pickle.load(open(filename))
                 print >> sys.stderr, "using cached results"
-                im_h = None
             else:
-                lines, l1, l2, bounds, hough, im_h = linef.find_lines(image, show_all, do_something, verbose)
+                lines, l1, l2, bounds, hough = linef.find_lines(image, show_all, do_something, verbose)
                 if not os.path.isdir(cache_dir):
                     os.makedirs(cache_dir)
                 d_file = open(filename, 'wb')
                 pickle.dump((lines, l1, l2, bounds, hough), d_file)
                 d_file.close()
         else:
-            lines, l1, l2, bounds, hough, im_h = linef.find_lines(image, show_all, do_something, verbose)
+            lines, l1, l2, bounds, hough = linef.find_lines(image, do_something, verbose)
 
         grid, lines = gridf.find(lines, image.size, l1, l2, bounds, hough,
                                  show_all, do_something)
@@ -101,22 +113,33 @@ def main():
 
     board = intrsc.board(image, lines, show_all, do_something)
 
-    #simple ASCII output:
-    for line in board:
-        print ' '.join(line)
+    if len(args.files) == 1:
+
+        if args.sgf_output:
+            print board.asSGFsetPos()
+        else:
+            print board
     
-    if len(args.files) > 1:
+    else:
+        game = output.Game(19, board) #TODO size parameter
         for f in args.files[1:]:
             try:
                 image = Image.open(f)
             except IOError, msg:
                 print >> sys.stderr, msg
                 continue
+            if verbose:
+                print >> sys.stderr, "Opening", f
             if image.mode == 'P':
                 image = image.convert('RGB')
             board = intrsc.board(image, lines, show_all, do_something)
-            for line in board:
-                print ' '.join(line)
+            if args.sgf_output:
+                game.addMove(board)
+            else:
+                print board
+
+        if args.sgf_output:
+            print game.asSGF()
 
     return 0
 
@@ -139,5 +162,5 @@ if __name__ == '__main__':
     try:
         sys.exit(main())
     except KeyboardInterrupt: #TODO does this work?
-        print "Interrupted."
+        print >> sys.stderr, "Interrupted."
         sys.exit(1)