Exemple #1
0
    def show_char_image_on_widget(self):

        if self.char_position_arr is None:
            return
        else:
            main_widget = QWidget()
            main_layout = QVBoxLayout()
            rows, cols = self.processing_img.shape
            figsize = cols / RISZIE_RATIO * 8, rows / RISZIE_RATIO * 8
            fig = plt.figure(figsize=figsize)
            self.ax = fig.add_axes(self.axe_size)
            self.ax.spines['left'].set_color('white')
            self.ax.spines['right'].set_color('white')
            self.ax.spines['bottom'].set_color('white')
            self.ax.spines['top'].set_color('white')
            self.ax.set_xticks([])
            self.ax.set_yticks([])
            self.ax.imshow(self.processing_img, cmap='gray')
            self.char_rectangle_patch = []
            for line_index, (line_char_postion, line_position) in enumerate(
                    zip(self.char_position_arr,
                        self.text_line_position_array)):
                line_start_row, _, line_start_col, _ = line_position
                line_patch = []
                for char_index, char_position in enumerate(line_char_postion):

                    char_start_row, char_end_row, char_start_col, char_end_col = char_position
                    rect_x = char_start_col
                    rect_y = line_start_row + char_start_row
                    rect_width = char_end_col - char_start_col
                    rect_height = char_end_row - char_start_row
                    char_rect = Rectangle((rect_x, rect_y),
                                          rect_width,
                                          rect_height,
                                          fill=False,
                                          edgecolor="red",
                                          picker=True)
                    # 保存 char_rect 的 index
                    char_rect.char_index = [line_index, char_index]
                    line_patch.append(char_rect)

                self.char_rectangle_patch.append(line_patch)

            for line_patch in self.char_rectangle_patch:
                for p in line_patch:
                    self.ax.add_patch(p)

            self.canvas = FigureCanvas(fig)
            self.canvas.mpl_connect('pick_event', self.on_char_pick)
            main_layout.addWidget(self.canvas)
            self.canvas.draw()
            main_widget.setLayout(main_layout)
            self.scroll.setWidget(main_widget)
            self.selected_char_index_list = []
            plt.close()
Exemple #2
0
    def action_recognize_chars_triggered(self):
        if self.processing_stage == 3:
            if self.char_position_arr is None or self.text_line_imgs is None:
                return
            Main_Widget = QWidget(self)
            Main_Widget_layout = QVBoxLayout(Main_Widget)
            Main_Widget_layout.setSizeConstraint(QLayout.SetNoConstraint)
            Main_Widget_layout.setContentsMargins(0, 0, 0, 0)
            line_char_number_list = [len(i) for i in self.char_position_arr]
            canvas_list = []
            line_chars_imgs = []
            for i, img in enumerate(self.text_line_imgs):
                # print(self.text_line_position_array[i])
                rows, cols = img.shape
                figsize = cols / DPI * 4, rows / DPI * 4
                fig = plt.figure(figsize=figsize)
                ax = fig.add_axes(self.axe_size)
                ax.set_xticks([])
                ax.set_yticks([])
                ax.imshow(img, cmap="gray")
                canvas = FigureCanvas(fig)
                canvas.draw()
                for j, char_position in enumerate(self.char_position_arr[i]):
                    char_start_row, char_end_row, char_start_col, char_end_col = char_position
                    rect_x = char_start_col
                    rect_y = char_start_row
                    rect_width = char_end_col - char_start_col
                    rect_height = char_end_row - char_start_row
                    char_rect = Rectangle((rect_x, rect_y),
                                          rect_width,
                                          rect_height,
                                          fill=False,
                                          edgecolor="red",
                                          picker=True)
                    char_rect.char_index = (i, j)
                    ax.add_patch(char_rect)
                    line_chars_imgs.append(img[char_start_row:char_end_row,
                                               char_start_col:char_end_col])
                # canvas.mpl_connect('pick_event', self.on_char_recog_pick)
                canvas_list.append(canvas)

                plt.close()

            unicodes = get_string_by_img(line_chars_imgs, model=self.model)
            txt_index = 0

            for i, canvas in enumerate(canvas_list):
                img = self.text_line_imgs[i]
                rows, cols = self.text_line_imgs[i].shape
                line_frame = QFrame(Main_Widget)
                # ToDO
                line_frame.setFixedSize(cols, rows * 4)
                line_text = unicodes[txt_index:txt_index +
                                     line_char_number_list[i]]
                label_font = QFont()
                label_font.setPointSize(20)
                label_list = []

                for j, reg_char in enumerate(line_text):
                    try:
                        min_row, max_row, min_col, max_col = self.char_position_arr[
                            i][j]
                        img = self.text_line_imgs[i][min_row:max_row,
                                                     min_col:max_col]
                        label = QLabelExt(img, line_frame)
                        if chr(int(reg_char[0], 16)) in self.leaCode:
                            label_font.setFamily("IeaUnicode")
                        else:
                            label_font.setFamily("IPAPANNEW")
                        label.setFont(label_font)
                        label.setText(chr(int(reg_char[0], 16)))
                        label.name = str(reg_char[0])
                        label.leacode = self.leaCode
                        label.char_id = i, j
                        label.setGeometry(QRect(min_col + 2, 30, 30, 30))
                        label_list.append(label)

                    except Exception as e:
                        print(e)

                if line_char_number_list[i] > 1:
                    Main_Widget_layout.addWidget(canvas)
                    Main_Widget_layout.addWidget(line_frame)
                    txt_index += line_char_number_list[i]
                    self.label_lists.append(label_list)

            Main_Widget.setLayout(Main_Widget_layout)
            self.scroll.setWidget(Main_Widget)
            self.processing_stage = 4