[Pycodeocr-main] SF.net SVN: pycodeocr:[68] branches/redesign
Status: Beta
Brought to you by:
drtrigon
From: <la...@us...> - 2014-08-27 06:55:59
|
Revision: 68 http://sourceforge.net/p/pycodeocr/code/68 Author: laserb Date: 2014-08-27 06:55:49 +0000 (Wed, 27 Aug 2014) Log Message: ----------- Add options for source and recognition. Modified Paths: -------------- branches/redesign/PyCodeOCR.py branches/redesign/Recognition/ESR.py branches/redesign/Recognition/ImageRecognition.py branches/redesign/Recognition/__init__.py branches/redesign/Source/File.py branches/redesign/Source/Scanner.py branches/redesign/Source/SourceBase.py branches/redesign/gtkGUI/ImagePreview.py Modified: branches/redesign/PyCodeOCR.py =================================================================== --- branches/redesign/PyCodeOCR.py 2014-08-26 18:12:03 UTC (rev 67) +++ branches/redesign/PyCodeOCR.py 2014-08-27 06:55:49 UTC (rev 68) @@ -107,17 +107,15 @@ def on_button_pressed(self, event): # get image recognition and initialize self.imageRecognition = self.recognitionChooser.getSelection() - option = self.recognitionChooser.getOption() - self.imageRecognition.setRotate([180]) + recognitionProperties = self.recognitionChooser.getProperties() # get source and initialize self.source = self.sourceChooser.getSelection() - self.source.setAddress(self.source.scanners[0][0]) - stdScannerData = Source.StdScannerData() - scannerData = stdScannerData.getStdScannerData("180 deg") + sourceProperties = self.sourceChooser.getProperties() # run recognition - runRecognition = Recognition.RunRecognition(self.source, scannerData, self.imageRecognition) + self.progressbar.resetProgress("") + runRecognition = Recognition.RunRecognition(self.source, sourceProperties, self.imageRecognition, recognitionProperties) runRecognition.connect("updateRecognition", self.onProgressUpdate) runRecognition.connect("recognized", self.on_recognized) t = threading.Thread(target=runRecognition) Modified: branches/redesign/Recognition/ESR.py =================================================================== --- branches/redesign/Recognition/ESR.py 2014-08-26 18:12:03 UTC (rev 67) +++ branches/redesign/Recognition/ESR.py 2014-08-27 06:55:49 UTC (rev 68) @@ -87,12 +87,9 @@ return str(uebertrag) == number[-1] # @overwrite recognizeImage - def recognizeImage(self, image, rotate = None): - super(ESR,self).recognizeImage(image) - - # if no rotation is set, use default: [0, 90, 90, 90] - if rotate == None: - rotate = self.rotate + def recognizeImage(self, image, recognitionProperties): + rotate = self.rotate + super(ESR,self).recognizeImage(image, recognitionProperties) # try all rotation and test if data is valid for angle in rotate: @@ -126,9 +123,6 @@ # return the data return self.recognitionData.getContent() - def activated(self): - return ["0 deg", "90 deg", "180 deg", "270 deg"] - ## Character correction after recogition (on basis that there should be numbers and few special chars). # # @test Add unittest to check correct operation of this important module/function. Modified: branches/redesign/Recognition/ImageRecognition.py =================================================================== --- branches/redesign/Recognition/ImageRecognition.py 2014-08-26 18:12:03 UTC (rev 67) +++ branches/redesign/Recognition/ImageRecognition.py 2014-08-27 06:55:49 UTC (rev 68) @@ -33,7 +33,7 @@ self.depth = 8 self.rotate = [0,90,90,90] self.recognitionData = None - + ## Verify if data is valid. # @pre image acquired and recognized # @post information extracted @@ -42,7 +42,7 @@ def verify(self): (check, msg) = self.doVerification() self.recognitionData.setValid(check) - return (True, msg) + return (check, msg) ## get image and associated data # @pre image recognized @@ -55,13 +55,13 @@ # @param image # @post information is extracted # @return extracted information - def recognizeImage(self,image): + def recognizeImage(self,image, recognitionProperties): recognitionData = RecognitionData(image) self.recognitionData = recognitionData return self.recognitionData.getContent() def activated(self): - print "is activated" + return [] ## get name # @return name @@ -153,10 +153,11 @@ ## Run the recognition and verify the information class RunRecognition(gobject.GObject): ## init - def __init__(self, source, data, imageRecognition): + def __init__(self, source, sourceProperties, imageRecognition, recognitionProperties): self.__gobject_init__() self.source = source - self.data = data + self.sourceProperties = sourceProperties + self.recognitionProperties = recognitionProperties self.imageRecognition = imageRecognition ## call @@ -164,7 +165,7 @@ # data if the acquired data is image, error-message otherwise def __call__(self): self.emit("updateRecognition","Get Image ...") - image = self.source.getImage(self.data) + image = self.source.getImage(self.sourceProperties) return self.recognize(image) ## recognize image @@ -173,7 +174,7 @@ def recognize(self, image): # do recognition self.emit("updateRecognition","Recognize image ...") - self.imageRecognition.recognizeImage(image) + self.imageRecognition.recognizeImage(image, self.recognitionProperties) # verify data self.emit("updateRecognition","Verify data ...") @@ -187,7 +188,7 @@ return (True, self.imageRecognition.getRecognitionData().getContent()) # if data is invalid return error message - self.emit("updateRecognition","Data is not valid.") + self.emit("updateRecognition","Data is not valid. "+msg) return (False, msg) gobject.type_register(RunRecognition) Modified: branches/redesign/Recognition/__init__.py =================================================================== --- branches/redesign/Recognition/__init__.py 2014-08-26 18:12:03 UTC (rev 67) +++ branches/redesign/Recognition/__init__.py 2014-08-27 06:55:49 UTC (rev 68) @@ -1,5 +1,3 @@ -from Recognition.ImageRecognition import ImageRecognitionBase -from Recognition.ImageRecognition import RecognitionData from Recognition.ImageRecognition import RunRecognition from Recognition.Barcode import Barcode from Recognition.DataMatrix import DataMatrix Modified: branches/redesign/Source/File.py =================================================================== --- branches/redesign/Source/File.py 2014-08-26 18:12:03 UTC (rev 67) +++ branches/redesign/Source/File.py 2014-08-27 06:55:49 UTC (rev 68) @@ -28,5 +28,9 @@ ## get a new image from file # @return image - def getImage(self,data = None): + def getImage(self, data): + self.address = data[0] return Image.open(self.address) + + def activated(self): + return [["Filechooser",[]]] Modified: branches/redesign/Source/Scanner.py =================================================================== --- branches/redesign/Source/Scanner.py 2014-08-26 18:12:03 UTC (rev 67) +++ branches/redesign/Source/Scanner.py 2014-08-27 06:55:49 UTC (rev 68) @@ -50,18 +50,22 @@ def searchScanner(self): sane.init() self.scanners = sane.get_devices() + + def getScanner(self,name): + for scanner in self.scanners: + if scanner[1] == name: + return scanner[0] + return None ## get a new image from a sane device # @param size and position of the image # @return image - def getImage(self,scannerData = None): - # if no data is given use predefined default. - if not scannerData: - stdScannerData = StdScannerData() - scannerData = stdScannerData.getStdScannerData("default") + def getImage(self, properties): + name = properties[0] + scannerData = properties[1] # open scanner - self.scanner=sane.open(self.address) + self.scanner=sane.open(self.getScanner(name)) # get an image, return an error if it failed try: @@ -95,11 +99,12 @@ return sys.exc_info()[1] + def activated(self): scanner_names = [] for scanner in self.scanners: scanner_names.append(scanner[1]) - return scanner_names + return [["ListChooser",scanner_names],["Coordinates",["Bottom", "Left", "Top", "Right"]]] ## @@ -120,6 +125,7 @@ self.size = [100,100] self.color = 'gray' self.resolution = 600 + self.rotation = 0 ## get name # @return name @@ -169,6 +175,12 @@ # @return resolution def getResolution(self): return self.resolution + + def setRotation(self, rotation): + self.rotation = rotation + + def getRotation(self): + return self.rotation ## @@ -184,7 +196,7 @@ # init def __init__(self): ## default scanning coordinates - self.stdScannerData = [ScannerData("default"),ScannerData("0 deg"),ScannerData("90 deg"),ScannerData("180 deg"),ScannerData("270 deg"),ScannerData("A4")] + self.stdScannerData = [ScannerData("default"),ScannerData("Bottom"),ScannerData("Left"),ScannerData("Top"),ScannerData("Right"),ScannerData("A4")] self.setInitialParameters() ## Generate a set of default scanning properties @@ -192,14 +204,17 @@ def setInitialParameters(self): self.getStdScannerData("default").setPosition(60,82) self.getStdScannerData("default").setSize(155,20) - self.getStdScannerData("0 deg").setPosition(60,82) - self.getStdScannerData("0 deg").setSize(155,20) - self.getStdScannerData("90 deg").setPosition(82,1) - self.getStdScannerData("90 deg").setSize(20,150) - self.getStdScannerData("180 deg").setPosition(1,3) - self.getStdScannerData("180 deg").setSize(150,20) - self.getStdScannerData("270 deg").setPosition(3,60) - self.getStdScannerData("270 deg").setSize(20,150) + self.getStdScannerData("Bottom").setPosition(60,82) + self.getStdScannerData("Bottom").setSize(155,20) + self.getStdScannerData("Left").setPosition(82,1) + self.getStdScannerData("Left").setSize(20,150) + self.getStdScannerData("Left").setRotation(90) + self.getStdScannerData("Top").setPosition(1,3) + self.getStdScannerData("Top").setSize(150,20) + self.getStdScannerData("Top").setRotation(180) + self.getStdScannerData("Right").setPosition(3,60) + self.getStdScannerData("Right").setSize(20,150) + self.getStdScannerData("Right").setRotation(270) # scan whole range (A4: http://www.cl.cam.ac.uk/~mgk25/iso-paper.html) self.getStdScannerData("A4").setPosition(0,0) self.getStdScannerData("A4").setSize(215,296) Modified: branches/redesign/Source/SourceBase.py =================================================================== --- branches/redesign/Source/SourceBase.py 2014-08-26 18:12:03 UTC (rev 67) +++ branches/redesign/Source/SourceBase.py 2014-08-27 06:55:49 UTC (rev 68) @@ -36,7 +36,7 @@ return image def activated(self): - print "is activated" + return [] ## return name of source # @return name Modified: branches/redesign/gtkGUI/ImagePreview.py =================================================================== --- branches/redesign/gtkGUI/ImagePreview.py 2014-08-26 18:12:03 UTC (rev 67) +++ branches/redesign/gtkGUI/ImagePreview.py 2014-08-27 06:55:49 UTC (rev 68) @@ -86,6 +86,24 @@ pixbuf = self.image_to_pixbuf(image) image = gtk.Image() image.set_from_pixbuf(pixbuf) + + width = pixbuf.get_width() + height = pixbuf.get_height() + + target_width = 300 + target_height = 50 + + # get current width and height + width, height = pixbuf.get_width(), pixbuf.get_height() + + # get scale for width and height + scale_width, scale_height = float(target_width)/width, float(target_height)/height + + # target scale is minimum scale for width and height + scale = min(scale_width,scale_height) + + # scale pixbuf + pixbuf = pixbuf.scale_simple(int(width*scale), int(height*scale), gtk.gdk.INTERP_BILINEAR) self.main_image.set_from_pixbuf( pixbuf ) self.on_image_resize(self.main_image, "", "") This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |