Commit add378ad authored by dmMaze's avatar dmMaze
Browse files

fix #174

parent 3bdcf681
Loading
Loading
Loading
Loading
+48 −25
Original line number Diff line number Diff line
@@ -795,10 +795,47 @@ class MainWindow(FramelessWindow):
        if page_key is None:
            self.bottomBar.transTranspageBtn.setRunText()
            return
        if run_target and self.canvas.text_change_unsaved():
            self.st_manager.updateTextBlkList()
        # if run_target and self.canvas.text_change_unsaved():
        #     self.st_manager.updateTextBlkList()
        
        # self.module_manager.translatePage(run_target, page_key)

        blkitem_list = self.st_manager.textblk_item_list

        if len(blkitem_list) < 1:
            if self.bottomBar.transTranspageBtn.running:
                self.bottomBar.transTranspageBtn.setRunText()
            return
        
        self.translateBlkitemList(blkitem_list, -1)


    def translateBlkitemList(self, blkitem_list: List, mode: int) -> bool:

        tgt_img = self.imgtrans_proj.img_array
        if tgt_img is None:
            return False
        
        if len(blkitem_list) < 1:
            return False
        
        self.global_search_widget.set_document_edited()
        self.module_manager.translatePage(run_target, page_key)
        
        im_h, im_w = tgt_img.shape[:2]

        blk_list, blk_ids = [], []
        for blkitem in blkitem_list:
            blk = blkitem.blk
            blk._bounding_rect = blkitem.absBoundingRect()
            blk.vertical = blkitem.is_vertical
            blk.text = self.st_manager.pairwidget_list[blkitem.idx].e_source.toPlainText()
            blk_ids.append(blkitem.idx)
            blk.set_lines_by_xywh(blk._bounding_rect, angle=-blk.angle, x_range=[0, im_w-1], y_range=[0, im_h-1], adjust_bbox=True)
            blk_list.append(blk)

        self.module_manager.runBlktransPipeline(blk_list, tgt_img, mode, blk_ids)
        return True


    def finishTranslatePage(self, page_key):
        self.bottomBar.transTranspageBtn.setRunText()
@@ -884,33 +921,19 @@ class MainWindow(FramelessWindow):
            self.global_search_widget.set_document_edited()

    def on_run_blktrans(self, mode: int):
        tgt_img = self.imgtrans_proj.img_array
        if tgt_img is None:
            return
        blkitem_list = self.canvas.selected_text_items()
        if len(blkitem_list) < 1:
            return
        self.translateBlkitemList(blkitem_list, mode)

        im_h, im_w = tgt_img.shape[:2]
        blk_list = []
        for blkitem in blkitem_list:
            blk = blkitem.blk
            blk._bounding_rect = blkitem.absBoundingRect()
            blk.vertical = blkitem.is_vertical
            blk.text = self.st_manager.pairwidget_list[blkitem.idx].e_source.toPlainText()
            blk.set_lines_by_xywh(blk._bounding_rect, angle=-blk.angle, x_range=[0, im_w-1], y_range=[0, im_h-1], adjust_bbox=True)
            blk_list.append(blk)
    def on_blktrans_finished(self, mode: int, blk_ids: List[int]):

        # c = visualize_textblocks(tgt_img.copy(), blk_list)
        # import cv2
        # cv2.imshow('xx', c)
        # cv2.waitKey(0)
        self.module_manager.runBlktransPipeline(blk_list, tgt_img, mode)
        if self.bottomBar.transTranspageBtn.running:
            self.bottomBar.transTranspageBtn.setRunText()

    def on_blktrans_finished(self, mode: int):
        blkitem_list = self.canvas.selected_text_items()
        if len(blkitem_list) < 1:
        if len(blk_ids) < 1:
            return
        
        blkitem_list = [self.st_manager.textblk_item_list[idx] for idx in blk_ids]

        pairw_list = []
        for blk in blkitem_list:
            pairw_list.append(self.st_manager.pairwidget_list[blk.idx])
+15 −12
Original line number Diff line number Diff line
@@ -262,6 +262,7 @@ class ImgtransThread(QThread):
    exception_occurred = Signal(str, str)

    finish_blktrans_stage = Signal(str, int)
    finish_blktrans = Signal(int, list)

    def __init__(self, 
                 cfg_module: ModuleConfig, 
@@ -301,17 +302,17 @@ class ImgtransThread(QThread):
        self.job = self._imgtrans_pipeline
        self.start()

    def runBlktransPipeline(self, blk_list: List[TextBlock], tgt_img: np.ndarray, mode: int):
        self.job = lambda : self._blktrans_pipeline(blk_list, tgt_img, mode)
    def runBlktransPipeline(self, blk_list: List[TextBlock], tgt_img: np.ndarray, mode: int, blk_ids: List[int]):
        self.job = lambda : self._blktrans_pipeline(blk_list, tgt_img, mode, blk_ids)
        self.start()

    def _blktrans_pipeline(self, blk_list: List[TextBlock], tgt_img: np.ndarray, mode: int):
    def _blktrans_pipeline(self, blk_list: List[TextBlock], tgt_img: np.ndarray, mode: int, blk_ids: List[int]):
        if mode >= 0:
            self.ocr_thread.module.run_ocr(tgt_img, blk_list)
            self.finish_blktrans_stage.emit('ocr', 100)
            self.finish_blktrans.emit(mode, blk_ids)
        if mode != 0:
            self.translate_thread.module.translate_textblk_lst(blk_list)
            self.finish_blktrans_stage.emit('translate', 100)
            self.finish_blktrans.emit(mode, blk_ids)
        if mode > 1:
            im_h, im_w = tgt_img.shape[:2]
            progress_prod = 100. / len(blk_list) if len(blk_list) > 0 else 0
@@ -329,7 +330,7 @@ class ImgtransThread(QThread):
                        inpainted = self.inpaint_thread.inpainter.inpaint(im, mask)
                        blk.region_inpaint_dict = {'img': im, 'mask': mask, 'inpaint_rect': [x1, y1, x2, y2], 'inpainted': inpainted}
                    self.finish_blktrans_stage.emit('inpaint', int((ii+1) * progress_prod))
        self.finish_blktrans_stage.emit(str(mode), 0)
        self.finish_blktrans.emit(mode, blk_ids)

    def _imgtrans_pipeline(self):
        self.detect_counter = 0
@@ -457,7 +458,7 @@ class ModuleManager(QObject):
    canvas_inpaint_finished = Signal(dict)

    imgtrans_pipeline_finished = Signal()
    blktrans_pipeline_finished = Signal(int)
    blktrans_pipeline_finished = Signal(int, list)
    page_trans_finished = Signal(int)

    run_canvas_inpaint = False
@@ -500,6 +501,7 @@ class ModuleManager(QObject):
        self.imgtrans_thread.update_inpaint_progress.connect(self.on_update_inpaint_progress)
        self.imgtrans_thread.exception_occurred.connect(self.handleRunTimeException)
        self.imgtrans_thread.finish_blktrans_stage.connect(self.on_finish_blktrans_stage)
        self.imgtrans_thread.finish_blktrans.connect(self.on_finish_blktrans)

        self.translator_panel = translator_panel = config_panel.trans_config_panel        
        translator_params = merge_config_module_params(cfg_module.translator_params, GET_VALID_TRANSLATORS(), TRANSLATORS.get)
@@ -604,7 +606,7 @@ class ModuleManager(QObject):
        self.progress_msgbox.show()
        self.imgtrans_thread.runImgtransPipeline(self.imgtrans_proj)

    def runBlktransPipeline(self, blk_list: List[TextBlock], tgt_img: np.ndarray, mode: int):
    def runBlktransPipeline(self, blk_list: List[TextBlock], tgt_img: np.ndarray, mode: int, blk_ids: List[int]):
        self.terminateRunningThread()
        self.progress_msgbox.hide_all_bars()
        if mode >= 0:
@@ -615,7 +617,7 @@ class ModuleManager(QObject):
            self.progress_msgbox.translate_bar.show()
        self.progress_msgbox.zero_progress()
        self.progress_msgbox.show()
        self.imgtrans_thread.runBlktransPipeline(blk_list, tgt_img, mode)
        self.imgtrans_thread.runBlktransPipeline(blk_list, tgt_img, mode, blk_ids)

    def on_finish_blktrans_stage(self, stage: str, progress: int):
        if stage == 'ocr':
@@ -624,12 +626,13 @@ class ModuleManager(QObject):
            self.progress_msgbox.updateTranslateProgress(progress)
        elif stage == 'inpaint':
            self.progress_msgbox.updateInpaintProgress(progress)
        elif stage in {'-1', '0', '1', '2'}:
            self.blktrans_pipeline_finished.emit(int(stage))
            self.progress_msgbox.hide()
        else:
            raise NotImplementedError(f'Unknown stage: {stage}')
        
    def on_finish_blktrans(self, mode: int, blk_ids: List):
        self.blktrans_pipeline_finished.emit(mode, blk_ids)
        self.progress_msgbox.hide()

    def on_update_detect_progress(self, progress: int):
        ri = self.imgtrans_thread.recent_finished_index(progress)
        progress = int(progress / self.imgtrans_thread.num_pages * 100)