[Pycodeocr-main] SF.net SVN: pycodeocr:[70] branches/redesign
Status: Beta
Brought to you by:
drtrigon
From: <la...@us...> - 2014-08-28 14:57:09
|
Revision: 70 http://sourceforge.net/p/pycodeocr/code/70 Author: laserb Date: 2014-08-28 14:57:01 +0000 (Thu, 28 Aug 2014) Log Message: ----------- Update tests and add missing files. Modified Paths: -------------- branches/redesign/Recognition/__init__.py branches/redesign/Test/Tests.py Added Paths: ----------- branches/redesign/Test/TestGUI.py branches/redesign/Test/TestScannerGUI.py branches/redesign/gtkGUI/Chooser.py branches/redesign/gtkGUI/ImagePreview.glade branches/redesign/gtkGUI/PropertyWidgets/ branches/redesign/gtkGUI/PropertyWidgets/Coordinates.py branches/redesign/gtkGUI/PropertyWidgets/Filechooser.py branches/redesign/gtkGUI/PropertyWidgets/ListChooser.py branches/redesign/gtkGUI/PropertyWidgets/PropertyWidgetBase.py branches/redesign/gtkGUI/PropertyWidgets/__init__.py branches/redesign/gtkGUI/test.py Removed Paths: ------------- branches/redesign/Source/Sources.py Modified: branches/redesign/Recognition/__init__.py =================================================================== --- branches/redesign/Recognition/__init__.py 2014-08-28 14:37:06 UTC (rev 69) +++ branches/redesign/Recognition/__init__.py 2014-08-28 14:57:01 UTC (rev 70) @@ -1,4 +1,5 @@ from Recognition.ImageRecognition import RunRecognition +from Recognition.ImageRecognition import RecognitionData from Recognition.Barcode import Barcode from Recognition.DataMatrix import DataMatrix from Recognition.DTMX import DTMX Deleted: branches/redesign/Source/Sources.py =================================================================== --- branches/redesign/Source/Sources.py 2014-08-28 14:37:06 UTC (rev 69) +++ branches/redesign/Source/Sources.py 2014-08-28 14:57:01 UTC (rev 70) @@ -1,33 +0,0 @@ -# -*- coding: utf8 -*- - -import sane -from Source import Scanner - -class Sources(object): - def __init__(self): - self.sources = [] - - def searchScanner(self): - sane.init() - srcs = sane.get_devices() - for src in srcs: - self.sources.append(Scanner(src)) - - def getSources(self): - return self.sources - - def getSource(self, name): - for src in self.sources: - if src.getName() == name: - return src - - def addSource(self, source): - self.sources.append(source) - - def removeSource(self, source): - i = 0 - for src in self.sources: - if src.equals(source): - self.sources.pop(i); - return - i = i + 1 Added: branches/redesign/Test/TestGUI.py =================================================================== --- branches/redesign/Test/TestGUI.py (rev 0) +++ branches/redesign/Test/TestGUI.py 2014-08-28 14:57:01 UTC (rev 70) @@ -0,0 +1,114 @@ +# @see http://www.python-kurs.eu/threads.php + +import gtk +from gtkGUI.ProgressBar import ProgressBar +from gtkGUI.ImagePreview import ImagePreview +import threading, time +from PIL import Image +import Recognition + + +class TestGUI(threading.Thread): + def __init__(self, widget, on_button_pressed): + threading.Thread.__init__(self) + self.widget = widget + self.on_button_pressed = on_button_pressed + + # @see https://git.gnome.org/browse/pygtk/tree/examples/gtk/widget.py + def run(self): + self.win = gtk.Window() + self.win.set_border_width(5) + self.win.set_title('Widget test') + self.win.connect('delete-event', gtk.main_quit) + + frame = gtk.Frame("Example frame") + self.win.add(frame) + + hbox = gtk.HBox() + frame.add(hbox) + + button = gtk.Button("Click") + button.connect("pressed",self.on_button_pressed) + hbox.add(button) + hbox.add(self.widget) + + self.win.show_all() + gtk.main() + + + ## Refresh window during running processes. + def refresh(self): + self.win.queue_draw() + time.sleep(0.1) # give also some time to the user... :) + while gtk.events_pending(): + gtk.main_iteration() + +def progressbar_on_button_pressed(event): + for i in range(10): + progressbar.nextProgress("clicked " + str(progressbar.getProgress())) + t.refresh() + print progressbar.getProgress() == 10 + progressbar.resetProgress("reset") + print progressbar.getProgress() == 0 + + +def imagePreview_on_button_pressed(event): + imagePreview.setOutput("Recognition failed.", False) + for i in range(10): + t.refresh() + imagePreview.setOutput("Success", True) + for i in range(10): + t.refresh() + imagePreview.setOutput("Reset") + +def complete_on_button_pressed(event): + imagePreview.setOutput("Recognition failed.", False) + for i in range(10): + progressbar.nextProgress("clicked " + str(progressbar.getProgress())) + t.refresh() + imagePreview.setOutput("Success", True) + for i in range(10): + t.refresh() + imagePreview.setOutput("Reset") + progressbar.resetProgress("reset") + for i in range(10): + t.refresh() + + image = Image.open("/home/rf/Firefox_wallpaper.png") + recognitionData = Recognition.RecognitionData(image) + recognitionData.setContent("Data recognized", True) + imagePreview.setRecognitionData(recognitionData) + + +# main routin +if __name__ == '__main__': + errors = 0 + # init tests + progressbar = ProgressBar(10) + t = TestGUI(progressbar, progressbar_on_button_pressed) + t.start() + t.join() + + # init tests + imagePreview = ImagePreview() + image = Image.open("/home/rf/bin/pyCodeOCR/PyCodeOCR.png") + imagePreview.setImage(image) + t = TestGUI(imagePreview, imagePreview_on_button_pressed) + t.start() + t.join() + + vbox = gtk.VBox() + imagePreview = ImagePreview() + image = Image.open("/home/rf/bin/pyCodeOCR/PyCodeOCR.png") + imagePreview.setImage(image) + progressbar = ProgressBar(10) + vbox.pack_start(imagePreview,True,True,0) + vbox.pack_end(progressbar,False,False,0) + vbox.show_all() + t = TestGUI(vbox, complete_on_button_pressed) + t.start() + t.join() + + + + Added: branches/redesign/Test/TestScannerGUI.py =================================================================== --- branches/redesign/Test/TestScannerGUI.py (rev 0) +++ branches/redesign/Test/TestScannerGUI.py 2014-08-28 14:57:01 UTC (rev 70) @@ -0,0 +1,81 @@ +# @see http://www.python-kurs.eu/threads.php + +import gtk +from gtkGUI.ProgressBar import ProgressBar +from gtkGUI.ImagePreview import ImagePreview +import threading, time +from PIL import Image +import Recognition, Source + + +class TestGUI(threading.Thread): + def __init__(self): + threading.Thread.__init__(self) + + # @see https://git.gnome.org/browse/pygtk/tree/examples/gtk/widget.py + def run(self): + srcs = Source.Scanner() + srcs.searchScanner() + self.source = srcs.activated()[0][1] + + self.win = gtk.Window() + self.win.set_border_width(5) + self.win.set_title('Widget test') + self.win.connect('delete-event', gtk.main_quit) + + frame = gtk.Frame("Example frame") + self.win.add(frame) + + hbox = gtk.HBox() + frame.add(hbox) + + button = gtk.Button("Click") + button.connect("pressed",self.on_button_pressed) + hbox.add(button) + + vbox = gtk.VBox() + self.imagePreview = ImagePreview() + self.progressbar = ProgressBar(10) + vbox.pack_start(self.imagePreview,True,True,0) + vbox.pack_end(self.progressbar,False,False,0) + + hbox.add(vbox) + + self.win.show_all() + gtk.main() + + + ## Refresh window during running processes. + def refresh(self): + self.win.queue_draw() + time.sleep(0.1) # give also some time to the user... :) + while gtk.events_pending(): + gtk.main_iteration() + + def on_button_pressed(self, event): + esr = Recognition.ESR() + esr.setRotate([180]) + + stdScannerData = Source.StdScannerData() + scannerData = stdScannerData.getStdScannerData("180 deg") + + + runRecognition = Recognition.RunRecognition(self.source, scannerData, esr) + runRecognition() + self.imagePreview.setRecognitionData(esr.getRecognitionData()) + + +# main routin +if __name__ == '__main__': + errors = 0 + # init tests + + + + t = TestGUI() + t.start() + t.join() + + + + Modified: branches/redesign/Test/Tests.py =================================================================== --- branches/redesign/Test/Tests.py 2014-08-28 14:37:06 UTC (rev 69) +++ branches/redesign/Test/Tests.py 2014-08-28 14:57:01 UTC (rev 70) @@ -43,9 +43,9 @@ ## Look for some scanners. def Scanners(self): print "Test search scanners ..." - srcs = Source.Sources() + srcs = Source.Scanner() srcs.searchScanner() - if len(srcs.getSources()) == 0: + if len(srcs.activated()[0][1]) == 0: print "Test failed." return False else: @@ -91,8 +91,9 @@ def TestRecognition(self, source, imageRecognition, image, expected): print "Test image recognition from file for %s ..." % imageRecognition.getName() scannerData = Source.ScannerData("default") - runRecognition = Recognition.RunRecognition(source, scannerData, imageRecognition) + runRecognition = Recognition.RunRecognition(source, scannerData, imageRecognition, "") (check, text) = runRecognition.recognize(image) + text = text[0][1] if check and text == expected: print "Test passed." return True @@ -105,9 +106,9 @@ # @pre A source, an imageRecognition and some parameters # @post The image gets scanned by the source and recognized by the method specified in imageRecognition. # The result is checked with what we expected. - def TestRunRecognition(self, source, parameters, imageRecognition): + def TestRunRecognition(self, source, parameters, imageRecognition, recognitionParameters): print "Test image recognition from %s for %s ..." % (source.getName(),imageRecognition.getName()) - runRecognition = Recognition.RunRecognition(source, parameters, imageRecognition) + runRecognition = Recognition.RunRecognition(source, parameters, imageRecognition, recognitionParameters) (check, msg) = runRecognition() if check: print "Test passed." @@ -130,16 +131,6 @@ if not tests.Scanners(): exit() - # test reading and storing of scanner properties - srcs = Source.Sources() - srcs.searchScanner() - source = srcs.getSources()[0] - errors += not tests.SourceProperties(source) - - # test adding another source to the source-list - fileSource = Source.File("./TestImage.jpg","TestImage","file") - errors += not tests.AddSource(fileSource, "TestImage", "./TestImage.jpg") - # test image recognition without using source esr = Recognition.ESR() image = Image.open("./TestImage.jpg") @@ -150,14 +141,14 @@ # test image recognition with ESR from file source esr = Recognition.ESR() stdScannerData = Source.StdScannerData() - errors += not tests.TestRunRecognition(fileSource, "", esr) + fileSource = Source.File() + errors += not tests.TestRunRecognition(fileSource, ["./TestImage.jpg"], esr, "") # test image recognition with ESR form scanner source # esr = Recognition.ESR() -# esr.setRotate([180]) # stdScannerData = Source.StdScannerData() # scannerData = stdScannerData.getStdScannerData("180 deg") -# errors += not tests.TestRunRecognition(source, scannerData, esr) +# errors += not tests.TestRunRecognition(source, scannerData, esr, "") print "All test done." print "Errors: %s" % errors Added: branches/redesign/gtkGUI/Chooser.py =================================================================== --- branches/redesign/gtkGUI/Chooser.py (rev 0) +++ branches/redesign/gtkGUI/Chooser.py 2014-08-28 14:57:01 UTC (rev 70) @@ -0,0 +1,82 @@ +import inspect +import gtk +import PropertyWidgets + +class Chooser(gtk.VBox): + def __init__(self, members, ignore): + #Initialize the VBox + gtk.VBox.__init__(self,False,0) + self.combobox = gtk.ComboBox() + self.add(self.combobox) + self.selection = None + self.members = members + self.ignore = ignore + self.list = {} + + self.selectionWidgets = [] + self.propertyVBox = gtk.VBox() + self.add(self.propertyVBox) + + self.propertyWidgets = {} + for name, obj in inspect.getmembers(PropertyWidgets): + self.propertyWidgets[name] = obj + + + # init ComboBox + self.initComboBox() + + # get list of available classes + self.getList() + + def initComboBox(self): + self.liststore = gtk.ListStore(str) + self.cell = gtk.CellRendererText() + self.combobox.set_model(self.liststore) + self.combobox.pack_start(self.cell, True) + self.combobox.add_attribute(self.cell, 'text', 0) + self.combobox.connect("changed", self.getActive) + + + def getSelection(self): + return self.selection + + def getProperties(self): + properties = [] + for widget in self.selectionWidgets: + properties.append(widget.getSelection()) + return properties + + def getList(self): + self.list = {} + self.liststore.clear() + for name, obj in inspect.getmembers(self.members): + if name[0] != '_' and not name in self.ignore: + self.list[name] = obj + + keys = self.list.keys() + keys.sort() + for key in keys: + self.liststore.append([key]) + self.combobox.set_active(0) + return self.list + + def getActive(self, widget = None): + text = self.combobox.get_active_text() + self.selection = self.list[text] + self.selection = self.selection() + + for widget in self.selectionWidgets: + self.propertyVBox.remove(widget) + + self.selectionWidgets = [] + widgets = self.selection.activated() + if widgets: + for options in widgets: + if options[0] in self.propertyWidgets.keys(): + widget = self.propertyWidgets[options[0]] + widget = widget(options[1]) + self.selectionWidgets.append(widget) + self.propertyVBox.add(widget) + widget.show_all() + return self.selection + \ No newline at end of file Added: branches/redesign/gtkGUI/ImagePreview.glade =================================================================== (Binary files differ) Index: branches/redesign/gtkGUI/ImagePreview.glade =================================================================== --- branches/redesign/gtkGUI/ImagePreview.glade 2014-08-28 14:37:06 UTC (rev 69) +++ branches/redesign/gtkGUI/ImagePreview.glade 2014-08-28 14:57:01 UTC (rev 70) Property changes on: branches/redesign/gtkGUI/ImagePreview.glade ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/xml \ No newline at end of property Added: branches/redesign/gtkGUI/PropertyWidgets/Coordinates.py =================================================================== --- branches/redesign/gtkGUI/PropertyWidgets/Coordinates.py (rev 0) +++ branches/redesign/gtkGUI/PropertyWidgets/Coordinates.py 2014-08-28 14:57:01 UTC (rev 70) @@ -0,0 +1,94 @@ +from PropertyWidgetBase import PropertyWidgetBase +from Source.Scanner import ScannerData +from Source.Scanner import StdScannerData +import gtk + +class Coordinates(PropertyWidgetBase): + def __init__(self, options): + super(Coordinates,self).__init__(options) + self.stdScannerData = StdScannerData() + + self.profile = gtk.HBox() + self.position = gtk.HBox() + self.size = gtk.HBox() + self.rotation = gtk.HBox() + + self.add(self.profile) + self.add(self.position) + self.add(self.size) + self.add(self.rotation) + + self.initPosition() + self.initSize() + self.initRotation() + self.initprofile() + + self.setProfile("default") + + def initprofile(self): + label = gtk.Label("Profiles") + self.profileCombobox = gtk.ComboBox() + self.liststore = gtk.ListStore(str) + self.cell = gtk.CellRendererText() + self.profileCombobox.set_model(self.liststore) + self.profileCombobox.pack_start(self.cell, True) + self.profileCombobox.add_attribute(self.cell, 'text', 0) + self.liststore.clear() + for data in self.stdScannerData.getStdScannerDatas(): + self.liststore.append([data.getName()]) + self.profileCombobox.set_active(0) + self.profileCombobox.connect("changed",self.on_profile_changed) + + self.profile.add(label) + self.profile.add(self.profileCombobox) + + def on_profile_changed(self, widget = None): + profile = self.profileCombobox.get_active_text() + self.setProfile(profile) + + def initPosition(self): + label = gtk.Label("Position") + self.position_x = gtk.SpinButton(None,1,0) + self.position_x.get_adjustment().set_all(0,0,1000,1,10,0) + self.position_y = gtk.SpinButton(None,1,0) + self.position_y.get_adjustment().set_all(0,0,1000,1,10,0) + + self.position.add(label) + self.position.add(self.position_x) + self.position.add(self.position_y) + + def initSize(self): + label = gtk.Label("Size") + self.size_x = gtk.SpinButton(None,1,0) + self.size_x.get_adjustment().set_all(0,0,1000,1,10,0) + self.size_y = gtk.SpinButton(None,1,0) + self.size_y.get_adjustment().set_all(0,0,1000,1,10,0) + + self.size.add(label) + self.size.add(self.size_x) + self.size.add(self.size_y) + + def initRotation(self): + label = gtk.Label("Rotation") + self.rotate = gtk.SpinButton(None,1,0) + self.rotate.get_adjustment().set_all(0,0,360,10,90,0) + + self.rotation.add(label) + self.rotation.add(self.rotate) + + def setProfile(self, profile): + self.scannerData = self.stdScannerData.getStdScannerData(profile) + (position_x, position_y) = self.scannerData.getPosition() + (size_x, size_y) = self.scannerData.getSize() + self.position_x.set_value(position_x) + self.position_y.set_value(position_y) + self.size_x.set_value(size_x) + self.size_y.set_value(size_y) + self.rotate.set_value(self.scannerData.getRotation()) + + def getSelection(self): + selection = ScannerData("custom") + selection.setPosition(self.position_x.get_value_as_int(), self.position_y.get_value_as_int()) + selection.setSize(self.size_x.get_value_as_int(), self.size_y.get_value_as_int()) + selection.setRotation(self.rotate.get_value_as_int()) + return selection \ No newline at end of file Added: branches/redesign/gtkGUI/PropertyWidgets/Filechooser.py =================================================================== --- branches/redesign/gtkGUI/PropertyWidgets/Filechooser.py (rev 0) +++ branches/redesign/gtkGUI/PropertyWidgets/Filechooser.py 2014-08-28 14:57:01 UTC (rev 70) @@ -0,0 +1,13 @@ +from PropertyWidgetBase import PropertyWidgetBase +import gtk + +class Filechooser(PropertyWidgetBase): + def __init__(self, options): + super(Filechooser,self).__init__(options) + self.widget = gtk.FileChooserButton("File") + self.widget.set_action(gtk.FILE_CHOOSER_ACTION_OPEN) + #self.widget = gtk.Label("test") + self.add(self.widget) + + def getSelection(self): + return self.widget.get_filename() \ No newline at end of file Added: branches/redesign/gtkGUI/PropertyWidgets/ListChooser.py =================================================================== --- branches/redesign/gtkGUI/PropertyWidgets/ListChooser.py (rev 0) +++ branches/redesign/gtkGUI/PropertyWidgets/ListChooser.py 2014-08-28 14:57:01 UTC (rev 70) @@ -0,0 +1,30 @@ +from PropertyWidgetBase import PropertyWidgetBase +import gtk + +class ListChooser(PropertyWidgetBase): + def __init__(self, options): + super(ListChooser,self).__init__(options) + self.combobox = gtk.ComboBox() + self.add(self.combobox) + + self.initComboBox() + self.getList() + + def initComboBox(self): + self.liststore = gtk.ListStore(str) + self.cell = gtk.CellRendererText() + self.combobox.set_model(self.liststore) + self.combobox.pack_start(self.cell, True) + self.combobox.add_attribute(self.cell, 'text', 0) + + + def getList(self): + self.liststore.clear() + for option in self.options: + self.liststore.append([option]) + self.combobox.set_active(0) + return + + def getSelection(self): + selection = self.combobox.get_active_text() + return selection \ No newline at end of file Added: branches/redesign/gtkGUI/PropertyWidgets/PropertyWidgetBase.py =================================================================== --- branches/redesign/gtkGUI/PropertyWidgets/PropertyWidgetBase.py (rev 0) +++ branches/redesign/gtkGUI/PropertyWidgets/PropertyWidgetBase.py 2014-08-28 14:57:01 UTC (rev 70) @@ -0,0 +1,10 @@ +import gtk + +class PropertyWidgetBase(gtk.VBox): + def __init__(self, options): + #Initialize the VBox + gtk.VBox.__init__(self,False,0) + self.options = options + + def getSelection(self): + pass \ No newline at end of file Added: branches/redesign/gtkGUI/PropertyWidgets/__init__.py =================================================================== --- branches/redesign/gtkGUI/PropertyWidgets/__init__.py (rev 0) +++ branches/redesign/gtkGUI/PropertyWidgets/__init__.py 2014-08-28 14:57:01 UTC (rev 70) @@ -0,0 +1,3 @@ +from Filechooser import Filechooser +from Coordinates import Coordinates +from ListChooser import ListChooser \ No newline at end of file Added: branches/redesign/gtkGUI/test.py =================================================================== --- branches/redesign/gtkGUI/test.py (rev 0) +++ branches/redesign/gtkGUI/test.py 2014-08-28 14:57:01 UTC (rev 70) @@ -0,0 +1,81 @@ +import gtk, sys + +class ComboButton(gtk.HBox): + + def __init__(self,menuitems): + gtk.HBox.__init__(self,False,0) + """ + if( !(isinstance(menuitems,types.TupleType) or + isinstance(menuitems,type.ListType))): + raise(ComboButtonException()) + """ + self.set_border_width(2) + self.entry = gtk.Entry() + menu = gtk.Menu() + for i in menuitems: + item = gtk.MenuItem(i) + item.show() + menu.append(item) + item.connect( "activate",self.menu_response,i) + + button = gtk.Button() + arrow = gtk.Arrow(gtk.ARROW_DOWN,gtk.SHADOW_IN) + button.add(arrow) + self.progressbar = gtk.ProgressBar() + self.pack_start(button,False,False,0) + self.pack_end(self.entry,True,True,0) + self.pack_end(self.progressbar,True,True,0) + + button.connect("event",self.button_popup,menu) + + + self.show_all() + + def button_popup(self,widget,event,menu): + if event.type == gtk.gdk.BUTTON_PRESS: + menu.popup(None,None,None,event.button,event.time) + return True + return False + + def menu_response(self,widget,str): + print "%s was clicked" % str + buffer = self.entry.get_text() + self.entry.set_text(buffer + str ) + + + def entry_call(self,widget,event): + print "event is of %s type" % event.type + + def set_active(self,number): + pass + + def get_text(self): + return self.entry.get_text() + + def set_text(self,text): + self.entry.set_text(text) + +def main(args): + win = gtk.Window() + win.set_border_width(5) + win.set_title('Widget test') + win.connect('delete-event', gtk.main_quit) + + frame = gtk.Frame("Example frame") + win.add(frame) + + w = ComboButton(["a","b"]) + frame.add(w) + + win.show_all() + + gtk.main() + + + +# main routin +if __name__ == '__main__': + errors = 0 + + # init tests + sys.exit(main(sys.argv)) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |