[Pycodeocr-main] SF.net SVN: pycodeocr:[41] branches/laserb/Modules
Status: Beta
Brought to you by:
drtrigon
|
From: <la...@us...> - 2011-03-16 21:07:24
|
Revision: 41
http://pycodeocr.svn.sourceforge.net/pycodeocr/?rev=41&view=rev
Author: laserb
Date: 2011-03-16 21:07:17 +0000 (Wed, 16 Mar 2011)
Log Message:
-----------
split files / make RunSane threaded
Added Paths:
-----------
branches/laserb/Modules/RunSane.py
branches/laserb/Modules/blacklist_manager.py
Added: branches/laserb/Modules/RunSane.py
===================================================================
--- branches/laserb/Modules/RunSane.py (rev 0)
+++ branches/laserb/Modules/RunSane.py 2011-03-16 21:07:17 UTC (rev 41)
@@ -0,0 +1,176 @@
+import sane, threading, time, gtk.gdk
+from Modules.blacklist_manager import blacklist_manager
+
+## sSANE/PIL interface python wrapper/bindings.
+class RunSANE(threading.Thread):
+ # "scanimage --format=tif --resolution 300 --mode Gray > %s.tif"
+ # "scanimage --format=tif --resolution 600 --mode Gray -t 82 -y 20 -l 60 -x 155.9 > %s.tif"
+ #cmd_scan = "scanimage --format=tif --resolution 600 --mode Gray -t %d -l %d -y %d -x %d > %s.tif"
+
+ resolution = 600
+
+ ## Init of sane interface -> device.
+ def __init__(self, notebook, progress, device_chooser_button, BlacklistMgr,device_chooser_event):
+ print "init sane python interface ..."
+ self.device_chooser_event = device_chooser_event
+ self.notebook = notebook
+ self.progress = progress
+ self.device_chooser_button = device_chooser_button
+ self.BlacklistMgr = BlacklistMgr
+
+ threading.Thread.__init__(self)
+ # Get the path set up properly
+ #sys.path.append('.')
+
+ def run(self):
+
+ # get blacklist
+ self.blacklist = self.BlacklistMgr.read_blacklist()
+
+ # init SANE
+ self.n = 4.
+ self.progress(0.,"init sane python interface ...")
+ try:
+ self.version = sane.init()
+ self.progress(1./self.n,"init sane python interface ... search devices")
+ # get sane devices
+ self.devices = sane.get_devices()
+
+ # filter blacklisted devices
+ self.devices = self.BlacklistMgr.filter_devices(self.devices)
+ # check how many devices we found
+ if len(self.devices) == 0:
+ self.progress(0./self.n,"No device found.")
+ self.device_chooser_button.set_visible(False)
+ self.found_scanner = False
+ return
+ elif len(self.devices) > 1:
+ # simply continue and select device in GUI ( see init_sane )
+ self.progress(2./self.n,"More than one device found.")
+ self.device_chooser_button.set_visible(True)
+ self.found_scanner = None
+ self.device_treeview.set_cursor(0)
+
+ # show tab with device list
+ # choose device and press ok to initialize scanner
+ self.notebook.set_current_page(2)
+
+ gtk.gdk.threads_leave()
+ self.device_chooser_event.wait()
+
+ self.devnr = self.device_treeview.get_cursor()[0][0]
+
+ else:
+ # only one device found, continue
+ self.progress(2./self.n,"Device: %s" % self.devices[0][1]+" "+self.devices[0][2])
+ self.device_chooser_button.set_visible(False)
+ self.devnr = 0
+
+ except:
+ # No device found at all
+ self.found_scanner = False
+ self.device_chooser_button.set_visible(False)
+ print "No sane device found. Retry again."
+ self.progress(0./self.n,"No sane device found. Retry again.")
+ return
+
+ ## Init of sane interface -> scanner
+ print "Use device number: "+str(self.devnr)
+ try:
+ # finish init device
+ self.dev = self.devices[self.devnr][0] # choose device
+ print "%s" % self.dev
+ self.progress(3./self.n,"Device initialized. Open scanner...")
+
+ # open scanner device
+ self.scanner = sane.open(self.dev)
+ self.params = self.scanner.get_parameters()
+ self.opts = self.scanner.get_options()
+ self.found_scanner = True
+
+ self.progress(4./self.n,"Ready: %s" % self.devices[self.devnr][1]+" "+self.devices[self.devnr][2])
+ #self.info()
+ self.notebook.set_current_page(0)
+ self.device_chooser_button.set_visible(False)
+ print "done."
+
+ except:
+ # init scanner failed. maybe device has no scanner
+ self.found_scanner = False
+ print "Loading sane device failed. Retry again."
+ self.progress(0./self.n,"Loading sane device failed. Retry again.")
+ gtk.gdk.threads_leave()
+
+
+
+ ## Not init of sane and scanner, but of scan operation.
+ def post_init(self, coords, out_filename):
+ self.coords = coords
+ self.out_filename = out_filename
+
+ ## call
+ def __call__(self):
+ (self.error, self.stdout, self.stderr) = self._run()
+ return self.error
+
+ ## Scan and save the PIL image object to file.
+ # @see http://mail.python.org/pipermail/image-sig/1997-June/000307.html
+ # @see http://sane-pygtk.sourceforge.net/)
+ def _run(self):
+ try:
+ # Set scan parameters (also with higher resolution!)
+ (t, l, y, x) = self.coords
+ self.scanner.tl_y = float(t)
+ self.scanner.tl_x = float(l)
+ self.scanner.br_y = (float(y) + self.scanner.tl_y)
+ self.scanner.br_x = (float(x) + self.scanner.tl_x)
+ self.scanner.resolution = self.resolution
+ self.scanner.mode = "Gray"
+
+ # Initiate the scan
+ self.scanner.start()
+
+ # Get an Image object containing the scanned image
+ im = self.scanner.snap()
+
+ # Write the image out as a TIFF file (or whatever)
+ im.save(self.out_filename)
+
+ #self.scanner.stop()
+ except:
+ return (True, "error", sys.exc_info()[1])
+
+ return (False, "ok", "")
+
+ ## Show some info about the scanner and SANE.
+ def info(self):
+# print self.entry3.get_text()
+ entrybuffer = self.entry3.get_buffer()
+ entrybuffer.delete(entrybuffer.get_start_iter(),entrybuffer.get_end_iter())
+ # redirect print to device textbuffer
+ logdev = logging(entrybuffer)
+ #sys.stdout = logdev
+# print """SANE version: %s
+#Selected device= %s
+#SaneDev object= %s
+#""" % ( self.version ,self.dev,self.scanner )
+# enditer = entrybuffer.get_end_iter()
+# entrybuffer.insert(enditer,"test")
+ print 'SANE version: %s' % repr(self.version).replace('array',' ')
+ print 'Available devices= %s' % repr(self.devices).replace('array',' ')
+ print 'Selected device= %s' % self.dev
+
+ print 'SaneDev object= %s' % self.scanner
+ print 'Device parameters: %s' % repr(self.params).replace('array',' ')
+ print 'Device options:', "\n",self.opts
+
+ # redirect print again to old textbuffer
+ #sys.stdout = self.logging
+
+ def retry(self):
+ try:
+ self.scanner.close()
+ except:
+ pass
+ sane.exit()
+ self.run()
Added: branches/laserb/Modules/blacklist_manager.py
===================================================================
--- branches/laserb/Modules/blacklist_manager.py (rev 0)
+++ branches/laserb/Modules/blacklist_manager.py 2011-03-16 21:07:17 UTC (rev 41)
@@ -0,0 +1,83 @@
+import gtk, gobject
+
+class blacklist_manager:
+ def __init__(self):
+ pass
+
+ def post_init(self, device_treeview, blacklist_treeview, local_path):
+ self.device_treeview = device_treeview
+ self.blacklist_treeview = blacklist_treeview
+ self.local_path = local_path
+
+ # create self.treeview things
+ self.list_store = gtk.ListStore(gobject.TYPE_STRING)
+ self.device_treeview.set_model(self.list_store)
+ col = gtk.TreeViewColumn("Select Device to use:", gtk.CellRendererText(),text=0)
+ self.device_treeview.append_column(col)
+
+ # create self.treeview things
+ self.blacklist_store = gtk.ListStore(gobject.TYPE_STRING)
+ self.blacklist_treeview.set_model(self.blacklist_store)
+ blackcol = gtk.TreeViewColumn("Blacklisted Devices:", gtk.CellRendererText(),text=0)
+ self.blacklist_treeview.append_column(blackcol)
+ return
+
+ def filter_devices(self, devices1):
+ # init filtered list
+ devices = []
+
+ print "\n"
+ # add found devices to self.treeview
+ self.list_store.clear()
+ for i in range(len(devices1)):
+ # filter devices: remove blacklisted devices
+ if not devices1[i][1]+" "+devices1[i][2] in self.blacklist:
+ devices.append(devices1[i])
+ print str(i)+": "+devices1[i][1]+" "+devices1[i][2]
+ self.list_store.append([devices1[i][1]+" "+devices1[i][2]])
+
+ return devices
+
+ ## get blacklisted devices
+ def read_blacklist(self):
+ self.blacklist_store.clear()
+
+ bl = open('%s/blacklist' % self.local_path, 'r' )
+ temp = bl.readlines()
+ bl.close
+ self.blacklist = []
+ for line in temp:
+ self.blacklist.append(line.strip())
+ self.blacklist_store.append([line.strip()])
+ return self.blacklist
+
+ ## write blacklisted devices
+ # @todo add UI way to blacklist device
+ def write_blacklist(self):
+ bl = open('%s/blacklist' % self.local_path, 'w' )
+
+ model= self.blacklist_treeview.get_model()
+ iter = model.get_iter_first()
+ while( iter != None):
+ data = model.get_value(iter, 0)
+ bl.write(data+"\n")
+ iter = model.iter_next(iter)
+ bl.close()
+
+ ## add device to blacklist
+ def blacklist_add(self, widget=None):
+ treeselection = self.device_treeview.get_selection()
+ model, iter = treeselection.get_selected()
+ data = model.get_value(iter, 0)
+ self.blacklist_store.append([data])
+ self.list_store.remove(iter)
+ self.write_blacklist()
+
+ ## remove device from blacklist
+ def blacklist_remove(self, widget=None):
+ treeselection = self.blacklist_treeview.get_selection()
+ model, iter =treeselection.get_selected()
+ data = model.get_value(iter, 0)
+ self.list_store.append([data])
+ self.blacklist_store.remove(iter)
+ self.write_blacklist()
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|