[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 codepull/10605/head
parent
4a91a21245
commit
681467d4ea
|
@ -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/")
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue