[ocrfeeder] Refactor the way to add an image and include an image pre-processor
- From: Joaquim Manuel Pereira Rocha <jrocha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [ocrfeeder] Refactor the way to add an image and include an image pre-processor
- Date: Tue, 27 Jul 2010 22:14:12 +0000 (UTC)
commit 5a931e81b18433da0a2761b397119861bf4d006f
Author: Joaquim Rocha <jrocha igalia com>
Date: Tue Jul 20 17:42:09 2010 +0200
Refactor the way to add an image and include an image pre-processor
widgetModeler.ImageReviewer_Controler: Refactor the code to be simpler and
add an image pre-processing method with the image deskewer on it;
studio.StudioBuilder: Adapt to the new ImageReviewer_Controler way
of adding images.
studio/studioBuilder.py | 18 ++++-------
studio/widgetModeler.py | 75 ++++++++++++++++++++++++++++++++++++++--------
2 files changed, 69 insertions(+), 24 deletions(-)
---
diff --git a/studio/studioBuilder.py b/studio/studioBuilder.py
index b376822..14aea98 100644
--- a/studio/studioBuilder.py
+++ b/studio/studioBuilder.py
@@ -26,7 +26,7 @@ import os.path
import urllib
from studio import widgetPresenter
from studio.widgetModeler import SourceImagesSelector, SourceImagesSelectorIconView, ImageReviewer_Controler
-from studio.dataHolder import create_images_dict_from_liststore, DataBox, TextData
+from studio.dataHolder import DataBox, TextData
from studio.customWidgets import SelectableBoxesArea
from feeder.ocrEngines import Engine, OcrEnginesManager
from configuration import ConfigurationManager
@@ -60,14 +60,12 @@ class Studio:
self.title = OCRFEEDER_STUDIO_NAME
self.main_window = widgetPresenter.MainWindow()
self.main_window.setTitle(self.title)
- cli_command_retriever = ArgsRetriever(sys.argv)
- imgs = cli_command_retriever.getParams('--images')
self.configuration_manager = ConfigurationManager()
self.ocr_engines_manager = OcrEnginesManager(self.configuration_manager)
self.ocr_engines_manager.makeEnginesFromFolder(self.configuration_manager.user_engines_folder)
self.ocr_engines = self.ocr_engines_manager.ocr_engines
self.configuration_manager.loadConfiguration()
- self.source_images_selector = SourceImagesSelector(imgs)
+ self.source_images_selector = SourceImagesSelector()
self.source_images_selector.connect('selection_changed', self.selectionChanged)
self.source_images_icon_view = SourceImagesSelectorIconView(self.source_images_selector)
self.source_images_icon_view.setDeleteCurrentPageFunction(self.deleteCurrentPage)
@@ -78,9 +76,7 @@ class Studio:
self.source_images_icon_view.show()
self.main_window.main_area_left.add_with_viewport(self.source_images_icon_view)
self.images_selectable_area = {}
- self.images_dict = create_images_dict_from_liststore(self.source_images_selector.list_store)
self.source_images_controler = ImageReviewer_Controler(self.main_window,
- self.images_dict,
self.source_images_icon_view,
self.ocr_engines,
self.configuration_manager)
@@ -106,6 +102,10 @@ class Studio:
self.main_window.setHeader(menubar_callback_dict, toolbar_callback_dict)
self.main_window.setDestroyEvent(self.quit)
+ cli_command_retriever = ArgsRetriever(sys.argv)
+ imgs = cli_command_retriever.getParams('--images')
+ if imgs:
+ self.__addImagesToReviewer(imgs)
dirs = cli_command_retriever.getParams('--dir')
if dirs:
self.__addImagesToReviewer(lib.getImagesFromFolder(dirs[0]))
@@ -231,11 +231,7 @@ class Studio:
def __addImagesToReviewer(self, images):
if not images:
return
- for image in images:
- pixbuf, image, iter = self.source_images_selector.addImage(image)
- self.source_images_controler.addImage(pixbuf, image)
- tree_path = self.source_images_selector.list_store.get_path(iter)
- self.source_images_icon_view.select_path(tree_path)
+ self.source_images_controler.addImages(images)
def __recognizeCurrentPageAction(self, widget):
self.source_images_controler.recognizeCurrentPage()
diff --git a/studio/widgetModeler.py b/studio/widgetModeler.py
index 9b5bb33..5522bf6 100644
--- a/studio/widgetModeler.py
+++ b/studio/widgetModeler.py
@@ -27,7 +27,7 @@ from pango import FontDescription, SCALE
from studio.configuration import ProjectSaver, ProjectLoader, ConfigurationManager
from util import graphics, ALIGN_LEFT, ALIGN_RIGHT, ALIGN_CENTER, ALIGN_FILL, \
PAPER_SIZES
-from util.lib import debug
+from util.lib import debug, getNonExistingFileName
from util import constants
from util.asyncworker import AsyncItem
from widgetPresenter import BoxEditor, PagesToExportDialog, FileDialog, \
@@ -368,7 +368,7 @@ class ImageReviewer:
class ImageReviewer_Controler:
- def __init__(self, main_window, images_dict, source_images_selector_widget,
+ def __init__(self, main_window, source_images_selector_widget,
ocr_engines, configuration_manager,
selection_changed_signal = 'selection-changed'):
self.main_window = main_window
@@ -378,26 +378,73 @@ class ImageReviewer_Controler:
self.ocr_engines = ocr_engines
self.configuration_manager = configuration_manager
self.tripple_statusbar = self.main_window.tripple_statusbar
- for key, image in images_dict.items():
- self.addImage(key, image)
self.source_images_selector_widget.connect(selection_changed_signal, self.selectImageReviewer)
- def addImage(self, pixbuf, image):
+ def __createdImageReviewer(self, pixbuf, image):
image_reviewer = ImageReviewer(self.main_window, image, self.ocr_engines)
image_reviewer.selectable_boxes_area.connect('changed_zoom', self.__setZoomStatus)
image_reviewer.setTextFillColor(self.configuration_manager.text_fill)
image_reviewer.setBoxesStrokeColor(self.configuration_manager.boxes_stroke)
image_reviewer.setImageFillColor(self.configuration_manager.image_fill)
self.image_reviewer_dict[pixbuf] = image_reviewer
- self.addImageReviewer(image_reviewer.reviewer_area)
+ self.notebook.append_page(image_reviewer.reviewer_area, None)
return image_reviewer
- def addImageFromPath(self, image_path):
- pixbuf, image, iter = self.source_images_selector_widget.source_images_selector.addImage(image_path)
- return self.addImage(pixbuf, image)
+ def addImages(self, image_path_list):
+ dialog = QueuedEventsProgressDialog(self.main_window.window)
+ item_list = []
+ item_list_length = len(image_path_list)
+ if not self.configuration_manager.deskew_images_after_addition:
+ for index in range(0, len(image_path_list)):
+ self.__addImage(image_path_list[index], index == 0)
+ return
+ for index in range(0, item_list_length):
+ image_path = image_path_list[index]
+ item = AsyncItem(self.__imagePreProcessing,
+ (image_path,),
+ self.__imagePreProcessingFinishedCb,
+ (dialog,
+ index == item_list_length - 1,
+ index == 0))
+ if item_list_length == 1:
+ item_info = (_('Preparing image'), _('Please waitâ?¦'))
+ else:
+ item_info = (_('Preparing image %(current_index)s/%(total)s') % \
+ {'current_index': index + 1,
+ 'total': item_list_length},
+ _('Please waitâ?¦'))
+ item_list.append((item_info,item))
+ dialog.setItemsList(item_list)
+ dialog.run()
- def addImageReviewer(self, image_reviewer_widget):
- self.notebook.append_page(image_reviewer_widget, None)
+ def __imagePreProcessing(self, image_path):
+ return self.__deskewImage(image_path)
+
+ def __imagePreProcessingFinishedCb(self, dialog, finished,
+ select_image, image_path, error):
+ self.__addImage(image_path, select_image)
+ if finished:
+ dialog.cancel()
+
+ def __addImage(self, image_path, select_image = True):
+ selector_widget = self.source_images_selector_widget
+ pixbuf, image, iter = \
+ selector_widget.source_images_selector.addImage(image_path)
+ reviewer = self.__createdImageReviewer(pixbuf, image)
+ if select_image:
+ path = selector_widget.source_images_selector.list_store.get_path(iter)
+ selector_widget.select_path(path)
+ return reviewer
+
+ def __deskewImage(self, image_path):
+ tmp_dir = self.configuration_manager.temporary_dir
+ deskewed_name = os.path.join(tmp_dir, image_path)
+ if os.path.exists(deskewed_name):
+ deskewed_name = getNonExistingFileName(deskewed_name)
+ image_deskewer = ImageDeskewer()
+ if image_deskewer.deskew(image_path, deskewed_name):
+ return deskewed_name
+ return image_path
def selectImageReviewer(self, widget):
pixbuf = self.source_images_selector_widget.getSelectedPixbuf()
@@ -521,8 +568,10 @@ class ImageReviewer_Controler:
pages = project_loader.loadConfiguration()
if pages and clear_current:
self.clear()
- for page in pages:
- image_reviewer = self.addImageFromPath(page.image_path)
+ for index in range(0, len(pages)):
+ page = pages[index]
+ image_reviewer = self.__addImage(page.image_path,
+ select_image = index == 0)
image_reviewer.updatePageData(page)
open_dialog.destroy()
return project_file
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]