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