[bug fix] fix none res in recovery (#10603)

* add finetune en doc & test=document_fix

* fix dead link & test=document_fix

* fix dead link & test=document_fix

* update check img

* fix det res dtype

* update args default type & test=document_fix

* fix numpy version

* support numpy1.24.0

* fix doc & test=document_fix

* update doc

* update doc, test=document_fix

* fix pdf2word in whl, test=document_fix

* fix none res in recovery

* update version

* format code
pull/10605/head
andyj 2023-08-10 16:55:26 +08:00 committed by GitHub
parent 4a91a21245
commit 681467d4ea
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 27 additions and 21 deletions

View File

@ -59,7 +59,7 @@ __all__ = [
] ]
SUPPORT_DET_MODEL = ['DB'] SUPPORT_DET_MODEL = ['DB']
VERSION = '2.7.0.1' VERSION = '2.7.0.2'
SUPPORT_REC_MODEL = ['CRNN', 'SVTR_LCNet'] SUPPORT_REC_MODEL = ['CRNN', 'SVTR_LCNet']
BASE_DIR = os.path.expanduser("~/.paddleocr/") BASE_DIR = os.path.expanduser("~/.paddleocr/")

View File

@ -36,6 +36,8 @@ def convert_info_docx(img, res, save_folder, img_name):
flag = 1 flag = 1
for i, region in enumerate(res): for i, region in enumerate(res):
if len(region['res']) == 0:
continue
img_idx = region['img_idx'] img_idx = region['img_idx']
if flag == 2 and region['layout'] == 'single': if flag == 2 and region['layout'] == 'single':
section = doc.add_section(WD_SECTION.CONTINUOUS) section = doc.add_section(WD_SECTION.CONTINUOUS)

View File

