[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. |