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()
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