Loading ballontranslator/ui/dl_manager.py +13 −12 Original line number Diff line number Diff line Loading @@ -3,7 +3,6 @@ from typing import Union import numpy as np import traceback from PyQt5.QtCore import QThread, pyqtSignal, QObject, QLocale from PyQt5.QtWidgets import QMessageBox Loading Loading @@ -403,23 +402,23 @@ class DLManager(QObject): self.textdetect_thread = TextDetectThread(self.dl_config) self.textdetect_thread.finish_set_module.connect(self.on_finish_setdetector) # self.textdetect_thread.finish_detect_page.connect(self.on_finish_detect_page) self.textdetect_thread.exception_occurred.connect(self.handleRunningException) self.textdetect_thread.exception_occurred.connect(self.handleRunTimeException) self.ocr_thread = OCRThread(self.dl_config) self.ocr_thread.finish_set_module.connect(self.on_finish_setocr) # self.ocr_thread.finish_ocr_page.connect(self.on_finish_ocr_page) self.ocr_thread.exception_occurred.connect(self.handleRunningException) self.ocr_thread.exception_occurred.connect(self.handleRunTimeException) self.translate_thread = TranslateThread(dl_config) self.translate_thread.progress_changed.connect(self.on_update_translate_progress) self.translate_thread.finish_set_module.connect(self.on_finish_settranslator) self.translate_thread.finish_translate_page.connect(self.on_finish_translate_page) self.translate_thread.exception_occurred.connect(self.handleRunningException) self.translate_thread.exception_occurred.connect(self.handleRunTimeException) self.inpaint_thread = InpaintThread(dl_config) self.inpaint_thread.finish_set_module.connect(self.on_finish_setinpainter) self.inpaint_thread.finish_inpaint.connect(self.on_finish_inpaint) self.inpaint_thread.exception_occurred.connect(self.handleRunningException) self.inpaint_thread.exception_occurred.connect(self.handleRunTimeException) self.progress_msgbox = ProgressMessageBox() Loading @@ -428,7 +427,7 @@ class DLManager(QObject): self.imgtrans_thread.update_ocr_progress.connect(self.on_update_ocr_progress) self.imgtrans_thread.update_translate_progress.connect(self.on_update_translate_progress) self.imgtrans_thread.update_inpaint_progress.connect(self.on_update_inpaint_progress) self.imgtrans_thread.exception_occurred.connect(self.handleRunningException) self.imgtrans_thread.exception_occurred.connect(self.handleRunTimeException) self.translator_panel = translator_panel = config_panel.trans_config_panel translator_setup_params = self.dl_config.translator_setup_params Loading Loading @@ -661,10 +660,10 @@ class DLManager(QObject): self.inpaint(**inpaint_dict) def on_settranslator_failed(self, translator: str, msg: str): self.handleRunningException(f'Failed to set translator {translator}', msg) self.handleRunTimeException(f'Failed to set translator {translator}', msg) def on_setinpainter_failed(self, inpainter: str, msg: str): self.handleRunningException(f'Failed to set inpainter {inpainter}', msg) self.handleRunTimeException(f'Failed to set inpainter {inpainter}', msg) def on_translatorsource_changed(self): text = self.translator_panel.source_combobox.currentText() Loading Loading @@ -719,12 +718,14 @@ class DLManager(QObject): param_key: str, param_content: str): module.updateParam(param_key, param_content) def handleRunningException(self, msg: str, detail: str = None): LOGGER.error(msg + '\n' + detail) def handleRunTimeException(self, msg: str, detail: str = None): if detail is not None: msg += ': ' + detail verbose = traceback.format_exc() LOGGER.error(msg + '\n' + verbose) err = QMessageBox() err.setText(msg) if detail is not None: err.setDetailedText(detail) err.setDetailedText(verbose) err.exec() def on_inpainter_checker_changed(self, is_checked: bool): Loading ballontranslator/ui/mainwindow.py +8 −8 Original line number Diff line number Diff line Loading @@ -2,12 +2,11 @@ import os.path as osp import os import json from PyQt5.QtWidgets import QMainWindow, QHBoxLayout, QVBoxLayout, QApplication, QStackedWidget, QWidget, QSizePolicy, QComboBox, QListView, QToolBar, QMenu, QSpacerItem, QPushButton, QGraphicsDropShadowEffect, QCheckBox, QToolButton, QSplitter, QListWidget, QShortcut, QListWidgetItem from PyQt5.QtCore import Qt, pyqtSignal, QPoint, QSize, QThread from PyQt5.QtGui import QGuiApplication, QIcon, QCloseEvent, QKeySequence, QImage, QPainter, QMouseEvent from PyQt5.QtWidgets import QMainWindow, QHBoxLayout, QVBoxLayout, QApplication, QStackedWidget, QWidget, QSplitter, QListWidget, QShortcut, QListWidgetItem from PyQt5.QtCore import Qt, QPoint, QSize from PyQt5.QtGui import QGuiApplication, QIcon, QCloseEvent, QKeySequence, QImage, QPainter from utils.logger import logger as LOGGER from .misc import ProjImgTrans from .canvas import Canvas from .configpanel import ConfigPanel Loading @@ -18,7 +17,7 @@ from .scenetext_manager import SceneTextManager from .mainwindowbars import TitleBar, LeftBar, RightBar, BottomBar from .io_thread import ImgSaveThread from .stylewidgets import FrameLessMessageBox from .constants import STYLESHEET_PATH, CONFIG_PATH, DPI, LDPI, LANG_SUPPORT_VERTICAL, DRAWPANEL_WIDTH from .constants import STYLESHEET_PATH, CONFIG_PATH, LANG_SUPPORT_VERTICAL from . import constants class PageListView(QListWidget): Loading @@ -38,7 +37,6 @@ class MainWindow(QMainWindow): super().__init__(*args, **kwargs) self.setWindowFlags(Qt.WindowType.FramelessWindowHint) constants.DPI = QGuiApplication.primaryScreen().physicalDotsPerInch() constants.LDPI = QGuiApplication.primaryScreen().logicalDotsPerInch() self.app = app Loading Loading @@ -201,7 +199,7 @@ class MainWindow(QMainWindow): except Exception as e: LOGGER.exception(e) LOGGER.warning("Failed to load project from " + directory) self.dl_manager.handleRunningException(self.tr('Failed to load project ') + directory, '') self.dl_manager.handleRunTimeException(self.tr('Failed to load project ') + directory, '') return self.proj_directory = directory self.titleBar.setTitleContent(osp.basename(directory)) Loading Loading @@ -427,8 +425,10 @@ class MainWindow(QMainWindow): self.bottomBar.inpainterStatBtn.updateStatus(inpainter) def on_transpagebtn_pressed(self, run_target: bool): page_key = self.imgtrans_proj.current_img if page_key is None: self.bottomBar.transTranspageBtn.setRunText() return if run_target: self.st_manager.updateTextBlkList() self.dl_manager.translatePage(run_target, page_key) Loading ballontranslator/ui/mainwindowbars.py +2 −3 Original line number Diff line number Diff line Loading @@ -8,7 +8,7 @@ from PyQt5.QtGui import QMouseEvent, QKeySequence from typing import List from .stylewidgets import Widget, PaintQSlider from .constants import WINDOW_BORDER_WIDTH, BOTTOMBAR_HEIGHT, DRAG_DIR_NONE, DRAG_DIR_HOR, DRAG_DIR_VER, DRAG_DIR_BDIAG, DRAG_DIR_FDIAG from .constants import WINDOW_BORDER_WIDTH, BOTTOMBAR_HEIGHT, DRAG_DIR_NONE, DRAG_DIR_VER, DRAG_DIR_BDIAG, DRAG_DIR_FDIAG class ShowPageListChecker(QCheckBox): Loading Loading @@ -45,11 +45,11 @@ class RunStopTextBtn(StatusButton): def on_pressed(self): self.running = not self.running self.run_target.emit(self.running) if self.running: self.setStopText() else: self.setRunText() self.run_target.emit(self.running) def setRunText(self): self.setText(self.run_text) Loading Loading @@ -266,7 +266,6 @@ class LeftBar(Widget): def onSaveProj(self): self.save_proj.emit() pass def onExportAsDoc(self): raise NotImplementedError Loading ballontranslator/ui/misc.py +9 −2 Original line number Diff line number Diff line Loading @@ -8,11 +8,13 @@ from collections import OrderedDict from typing import Tuple, Union, List, Dict from PyQt5.QtGui import QPixmap, QColor, QImage from . import constants from .constants import DEFAULT_FONT_FAMILY from utils.logger import logger as LOGGER from utils.io_utils import find_all_imgs, NumpyEncoder, imread, imwrite from dl.textdetector.textblock import TextBlock from . import constants # return bgr tuple def qrgb2bgr(color: Union[QColor, Tuple, List] = None) -> Tuple[int, int, int]: if color is not None: Loading Loading @@ -101,6 +103,7 @@ class Proj: proj.load_from_dict(proj_dict) return proj class ProjImgTrans: def __init__(self, directory: str = None): Loading Loading @@ -166,7 +169,11 @@ class ProjImgTrans: except Exception as e: raise ProjectNotSupportedException(e) if 'current_img' in proj_dict: self.set_current_img(proj_dict['current_img']) current_img = proj_dict['current_img'] try: self.set_current_img(current_img) except ImgnameNotInProjectException: LOGGER.warning(f'{current_img} not found.') else: self.set_current_img_byidx(0) Loading ballontranslator/ui/scenetext_manager.py +2 −0 Original line number Diff line number Diff line Loading @@ -417,6 +417,8 @@ class SceneTextManager(QObject): def updateTextBlkList(self): cbl = self.imgtrans_proj.current_block_list() if cbl is None: return cbl.clear() for blk_item, trans_pair in zip(self.textblk_item_list, self.pairwidget_list): if not blk_item.document().isEmpty(): Loading Loading
ballontranslator/ui/dl_manager.py +13 −12 Original line number Diff line number Diff line Loading @@ -3,7 +3,6 @@ from typing import Union import numpy as np import traceback from PyQt5.QtCore import QThread, pyqtSignal, QObject, QLocale from PyQt5.QtWidgets import QMessageBox Loading Loading @@ -403,23 +402,23 @@ class DLManager(QObject): self.textdetect_thread = TextDetectThread(self.dl_config) self.textdetect_thread.finish_set_module.connect(self.on_finish_setdetector) # self.textdetect_thread.finish_detect_page.connect(self.on_finish_detect_page) self.textdetect_thread.exception_occurred.connect(self.handleRunningException) self.textdetect_thread.exception_occurred.connect(self.handleRunTimeException) self.ocr_thread = OCRThread(self.dl_config) self.ocr_thread.finish_set_module.connect(self.on_finish_setocr) # self.ocr_thread.finish_ocr_page.connect(self.on_finish_ocr_page) self.ocr_thread.exception_occurred.connect(self.handleRunningException) self.ocr_thread.exception_occurred.connect(self.handleRunTimeException) self.translate_thread = TranslateThread(dl_config) self.translate_thread.progress_changed.connect(self.on_update_translate_progress) self.translate_thread.finish_set_module.connect(self.on_finish_settranslator) self.translate_thread.finish_translate_page.connect(self.on_finish_translate_page) self.translate_thread.exception_occurred.connect(self.handleRunningException) self.translate_thread.exception_occurred.connect(self.handleRunTimeException) self.inpaint_thread = InpaintThread(dl_config) self.inpaint_thread.finish_set_module.connect(self.on_finish_setinpainter) self.inpaint_thread.finish_inpaint.connect(self.on_finish_inpaint) self.inpaint_thread.exception_occurred.connect(self.handleRunningException) self.inpaint_thread.exception_occurred.connect(self.handleRunTimeException) self.progress_msgbox = ProgressMessageBox() Loading @@ -428,7 +427,7 @@ class DLManager(QObject): self.imgtrans_thread.update_ocr_progress.connect(self.on_update_ocr_progress) self.imgtrans_thread.update_translate_progress.connect(self.on_update_translate_progress) self.imgtrans_thread.update_inpaint_progress.connect(self.on_update_inpaint_progress) self.imgtrans_thread.exception_occurred.connect(self.handleRunningException) self.imgtrans_thread.exception_occurred.connect(self.handleRunTimeException) self.translator_panel = translator_panel = config_panel.trans_config_panel translator_setup_params = self.dl_config.translator_setup_params Loading Loading @@ -661,10 +660,10 @@ class DLManager(QObject): self.inpaint(**inpaint_dict) def on_settranslator_failed(self, translator: str, msg: str): self.handleRunningException(f'Failed to set translator {translator}', msg) self.handleRunTimeException(f'Failed to set translator {translator}', msg) def on_setinpainter_failed(self, inpainter: str, msg: str): self.handleRunningException(f'Failed to set inpainter {inpainter}', msg) self.handleRunTimeException(f'Failed to set inpainter {inpainter}', msg) def on_translatorsource_changed(self): text = self.translator_panel.source_combobox.currentText() Loading Loading @@ -719,12 +718,14 @@ class DLManager(QObject): param_key: str, param_content: str): module.updateParam(param_key, param_content) def handleRunningException(self, msg: str, detail: str = None): LOGGER.error(msg + '\n' + detail) def handleRunTimeException(self, msg: str, detail: str = None): if detail is not None: msg += ': ' + detail verbose = traceback.format_exc() LOGGER.error(msg + '\n' + verbose) err = QMessageBox() err.setText(msg) if detail is not None: err.setDetailedText(detail) err.setDetailedText(verbose) err.exec() def on_inpainter_checker_changed(self, is_checked: bool): Loading
ballontranslator/ui/mainwindow.py +8 −8 Original line number Diff line number Diff line Loading @@ -2,12 +2,11 @@ import os.path as osp import os import json from PyQt5.QtWidgets import QMainWindow, QHBoxLayout, QVBoxLayout, QApplication, QStackedWidget, QWidget, QSizePolicy, QComboBox, QListView, QToolBar, QMenu, QSpacerItem, QPushButton, QGraphicsDropShadowEffect, QCheckBox, QToolButton, QSplitter, QListWidget, QShortcut, QListWidgetItem from PyQt5.QtCore import Qt, pyqtSignal, QPoint, QSize, QThread from PyQt5.QtGui import QGuiApplication, QIcon, QCloseEvent, QKeySequence, QImage, QPainter, QMouseEvent from PyQt5.QtWidgets import QMainWindow, QHBoxLayout, QVBoxLayout, QApplication, QStackedWidget, QWidget, QSplitter, QListWidget, QShortcut, QListWidgetItem from PyQt5.QtCore import Qt, QPoint, QSize from PyQt5.QtGui import QGuiApplication, QIcon, QCloseEvent, QKeySequence, QImage, QPainter from utils.logger import logger as LOGGER from .misc import ProjImgTrans from .canvas import Canvas from .configpanel import ConfigPanel Loading @@ -18,7 +17,7 @@ from .scenetext_manager import SceneTextManager from .mainwindowbars import TitleBar, LeftBar, RightBar, BottomBar from .io_thread import ImgSaveThread from .stylewidgets import FrameLessMessageBox from .constants import STYLESHEET_PATH, CONFIG_PATH, DPI, LDPI, LANG_SUPPORT_VERTICAL, DRAWPANEL_WIDTH from .constants import STYLESHEET_PATH, CONFIG_PATH, LANG_SUPPORT_VERTICAL from . import constants class PageListView(QListWidget): Loading @@ -38,7 +37,6 @@ class MainWindow(QMainWindow): super().__init__(*args, **kwargs) self.setWindowFlags(Qt.WindowType.FramelessWindowHint) constants.DPI = QGuiApplication.primaryScreen().physicalDotsPerInch() constants.LDPI = QGuiApplication.primaryScreen().logicalDotsPerInch() self.app = app Loading Loading @@ -201,7 +199,7 @@ class MainWindow(QMainWindow): except Exception as e: LOGGER.exception(e) LOGGER.warning("Failed to load project from " + directory) self.dl_manager.handleRunningException(self.tr('Failed to load project ') + directory, '') self.dl_manager.handleRunTimeException(self.tr('Failed to load project ') + directory, '') return self.proj_directory = directory self.titleBar.setTitleContent(osp.basename(directory)) Loading Loading @@ -427,8 +425,10 @@ class MainWindow(QMainWindow): self.bottomBar.inpainterStatBtn.updateStatus(inpainter) def on_transpagebtn_pressed(self, run_target: bool): page_key = self.imgtrans_proj.current_img if page_key is None: self.bottomBar.transTranspageBtn.setRunText() return if run_target: self.st_manager.updateTextBlkList() self.dl_manager.translatePage(run_target, page_key) Loading
ballontranslator/ui/mainwindowbars.py +2 −3 Original line number Diff line number Diff line Loading @@ -8,7 +8,7 @@ from PyQt5.QtGui import QMouseEvent, QKeySequence from typing import List from .stylewidgets import Widget, PaintQSlider from .constants import WINDOW_BORDER_WIDTH, BOTTOMBAR_HEIGHT, DRAG_DIR_NONE, DRAG_DIR_HOR, DRAG_DIR_VER, DRAG_DIR_BDIAG, DRAG_DIR_FDIAG from .constants import WINDOW_BORDER_WIDTH, BOTTOMBAR_HEIGHT, DRAG_DIR_NONE, DRAG_DIR_VER, DRAG_DIR_BDIAG, DRAG_DIR_FDIAG class ShowPageListChecker(QCheckBox): Loading Loading @@ -45,11 +45,11 @@ class RunStopTextBtn(StatusButton): def on_pressed(self): self.running = not self.running self.run_target.emit(self.running) if self.running: self.setStopText() else: self.setRunText() self.run_target.emit(self.running) def setRunText(self): self.setText(self.run_text) Loading Loading @@ -266,7 +266,6 @@ class LeftBar(Widget): def onSaveProj(self): self.save_proj.emit() pass def onExportAsDoc(self): raise NotImplementedError Loading
ballontranslator/ui/misc.py +9 −2 Original line number Diff line number Diff line Loading @@ -8,11 +8,13 @@ from collections import OrderedDict from typing import Tuple, Union, List, Dict from PyQt5.QtGui import QPixmap, QColor, QImage from . import constants from .constants import DEFAULT_FONT_FAMILY from utils.logger import logger as LOGGER from utils.io_utils import find_all_imgs, NumpyEncoder, imread, imwrite from dl.textdetector.textblock import TextBlock from . import constants # return bgr tuple def qrgb2bgr(color: Union[QColor, Tuple, List] = None) -> Tuple[int, int, int]: if color is not None: Loading Loading @@ -101,6 +103,7 @@ class Proj: proj.load_from_dict(proj_dict) return proj class ProjImgTrans: def __init__(self, directory: str = None): Loading Loading @@ -166,7 +169,11 @@ class ProjImgTrans: except Exception as e: raise ProjectNotSupportedException(e) if 'current_img' in proj_dict: self.set_current_img(proj_dict['current_img']) current_img = proj_dict['current_img'] try: self.set_current_img(current_img) except ImgnameNotInProjectException: LOGGER.warning(f'{current_img} not found.') else: self.set_current_img_byidx(0) Loading
ballontranslator/ui/scenetext_manager.py +2 −0 Original line number Diff line number Diff line Loading @@ -417,6 +417,8 @@ class SceneTextManager(QObject): def updateTextBlkList(self): cbl = self.imgtrans_proj.current_block_list() if cbl is None: return cbl.clear() for blk_item, trans_pair in zip(self.textblk_item_list, self.pairwidget_list): if not blk_item.document().isEmpty(): Loading