[Pycodeocr-main] SF.net SVN: pycodeocr:[22] PyCodeOCR.py
Status: Beta
Brought to you by:
drtrigon
From: <la...@us...> - 2010-09-07 20:59:53
|
Revision: 22 http://pycodeocr.svn.sourceforge.net/pycodeocr/?rev=22&view=rev Author: laserb Date: 2010-09-07 20:59:46 +0000 (Tue, 07 Sep 2010) Log Message: ----------- try to fix issue with file input. change inp_file to self.inp_file. only get filename if filechooserbutton1 changed. / changed datamatrix recognition to external dmtxread Modified Paths: -------------- PyCodeOCR.py Modified: PyCodeOCR.py =================================================================== --- PyCodeOCR.py 2010-09-07 14:29:34 UTC (rev 21) +++ PyCodeOCR.py 2010-09-07 20:59:46 UTC (rev 22) @@ -32,7 +32,7 @@ print "gocr found." # libdmtx bindings try: - from pydmtx import DataMatrix + #from pydmtx import DataMatrix pakages.append( "libdmtx" ) print "libdmtx and pydmtx found." except: pass @@ -247,6 +247,10 @@ def on_filechooserbutton1_file_set(self, source=None): self.radiobutton1.set_active(True) + self.inp_file = self.filechooserbutton1.get_filename() + if not os.path.exists(self.inp_file): + self.progress(0., "File not found!") + return None def toggle_orientation_sensitive(self, value): @@ -292,10 +296,17 @@ #self.on_combobox1_changed() # orientation mode self.scan_koords = std_scan_koords["A4"][0] self.mode = std_scan_koords["A4"][1] + #pydmtx recognition +# opt = { 'tmp_file': "02.jpg", # some issues with recogition +# 'recog_class': RunLibdmtx, # . +# 'recog_cmd': self.temp+"02.jpg", # of different file formats +# 'recog_error_msg': [ None ], # . + #dmtxread recognition opt = { 'tmp_file': "02.jpg", # some issues with recogition - 'recog_class': RunLibdmtx, # . - 'recog_cmd': self.temp+"02.jpg", # of different file formats - 'recog_error_msg': [ None ], # . + 'recog_class': RunExternal, # . + 'recog_cmd': "dmtxread "+self.temp+"02.jpg", # of different file formats + 'recog_error_msg': [ "error" ], # . + #opt = { 'tmp_file': "02.bmp", # and drawing/marking the # 'recog_cmd': (self.temp+"02.bmp", [ None ], RunLibdmtx), } # processed region(s)... #opt = { 'tmp_file': "02.png", # (but this should work for 'tif') @@ -329,10 +340,10 @@ #del self.run_sane else: # direct file input self.progress(1./max_steps, "Reading image...") - inp_file = self.filechooserbutton1.get_filename() - if not os.path.exists(inp_file): - self.progress(0., "File not found!") - return None + #self.inp_file = self.filechooserbutton1.get_filename() + #if not os.path.exists(self.inp_file): + # self.progress(0., "File not found!") + # return None self.refresh() if self.__stop: return @@ -340,7 +351,7 @@ # (2/?) self.progress(2./max_steps, "Adjusting image/picture data...") mode = self.mode - self.run_convert = RunExternal(self.cmd_convert % (inp_file, mode, self.temp+opt['tmp_file']), error_msg=[ "convert: unable to open image" ]) + self.run_convert = RunExternal(self.cmd_convert % (self.inp_file, mode, self.temp+opt['tmp_file']), error_msg=[ "convert: unable to open image" ]) # self.run_convert = RunMagickWand(inp_file, mode*90, self.temp+opt['tmp_file']) # improve quality by using imagemagicks filter and conversion capabilities... if self.run_convert(): @@ -391,11 +402,13 @@ data = eval( raw_data ) origdata = str(data) elif (op_mode == self.MDE['DataMatrix']): # 2: DataMatrix (libdmtx) - if self.run_recognition.count == 1: - data = self.run_recognition.message[0] - else: - data = str(self.run_recognition.message) - origdata = str(self.run_recognition.stats) + data = self.run_recognition.stdout + #pydmtx recognition +# if self.run_recognition.count == 1: +# data = self.run_recognition.message[0] +# else: +# data = str(self.run_recognition.message) +# origdata = str(self.run_recognition.stats) elif (op_mode == self.MDE['PDF417']): # 3: PDF417 barcode (pdf417decode/wine) data = self.run_recognition.stdout.split("\r\n")[1] origdata = data @@ -431,12 +444,15 @@ data = "type: " + data['type'] #check = check and ( len(data) in opt['valid_code_len'] ) # correct code len? elif (op_mode == self.MDE['DataMatrix']): # 2: DataMatrix (libdmtx) - check = not self.run_recognition.error - if check: - print self.run_recognition.decode - print self.run_recognition.count - #print self.run_recognition.message - print self.run_recognition.stats + check = not (self.run_recognition.error == "error") + #pydmtx recognition +# check = not self.run_recognition.error +# if check: +# print self.run_recognition.decode +# print self.run_recognition.count +# #print self.run_recognition.message +# print self.run_recognition.stats + elif (op_mode == self.MDE['PDF417']): # 3: PDF417 barcode (pdf417decode/wine) check = not self.run_recognition.error print data, len(data), check @@ -498,10 +514,10 @@ # open an image file (.bmp,.jpg,.png,.gif) you have in the working folder print imageFile[-3:] if imageFile[-3:] in ["bmp","jpg","png","gif"]: - print "already in right format" + #already in right format im1 = Image.open(imageFile) else: - print "convert Image" + #convert Image self.run_convert = RunExternal(self.cmd_convert % (imageFile, 0, self.temp+"04.jpg"), error_msg=[ "convert: unable to open image" ]) if self.run_convert(): self.progress(0., self.run_convert.stderr[:-1]) @@ -617,54 +633,54 @@ os.system( self.cmd ) return (False, "", "") -class RunLibdmtx: - """ Use libdmtx python wrapper/bindings (pydmtx). """ +#class RunLibdmtx: +# """ Use libdmtx python wrapper/bindings (pydmtx). """ - def __init__(self, cmd, error_msg): - #self.cmd = cmd - #self.error_msg += error_msg - self.filename = cmd +# def __init__(self, cmd, error_msg): +# #self.cmd = cmd +# #self.error_msg += error_msg +# self.filename = cmd - def __call__(self): - (self.error, self.stdout, self.stderr) = self._run() - return self.error +# def __call__(self): +# (self.error, self.stdout, self.stderr) = self._run() +# return self.error - # thanks to: http://www.pastequestion.com/blog/python/how-to-use-python-imaging-library.html - def _run(self): - """ Read a Data Matrix barcode. """ - dm_read = DataMatrix() - #print self.filename - img = Image.open(self.filename) - try: - self.decode = dm_read.decode(img.size[0], img.size[1], buffer(img.tostring())) - self.count = dm_read.count() - self.message = [ dm_read.message(i+1) for i in range(self.count) ] - self.stats = [ dm_read.stats(i+1) for i in range(self.count) ] - except: - return (True, "error", sys.exc_info()[1]) +# # thanks to: http://www.pastequestion.com/blog/python/how-to-use-python-imaging-library.html +# def _run(self): +# """ Read a Data Matrix barcode. """ +# dm_read = DataMatrix() +# #print self.filename +# img = Image.open(self.filename) +# try: +# self.decode = dm_read.decode(img.size[0], img.size[1], buffer(img.tostring())) +# self.count = dm_read.count() +# self.message = [ dm_read.message(i+1) for i in range(self.count) ] +# self.stats = [ dm_read.stats(i+1) for i in range(self.count) ] +# except: +# return (True, "error", sys.exc_info()[1]) - print "Detected %i DataMatrix barcodes" % self.count - for i in range(self.count): - print "Code # %i:" % (i+1) - print self.message[i] - stats = self.stats[i] - print stats +# print "Detected %i DataMatrix barcodes" % self.count +# for i in range(self.count): +# print "Code # %i:" % (i+1) +# print self.message[i] +# stats = self.stats[i] +# print stats - # mark the recognized region and save back to file - points = list(stats[1]) - points.append(points[0]) - draw = ImageDraw.Draw(img) - old = points[0] - for i, xy in enumerate(points[1:]): - #draw.line(old+xy, fill=(0, 255, 0), width=2) - #draw.line(old+xy, fill=(0, 255, 0)) - draw.line(old+xy, fill="rgb(0, 255, 0)") - old = xy - img.save(self.filename) +# # mark the recognized region and save back to file +# points = list(stats[1]) +# points.append(points[0]) +# draw = ImageDraw.Draw(img) +# old = points[0] +# for i, xy in enumerate(points[1:]): +# #draw.line(old+xy, fill=(0, 255, 0), width=2) +# #draw.line(old+xy, fill=(0, 255, 0)) +# draw.line(old+xy, fill="rgb(0, 255, 0)") +# old = xy +# img.save(self.filename) - #return (False, self.message, "") - #print self.stats, (self.count == 0) - return ((self.count == 0), self.message, "") +# #return (False, self.message, "") +# #print self.stats, (self.count == 0) +# return ((self.count == 0), self.message, "") #class RunMagickWand: # """ Use Python bindings to ImageMagick's MagickWand API. """ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |