Loading ballontranslator/__main__.py +0 −1 Original line number Diff line number Diff line Loading @@ -13,7 +13,6 @@ def main(): parser.add_argument("--proj-dir", default='', type=str, help='Open project directory on startup') args = parser.parse_args() os.chdir(PROGRAM_PATH) app = QApplication(sys.argv) translator = QTranslator() Loading ballontranslator/ui/dl_manager.py +22 −24 Original line number Diff line number Diff line import time from typing import List, Dict, Union from logging import Logger from typing import Union import numpy as np from collections import OrderedDict from .stylewidgets import ProgressMessageBox from PyQt5.QtCore import Qt, QThread, pyqtSignal, QObject, QLocale from PyQt5.QtWidgets import QMessageBox, QPushButton from .configpanel import TranslatorConfigPanel, InpaintConfigPanel, ConfigPanel from .misc import ProjImgTrans, DLModuleConfig from PyQt5.QtCore import QThread, pyqtSignal, QObject, QLocale from PyQt5.QtWidgets import QMessageBox from utils.logger import logger as LOGGER from utils.registry import Registry from dl.translators import MissingTranslatorParams, InvalidSourceOrTargetLanguage from dl import INPAINTERS, TRANSLATORS, TEXTDETECTORS, OCR, \ Loading @@ -19,6 +14,10 @@ from dl import INPAINTERS, TRANSLATORS, TEXTDETECTORS, OCR, \ import dl dl.translators.SYSTEM_LANG = QLocale.system().name() from .stylewidgets import ProgressMessageBox from .configpanel import ConfigPanel from .misc import ProjImgTrans, DLModuleConfig class ModuleThread(QThread): exception_occurred = pyqtSignal(str, str) Loading Loading @@ -392,10 +391,9 @@ class DLManager(QObject): dl_config: DLModuleConfig, imgtrans_proj: ProjImgTrans, config_panel: ConfigPanel, logger: Logger, *args, **kwargs) -> None: *args, **kwargs) -> None: super().__init__(*args, **kwargs) self.dl_config = dl_config self.logger = logger self.imgtrans_proj = imgtrans_proj self.textdetect_thread = TextDetectThread(self.dl_config) Loading Loading @@ -498,7 +496,7 @@ class DLManager(QObject): def translatePage(self, run_target: bool, page_key: str): if not run_target: if self.translate_thread.isRunning(): self.logger.warning('Terminating a running translation thread.') LOGGER.warning('Terminating a running translation thread.') self.translate_thread.terminate() return self.translate_thread.translatePage(self.imgtrans_proj.pages, page_key) Loading @@ -508,13 +506,13 @@ class DLManager(QObject): def inpaint(self, img: np.ndarray, mask: np.ndarray, img_key: str = None, inpaint_rect = None, **kwargs): if self.inpaint_thread.isRunning(): self.logger.warning('Waiting for inpainting to finish') LOGGER.warning('Waiting for inpainting to finish') return self.inpaint_thread.inpaint(img, mask, img_key, inpaint_rect) def runImgtransPipeline(self): if self.imgtrans_proj.is_empty: self.logger.info('proj file is empty, nothing to do') LOGGER.info('proj file is empty, nothing to do') self.progress_msgbox.hide() return self.last_finished_index = -1 Loading Loading @@ -589,7 +587,7 @@ class DLManager(QObject): if translator is None: translator = self.dl_config.translator if self.translate_thread.isRunning(): self.logger.warning('Terminating a running translation thread.') LOGGER.warning('Terminating a running translation thread.') self.translate_thread.terminate() self.translate_thread.setTranslator(translator) self.update_translator_status.emit('...', self.dl_config.translate_source, self.dl_config.translate_target) Loading @@ -598,7 +596,7 @@ class DLManager(QObject): if inpainter is None: inpainter =self.dl_config.inpainter if self.inpaint_thread.isRunning(): self.logger.warning('Terminating a running inpaint thread.') LOGGER.warning('Terminating a running inpaint thread.') self.inpaint_thread.terminate() self.inpaint_thread.setInpainter(inpainter) Loading @@ -606,7 +604,7 @@ class DLManager(QObject): if textdetector is None: textdetector = self.dl_config.textdetector if self.textdetect_thread.isRunning(): self.logger.warning('Terminating a running text detection thread.') LOGGER.warning('Terminating a running text detection thread.') self.textdetect_thread.terminate() self.textdetect_thread.setTextDetector(textdetector) Loading @@ -614,27 +612,27 @@ class DLManager(QObject): if ocr is None: ocr = self.dl_config.ocr if self.ocr_thread.isRunning(): self.logger.warning('Terminating a running OCR thread.') LOGGER.warning('Terminating a running OCR thread.') self.ocr_thread.terminate() self.ocr_thread.setOCR(ocr) def on_finish_setdetector(self): if self.textdetector is not None: self.dl_config.textdetector = self.textdetector.name self.logger.info('Text detector set to {}'.format(self.textdetector.name)) LOGGER.info('Text detector set to {}'.format(self.textdetector.name)) def on_finish_setocr(self): if self.ocr is not None: self.dl_config.ocr = self.ocr.name self.ocr_panel.setOCR(self.ocr.name) self.logger.info('OCR set to {}'.format(self.ocr.name)) LOGGER.info('OCR set to {}'.format(self.ocr.name)) def on_finish_setinpainter(self): if self.inpainter is not None: self.dl_config.inpainter = self.inpainter.name self.inpaint_panel.setInpainter(self.inpainter.name) self.update_inpainter_status.emit(self.dl_config.inpainter) self.logger.info('Inpainter set to {}'.format(self.inpainter.name)) LOGGER.info('Inpainter set to {}'.format(self.inpainter.name)) def on_finish_settranslator(self): translator = self.translator Loading @@ -642,7 +640,7 @@ class DLManager(QObject): self.dl_config.translator = translator.name self.update_translator_status.emit(self.dl_config.translator, self.dl_config.translate_source, self.dl_config.translate_target) self.translator_panel.finishSetTranslator(translator) self.logger.info('Translator set to {}'.format(self.translator.name)) LOGGER.info('Translator set to {}'.format(self.translator.name)) else: self.update_translator_status.emit(self.tr('Invalid'), '', '') Loading Loading @@ -718,7 +716,7 @@ class DLManager(QObject): module.updateParam(param_key, param_content) def handleRunningException(self, msg: str, detail: str = None): self.logger.error(msg + '\n' + detail) LOGGER.error(msg + '\n' + detail) err = QMessageBox() err.setText(msg) if detail is not None: Loading ballontranslator/ui/dlconfig_parse_widgets.py +10 −7 Original line number Diff line number Diff line from typing import List, Union, Tuple from typing import List from PyQt5.QtWidgets import QHBoxLayout, QVBoxLayout, QTreeView, QPlainTextEdit, QWidget, QFileDialog, QLabel, QSizePolicy, QComboBox, QListView, QToolBar, QMenu, QSpacerItem, QPushButton, QAction, QCheckBox, QToolButton, QSplitter, QStylePainter, QStyleOption, QStyle, QScrollArea, QLineEdit, QGroupBox, QGraphicsSimpleTextItem from PyQt5.QtCore import Qt, QModelIndex, pyqtSignal, QPointF, QPoint, QSize, QSizeF, QObject, QEvent from PyQt5.QtGui import QStandardItemModel, QFontMetricsF from .stylewidgets import ConfigComboBox from .constants import CONFIG_FONTSIZE_TABLE, CONFIG_FONTSIZE_CONTENT, CONFIG_FONTSIZE_HEADER, CONFIG_COMBOBOX_LONG, CONFIG_COMBOBOX_MIDEAN, CONFIG_COMBOBOX_SHORT from PyQt5.QtWidgets import QHBoxLayout, QVBoxLayout, QWidget, QFileDialog, QLabel, QSizePolicy, QComboBox, QListView, QToolBar, QMenu, QSpacerItem, QPushButton, QAction, QCheckBox, QToolButton, QSplitter, QStylePainter, QStyleOption, QStyle, QScrollArea, QLineEdit, QGroupBox, QGraphicsSimpleTextItem from PyQt5.QtCore import Qt, pyqtSignal from PyQt5.QtGui import QFontMetricsF from dl import VALID_INPAINTERS, VALID_TEXTDETECTORS, VALID_TRANSLATORS, VALID_OCR, \ TranslatorBase, DEFAULT_DEVICE from utils.logger import logger as LOGGER from .stylewidgets import ConfigComboBox from .constants import CONFIG_FONTSIZE_CONTENT, CONFIG_COMBOBOX_MIDEAN, CONFIG_COMBOBOX_SHORT class ParamNameLabel(QLabel): def __init__(self, param_name: str, *args, **kwargs) -> None: Loading Loading @@ -156,7 +159,7 @@ class ModuleConfigParseWidget(QWidget): self.params_layout.addWidget(param_widget) param_widget.hide() if len(invalid_module_keys) > 0: print('Invalid module keys:', invalid_module_keys) LOGGER.warning(F'Invalid module keys: {invalid_module_keys}') for ik in invalid_module_keys: module_dict.pop(ik) self.on_module_changed() Loading ballontranslator/ui/mainwindow.py +9 −12 Original line number Diff line number Diff line Loading @@ -6,6 +6,8 @@ from PyQt5.QtWidgets import QMainWindow, QHBoxLayout, QVBoxLayout, QApplication, from PyQt5.QtCore import Qt, pyqtSignal, QPoint, QSize, QThread from PyQt5.QtGui import QGuiApplication, QIcon, QCloseEvent, QKeySequence, QImage, QPainter, QMouseEvent from utils.logger import logger as LOGGER from .misc import ProjImgTrans from .canvas import Canvas from .configpanel import ConfigPanel Loading Loading @@ -35,12 +37,11 @@ class MainWindow(QMainWindow): def __init__(self, app: QApplication, open_dir='', *args, **kwargs) -> None: super().__init__(*args, **kwargs) self.setWindowFlags(Qt.WindowType.FramelessWindowHint) global DPI, LDPI DPI = QGuiApplication.primaryScreen().physicalDotsPerInch() constants.DPI = QGuiApplication.primaryScreen().physicalDotsPerInch() constants.LDPI = QGuiApplication.primaryScreen().logicalDotsPerInch() self.app = app self.setupLogger() self.setupUi() self.setupConfig() self.setupShortcuts() Loading Loading @@ -148,8 +149,8 @@ class MainWindow(QMainWindow): config_dict = json.loads(f.read()) self.config.load_from_dict(config_dict) except Exception as e: self.logger.exception(e) self.logger.warning("Failed to load config file, using default config") LOGGER.exception(e) LOGGER.warning("Failed to load config file, using default config") self.bottomBar.originalSlider.setValue(self.config.original_transparency * 100) self.drawingPanel.maskTransperancySlider.setValue(self.config.mask_transparency * 100) Loading @@ -166,7 +167,7 @@ class MainWindow(QMainWindow): self.bottomBar.ocrChecker.setCheckState(self.config.dl.enable_ocr) self.bottomBar.transChecker.setChecked(self.config.dl.enable_translate) self.dl_manager = dl_manager = DLManager(self.config.dl, self.imgtrans_proj, self.configPanel, self.logger) self.dl_manager = dl_manager = DLManager(self.config.dl, self.imgtrans_proj, self.configPanel) self.dl_manager.update_translator_status.connect(self.updateTranslatorStatus) self.dl_manager.update_inpainter_status.connect(self.updateInpainterStatus) self.dl_manager.finish_translate_page.connect(self.finishTranslatePage) Loading @@ -186,10 +187,6 @@ class MainWindow(QMainWindow): if self.config.open_recent_on_startup: self.configPanel.open_on_startup_checker.setChecked(True) def setupLogger(self): from utils.logger import logger self.logger = logger def setupImgTransUI(self): self.centralStackWidget.setCurrentIndex(0) if self.leftBar.showPageListLabel.checkState() == 2: Loading @@ -202,8 +199,8 @@ class MainWindow(QMainWindow): try: self.imgtrans_proj.load(directory) except Exception as e: self.logger.exception(e) self.logger.warning("Failed to load project from " + directory) LOGGER.exception(e) LOGGER.warning("Failed to load project from " + directory) self.dl_manager.handleRunningException(self.tr('Failed to load project ') + directory, '') return self.proj_directory = directory Loading Loading
ballontranslator/__main__.py +0 −1 Original line number Diff line number Diff line Loading @@ -13,7 +13,6 @@ def main(): parser.add_argument("--proj-dir", default='', type=str, help='Open project directory on startup') args = parser.parse_args() os.chdir(PROGRAM_PATH) app = QApplication(sys.argv) translator = QTranslator() Loading
ballontranslator/ui/dl_manager.py +22 −24 Original line number Diff line number Diff line import time from typing import List, Dict, Union from logging import Logger from typing import Union import numpy as np from collections import OrderedDict from .stylewidgets import ProgressMessageBox from PyQt5.QtCore import Qt, QThread, pyqtSignal, QObject, QLocale from PyQt5.QtWidgets import QMessageBox, QPushButton from .configpanel import TranslatorConfigPanel, InpaintConfigPanel, ConfigPanel from .misc import ProjImgTrans, DLModuleConfig from PyQt5.QtCore import QThread, pyqtSignal, QObject, QLocale from PyQt5.QtWidgets import QMessageBox from utils.logger import logger as LOGGER from utils.registry import Registry from dl.translators import MissingTranslatorParams, InvalidSourceOrTargetLanguage from dl import INPAINTERS, TRANSLATORS, TEXTDETECTORS, OCR, \ Loading @@ -19,6 +14,10 @@ from dl import INPAINTERS, TRANSLATORS, TEXTDETECTORS, OCR, \ import dl dl.translators.SYSTEM_LANG = QLocale.system().name() from .stylewidgets import ProgressMessageBox from .configpanel import ConfigPanel from .misc import ProjImgTrans, DLModuleConfig class ModuleThread(QThread): exception_occurred = pyqtSignal(str, str) Loading Loading @@ -392,10 +391,9 @@ class DLManager(QObject): dl_config: DLModuleConfig, imgtrans_proj: ProjImgTrans, config_panel: ConfigPanel, logger: Logger, *args, **kwargs) -> None: *args, **kwargs) -> None: super().__init__(*args, **kwargs) self.dl_config = dl_config self.logger = logger self.imgtrans_proj = imgtrans_proj self.textdetect_thread = TextDetectThread(self.dl_config) Loading Loading @@ -498,7 +496,7 @@ class DLManager(QObject): def translatePage(self, run_target: bool, page_key: str): if not run_target: if self.translate_thread.isRunning(): self.logger.warning('Terminating a running translation thread.') LOGGER.warning('Terminating a running translation thread.') self.translate_thread.terminate() return self.translate_thread.translatePage(self.imgtrans_proj.pages, page_key) Loading @@ -508,13 +506,13 @@ class DLManager(QObject): def inpaint(self, img: np.ndarray, mask: np.ndarray, img_key: str = None, inpaint_rect = None, **kwargs): if self.inpaint_thread.isRunning(): self.logger.warning('Waiting for inpainting to finish') LOGGER.warning('Waiting for inpainting to finish') return self.inpaint_thread.inpaint(img, mask, img_key, inpaint_rect) def runImgtransPipeline(self): if self.imgtrans_proj.is_empty: self.logger.info('proj file is empty, nothing to do') LOGGER.info('proj file is empty, nothing to do') self.progress_msgbox.hide() return self.last_finished_index = -1 Loading Loading @@ -589,7 +587,7 @@ class DLManager(QObject): if translator is None: translator = self.dl_config.translator if self.translate_thread.isRunning(): self.logger.warning('Terminating a running translation thread.') LOGGER.warning('Terminating a running translation thread.') self.translate_thread.terminate() self.translate_thread.setTranslator(translator) self.update_translator_status.emit('...', self.dl_config.translate_source, self.dl_config.translate_target) Loading @@ -598,7 +596,7 @@ class DLManager(QObject): if inpainter is None: inpainter =self.dl_config.inpainter if self.inpaint_thread.isRunning(): self.logger.warning('Terminating a running inpaint thread.') LOGGER.warning('Terminating a running inpaint thread.') self.inpaint_thread.terminate() self.inpaint_thread.setInpainter(inpainter) Loading @@ -606,7 +604,7 @@ class DLManager(QObject): if textdetector is None: textdetector = self.dl_config.textdetector if self.textdetect_thread.isRunning(): self.logger.warning('Terminating a running text detection thread.') LOGGER.warning('Terminating a running text detection thread.') self.textdetect_thread.terminate() self.textdetect_thread.setTextDetector(textdetector) Loading @@ -614,27 +612,27 @@ class DLManager(QObject): if ocr is None: ocr = self.dl_config.ocr if self.ocr_thread.isRunning(): self.logger.warning('Terminating a running OCR thread.') LOGGER.warning('Terminating a running OCR thread.') self.ocr_thread.terminate() self.ocr_thread.setOCR(ocr) def on_finish_setdetector(self): if self.textdetector is not None: self.dl_config.textdetector = self.textdetector.name self.logger.info('Text detector set to {}'.format(self.textdetector.name)) LOGGER.info('Text detector set to {}'.format(self.textdetector.name)) def on_finish_setocr(self): if self.ocr is not None: self.dl_config.ocr = self.ocr.name self.ocr_panel.setOCR(self.ocr.name) self.logger.info('OCR set to {}'.format(self.ocr.name)) LOGGER.info('OCR set to {}'.format(self.ocr.name)) def on_finish_setinpainter(self): if self.inpainter is not None: self.dl_config.inpainter = self.inpainter.name self.inpaint_panel.setInpainter(self.inpainter.name) self.update_inpainter_status.emit(self.dl_config.inpainter) self.logger.info('Inpainter set to {}'.format(self.inpainter.name)) LOGGER.info('Inpainter set to {}'.format(self.inpainter.name)) def on_finish_settranslator(self): translator = self.translator Loading @@ -642,7 +640,7 @@ class DLManager(QObject): self.dl_config.translator = translator.name self.update_translator_status.emit(self.dl_config.translator, self.dl_config.translate_source, self.dl_config.translate_target) self.translator_panel.finishSetTranslator(translator) self.logger.info('Translator set to {}'.format(self.translator.name)) LOGGER.info('Translator set to {}'.format(self.translator.name)) else: self.update_translator_status.emit(self.tr('Invalid'), '', '') Loading Loading @@ -718,7 +716,7 @@ class DLManager(QObject): module.updateParam(param_key, param_content) def handleRunningException(self, msg: str, detail: str = None): self.logger.error(msg + '\n' + detail) LOGGER.error(msg + '\n' + detail) err = QMessageBox() err.setText(msg) if detail is not None: Loading
ballontranslator/ui/dlconfig_parse_widgets.py +10 −7 Original line number Diff line number Diff line from typing import List, Union, Tuple from typing import List from PyQt5.QtWidgets import QHBoxLayout, QVBoxLayout, QTreeView, QPlainTextEdit, QWidget, QFileDialog, QLabel, QSizePolicy, QComboBox, QListView, QToolBar, QMenu, QSpacerItem, QPushButton, QAction, QCheckBox, QToolButton, QSplitter, QStylePainter, QStyleOption, QStyle, QScrollArea, QLineEdit, QGroupBox, QGraphicsSimpleTextItem from PyQt5.QtCore import Qt, QModelIndex, pyqtSignal, QPointF, QPoint, QSize, QSizeF, QObject, QEvent from PyQt5.QtGui import QStandardItemModel, QFontMetricsF from .stylewidgets import ConfigComboBox from .constants import CONFIG_FONTSIZE_TABLE, CONFIG_FONTSIZE_CONTENT, CONFIG_FONTSIZE_HEADER, CONFIG_COMBOBOX_LONG, CONFIG_COMBOBOX_MIDEAN, CONFIG_COMBOBOX_SHORT from PyQt5.QtWidgets import QHBoxLayout, QVBoxLayout, QWidget, QFileDialog, QLabel, QSizePolicy, QComboBox, QListView, QToolBar, QMenu, QSpacerItem, QPushButton, QAction, QCheckBox, QToolButton, QSplitter, QStylePainter, QStyleOption, QStyle, QScrollArea, QLineEdit, QGroupBox, QGraphicsSimpleTextItem from PyQt5.QtCore import Qt, pyqtSignal from PyQt5.QtGui import QFontMetricsF from dl import VALID_INPAINTERS, VALID_TEXTDETECTORS, VALID_TRANSLATORS, VALID_OCR, \ TranslatorBase, DEFAULT_DEVICE from utils.logger import logger as LOGGER from .stylewidgets import ConfigComboBox from .constants import CONFIG_FONTSIZE_CONTENT, CONFIG_COMBOBOX_MIDEAN, CONFIG_COMBOBOX_SHORT class ParamNameLabel(QLabel): def __init__(self, param_name: str, *args, **kwargs) -> None: Loading Loading @@ -156,7 +159,7 @@ class ModuleConfigParseWidget(QWidget): self.params_layout.addWidget(param_widget) param_widget.hide() if len(invalid_module_keys) > 0: print('Invalid module keys:', invalid_module_keys) LOGGER.warning(F'Invalid module keys: {invalid_module_keys}') for ik in invalid_module_keys: module_dict.pop(ik) self.on_module_changed() Loading
ballontranslator/ui/mainwindow.py +9 −12 Original line number Diff line number Diff line Loading @@ -6,6 +6,8 @@ from PyQt5.QtWidgets import QMainWindow, QHBoxLayout, QVBoxLayout, QApplication, from PyQt5.QtCore import Qt, pyqtSignal, QPoint, QSize, QThread from PyQt5.QtGui import QGuiApplication, QIcon, QCloseEvent, QKeySequence, QImage, QPainter, QMouseEvent from utils.logger import logger as LOGGER from .misc import ProjImgTrans from .canvas import Canvas from .configpanel import ConfigPanel Loading Loading @@ -35,12 +37,11 @@ class MainWindow(QMainWindow): def __init__(self, app: QApplication, open_dir='', *args, **kwargs) -> None: super().__init__(*args, **kwargs) self.setWindowFlags(Qt.WindowType.FramelessWindowHint) global DPI, LDPI DPI = QGuiApplication.primaryScreen().physicalDotsPerInch() constants.DPI = QGuiApplication.primaryScreen().physicalDotsPerInch() constants.LDPI = QGuiApplication.primaryScreen().logicalDotsPerInch() self.app = app self.setupLogger() self.setupUi() self.setupConfig() self.setupShortcuts() Loading Loading @@ -148,8 +149,8 @@ class MainWindow(QMainWindow): config_dict = json.loads(f.read()) self.config.load_from_dict(config_dict) except Exception as e: self.logger.exception(e) self.logger.warning("Failed to load config file, using default config") LOGGER.exception(e) LOGGER.warning("Failed to load config file, using default config") self.bottomBar.originalSlider.setValue(self.config.original_transparency * 100) self.drawingPanel.maskTransperancySlider.setValue(self.config.mask_transparency * 100) Loading @@ -166,7 +167,7 @@ class MainWindow(QMainWindow): self.bottomBar.ocrChecker.setCheckState(self.config.dl.enable_ocr) self.bottomBar.transChecker.setChecked(self.config.dl.enable_translate) self.dl_manager = dl_manager = DLManager(self.config.dl, self.imgtrans_proj, self.configPanel, self.logger) self.dl_manager = dl_manager = DLManager(self.config.dl, self.imgtrans_proj, self.configPanel) self.dl_manager.update_translator_status.connect(self.updateTranslatorStatus) self.dl_manager.update_inpainter_status.connect(self.updateInpainterStatus) self.dl_manager.finish_translate_page.connect(self.finishTranslatePage) Loading @@ -186,10 +187,6 @@ class MainWindow(QMainWindow): if self.config.open_recent_on_startup: self.configPanel.open_on_startup_checker.setChecked(True) def setupLogger(self): from utils.logger import logger self.logger = logger def setupImgTransUI(self): self.centralStackWidget.setCurrentIndex(0) if self.leftBar.showPageListLabel.checkState() == 2: Loading @@ -202,8 +199,8 @@ class MainWindow(QMainWindow): try: self.imgtrans_proj.load(directory) except Exception as e: self.logger.exception(e) self.logger.warning("Failed to load project from " + directory) LOGGER.exception(e) LOGGER.warning("Failed to load project from " + directory) self.dl_manager.handleRunningException(self.tr('Failed to load project ') + directory, '') return self.proj_directory = directory Loading