@ -16,13 +16,9 @@ import ast
import PIL import PIL
from PIL import Image, ImageDraw, ImageFont from PIL import Image, ImageDraw, ImageFont
import numpy as np import numpy as np
<<<<<<< HEAD
from tools.infer.utility import draw_ocr_box_txt, str2bool, init_args as infer_args
=======
from tools.infer.utility import draw_ocr_box_txt, str2bool, str2int_tuple, init_args as infer_args from tools.infer.utility import draw_ocr_box_txt, str2bool, str2int_tuple, init_args as infer_args
import math import math
>>>>>>> 1e11f254 (CV套件建设专项活动 - 文字识别返回单字识别坐标 (#10515))
def init_args(): def init_args():
parser = infer_args() parser = infer_args()
@ -138,7 +134,7 @@ def draw_structure_result(image, result, font_path):
[(box_layout[0], box_layout[1]), (box_layout[2], box_layout[3])], [(box_layout[0], box_layout[1]), (box_layout[2], box_layout[3])],
outline=box_color, outline=box_color,
width=3) width=3)
if int(PIL.__version__.split('.')[0]) < 10: if int(PIL.__version__.split('.')[0]) < 10:
text_w, text_h = font.getsize(region['type']) text_w, text_h = font.getsize(region['type'])
else: else:
@ -167,9 +163,11 @@ def draw_structure_result(image, result, font_path):
for word_region in text_result['text_word_region']: for word_region in text_result['text_word_region']:
char_box = word_region char_box = word_region
box_height = int( box_height = int(
math.sqrt((char_box[0][0] - char_box[3][0])**2 + (char_box[0][1] - char_box[3][1])**2)) math.sqrt((char_box[0][0] - char_box[3][0])**2 + (
char_box[0][1] - char_box[3][1])**2))
box_width = int( box_width = int(
math.sqrt((char_box[0][0] - char_box[1][0])**2 + (char_box[0][1] - char_box[1][1])**2)) math.sqrt((char_box[0][0] - char_box[1][0])**2 + (
char_box[0][1] - char_box[1][1])**2))
if box_height == 0 or box_width == 0: if box_height == 0 or box_width == 0:
continue continue
boxes.append(word_region) boxes.append(word_region)
@ -180,9 +178,10 @@ def draw_structure_result(image, result, font_path):
img_layout, boxes, txts, scores, font_path=font_path, drop_score=0) img_layout, boxes, txts, scores, font_path=font_path, drop_score=0)
return im_show return im_show
def cal_ocr_word_box(rec_str, box, rec_word_info): def cal_ocr_word_box(rec_str, box, rec_word_info):
''' Calculate the detection frame for each word based on the results of recognition and detection of ocr''' ''' Calculate the detection frame for each word based on the results of recognition and detection of ocr'''
col_num, word_list, word_col_list, state_list = rec_word_info col_num, word_list, word_col_list, state_list = rec_word_info
box = box.tolist() box = box.tolist()
bbox_x_start = box[0][0] bbox_x_start = box[0][0]
@ -190,7 +189,7 @@ def cal_ocr_word_box(rec_str, box, rec_word_info):
bbox_y_start = box[0][1] bbox_y_start = box[0][1]
bbox_y_end = box[2][1] bbox_y_end = box[2][1]
cell_width = (bbox_x_end - bbox_x_start)/col_num cell_width = (bbox_x_end - bbox_x_start) / col_num
word_box_list = [] word_box_list = []
word_box_content_list = [] word_box_content_list = []
@ -200,26 +199,31 @@ def cal_ocr_word_box(rec_str, box, rec_word_info):
if state == 'cn': if state == 'cn':
if len(word_col) != 1: if len(word_col) != 1:
char_seq_length = (word_col[-1] - word_col[0] + 1) * cell_width char_seq_length = (word_col[-1] - word_col[0] + 1) * cell_width
char_width = char_seq_length/(len(word_col)-1) char_width = char_seq_length / (len(word_col) - 1)
cn_width_list.append(char_width) cn_width_list.append(char_width)
cn_col_list += word_col cn_col_list += word_col
word_box_content_list += word word_box_content_list += word
else: else:
cell_x_start = bbox_x_start + int(word_col[0] * cell_width) cell_x_start = bbox_x_start + int(word_col[0] * cell_width)
cell_x_end = bbox_x_start + int((word_col[-1]+1) * cell_width) cell_x_end = bbox_x_start + int((word_col[-1] + 1) * cell_width)
cell = ((cell_x_start, bbox_y_start), (cell_x_end, bbox_y_start), (cell_x_end, bbox_y_end), (cell_x_start, bbox_y_end)) cell = ((cell_x_start, bbox_y_start), (cell_x_end, bbox_y_start),
(cell_x_end, bbox_y_end), (cell_x_start, bbox_y_end))
word_box_list.append(cell) word_box_list.append(cell)
word_box_content_list.append("".join(word)) word_box_content_list.append("".join(word))
if len(cn_col_list) != 0: if len(cn_col_list) != 0:
if len(cn_width_list) != 0: if len(cn_width_list) != 0:
avg_char_width = np.mean(cn_width_list) avg_char_width = np.mean(cn_width_list)
else: else:
avg_char_width = (bbox_x_end - bbox_x_start)/len(rec_str) avg_char_width = (bbox_x_end - bbox_x_start) / len(rec_str)
for center_idx in cn_col_list: for center_idx in cn_col_list:
center_x = (center_idx+0.5)*cell_width center_x = (center_idx + 0.5) * cell_width
cell_x_start = max(int(center_x - avg_char_width/2), 0) + bbox_x_start cell_x_start = max(int(center_x - avg_char_width / 2),
cell_x_end = min(int(center_x + avg_char_width/2), bbox_x_end-bbox_x_start) + bbox_x_start 0) + bbox_x_start
cell = ((cell_x_start, bbox_y_start), (cell_x_end, bbox_y_start), (cell_x_end, bbox_y_end), (cell_x_start, bbox_y_end)) cell_x_end = min(
int(center_x + avg_char_width / 2), bbox_x_end -
bbox_x_start) + bbox_x_start
cell = ((cell_x_start, bbox_y_start), (cell_x_end, bbox_y_start),
(cell_x_end, bbox_y_end), (cell_x_start, bbox_y_end))
word_box_list.append(cell) word_box_list.append(cell)
return word_box_content_list, word_box_list return word_box_content_list, word_box_list