diff --git a/test1/api.md b/test1/api.md index 7283595d0966e1abfda2409bd7096e8425e7efe5..92be9455ec18582a9d09f1c5d8ce78110892ec6f 100644 --- a/test1/api.md +++ b/test1/api.md @@ -36,16 +36,18 @@ Types 1-4 follow the traditional OCR process, and 5 follow the Table OCR process 4.1.1 Use by code ```python +import os import cv2 -from paddlestructure import PaddleStructure,draw_result +from paddlestructure import PaddleStructure,draw_result,save_res -table_engine = PaddleStructure( - output='./output/table', - show_log=True) +table_engine = PaddleStructure(show_log=True) +save_folder = './output/table' img_path = '../doc/table/1.png' img = cv2.imread(img_path) result = table_engine(img) +save_res(result, save_folder,os.path.basename(img_path).split('.')[0]) + for line in result: print(line) diff --git a/test1/api_ch.md b/test1/api_ch.md index 7fafe700139c00dfb65d19c1d3f634add360b890..53b28f28474f278d03d5b93f1095e5eb8e8fd31a 100644 --- a/test1/api_ch.md +++ b/test1/api_ch.md @@ -36,16 +36,18 @@ PaddleStructure 是一个用于复杂板式文字OCR的工具包,流程如下 4.1.1 代码使用 ```python +import os import cv2 -from paddlestructure import PaddleStructure,draw_result +from paddlestructure import PaddleStructure,draw_result,save_res -table_engine = PaddleStructure( - output='./output/table', - show_log=True) +table_engine = PaddleStructure(show_log=True) +save_folder = './output/table' img_path = '../doc/table/1.png' img = cv2.imread(img_path) result = table_engine(img) +save_res(result, save_folder,os.path.basename(img_path).split('.')[0]) + for line in result: print(line) diff --git a/test1/layoutparser-0.0.0-py3-none-any.whl b/test1/layoutparser-0.0.0-py3-none-any.whl deleted file mode 100644 index e3fa17fc4dab24440761ce04deac64f36d16591e..0000000000000000000000000000000000000000 Binary files a/test1/layoutparser-0.0.0-py3-none-any.whl and /dev/null differ diff --git a/test1/paddlestructure.py b/test1/paddlestructure.py index 171d55b38ab06f0fc6a874df597281e20de0483a..d8199101bb2d97b7bad063c4bec66eeea656c1fa 100644 --- a/test1/paddlestructure.py +++ b/test1/paddlestructure.py @@ -32,7 +32,7 @@ logger = get_logger() from ppocr.utils.utility import check_and_read_gif, get_image_file_list from ppocr.utils.network import maybe_download, download_with_progressbar, confirm_model_dir_url, is_link -__all__ = ['PaddleStructure', 'draw_result', 'to_excel'] +__all__ = ['PaddleStructure', 'draw_result', 'save_res'] VERSION = '2.1' BASE_DIR = os.path.expanduser("~/.paddlestructure/") @@ -40,7 +40,7 @@ BASE_DIR = os.path.expanduser("~/.paddlestructure/") model_urls = { 'det': 'https://paddleocr.bj.bcebos.com/dygraph_v2.0/table/en_ppocr_mobile_v2.0_table_det_infer.tar', 'rec': 'https://paddleocr.bj.bcebos.com/dygraph_v2.0/table/en_ppocr_mobile_v2.0_table_rec_infer.tar', - 'structure': 'https://paddleocr.bj.bcebos.com/dygraph_v2.0/table/en_ppocr_mobile_v2.0_table_structure_infer.tar' + 'table': 'https://paddleocr.bj.bcebos.com/dygraph_v2.0/table/en_ppocr_mobile_v2.0_table_structure_infer.tar' } @@ -51,7 +51,7 @@ def parse_args(mMain=True): parser.add_help = mMain for action in parser._actions: - if action.dest in ['rec_char_dict_path', 'structure_char_dict_path']: + if action.dest in ['rec_char_dict_path', 'table_char_dict_path']: action.default = None if mMain: return parser.parse_args() @@ -76,13 +76,13 @@ class PaddleStructure(OCRSystem): params.rec_model_dir, rec_url = confirm_model_dir_url(params.rec_model_dir, os.path.join(BASE_DIR, VERSION, 'rec'), model_urls['rec']) - params.structure_model_dir, structure_url = confirm_model_dir_url(params.structure_model_dir, - os.path.join(BASE_DIR, VERSION, 'structure'), - model_urls['structure']) + params.table_model_dir, table_url = confirm_model_dir_url(params.table_model_dir, + os.path.join(BASE_DIR, VERSION, 'table'), + model_urls['table']) # download model maybe_download(params.det_model_dir, det_url) maybe_download(params.rec_model_dir, rec_url) - maybe_download(params.structure_model_dir, structure_url) + maybe_download(params.table_model_dir, table_url) if params.rec_char_dict_path is None: params.rec_char_type = 'EN' @@ -90,12 +90,12 @@ class PaddleStructure(OCRSystem): params.rec_char_dict_path = str(Path(__file__).parent / 'ppocr/utils/dict/table_dict.txt') else: params.rec_char_dict_path = str(Path(__file__).parent.parent / 'ppocr/utils/dict/table_dict.txt') - if params.structure_char_dict_path is None: + if params.table_char_dict_path is None: if os.path.exists(str(Path(__file__).parent / 'ppocr/utils/dict/table_structure_dict.txt')): - params.structure_char_dict_path = str( + params.table_char_dict_path = str( Path(__file__).parent / 'ppocr/utils/dict/table_structure_dict.txt') else: - params.structure_char_dict_path = str( + params.table_char_dict_path = str( Path(__file__).parent.parent / 'ppocr/utils/dict/table_structure_dict.txt') print(params) @@ -145,4 +145,24 @@ def main(): for item in result: logger.info(item['res']) save_res(result, save_folder, img_name) - logger.info('result save to {}'.format(os.path.join(save_folder, img_name))) \ No newline at end of file + logger.info('result save to {}'.format(os.path.join(save_folder, img_name))) + +if __name__ == '__main__': + table_engine = PaddleStructure(show_log=True) + + img_path = '../test/test_imgs/PMC1173095_006_00.png' + img = cv2.imread(img_path) + result = table_engine(img) + save_res(result, '/Users/zhoujun20/Desktop/工作相关/table/table_pr/PaddleOCR/output/table', + os.path.basename(img_path).split('.')[0]) + + for line in result: + print(line) + + from PIL import Image + + font_path = '../doc/fonts/simfang.ttf' + image = Image.open(img_path).convert('RGB') + im_show = draw_result(image, result, font_path=font_path) + im_show = Image.fromarray(im_show) + im_show.save('result.jpg') \ No newline at end of file diff --git a/test1/table/README.md b/test1/table/README.md index 2ee8bbaf47b61dca39818311cd884ef00af94a35..33090e644bf661805500b9e560569569cc6820f6 100644 --- a/test1/table/README.md +++ b/test1/table/README.md @@ -36,7 +36,7 @@ In gt json, the key is the image name, the value is the corresponding gt, and gt Use the following command to evaluate. After the evaluation is completed, the teds indicator will be output. ```python -python3 table/eval_table.py --det_model_dir=path/to/det_model_dir --rec_model_dir=path/to/rec_model_dir --structure_model_dir=path/to/structure_model_dir --image_dir=../doc/table/1.png --rec_char_dict_path=../ppocr/utils/dict/table_dict.txt --structure_char_dict_path=../ppocr/utils/dict/table_structure_dict.txt --rec_char_type=EN --det_limit_side_len=736 --det_limit_type=min --gt_path=path/to/gt.json +python3 table/eval_table.py --det_model_dir=path/to/det_model_dir --rec_model_dir=path/to/rec_model_dir --table_model_dir=path/to/table_model_dir --image_dir=../doc/table/1.png --rec_char_dict_path=../ppocr/utils/dict/table_dict.txt --table_char_dict_path=../ppocr/utils/dict/table_structure_dict.txt --rec_char_type=EN --det_limit_side_len=736 --det_limit_type=min --gt_path=path/to/gt.json ``` @@ -44,6 +44,6 @@ python3 table/eval_table.py --det_model_dir=path/to/det_model_dir --rec_model_di First cd to the PaddleOCR/ppstructure directory ```python -python3 table/predict_table.py --det_model_dir=path/to/det_model_dir --rec_model_dir=path/to/rec_model_dir --structure_model_dir=path/to/structure_model_dir --image_dir=../doc/table/1.png --rec_char_dict_path=../ppocr/utils/dict/table_dict.txt --structure_char_dict_path=../ppocr/utils/dict/table_structure_dict.txt --rec_char_type=EN --det_limit_side_len=736 --det_limit_type=min --output ../output/table +python3 table/predict_table.py --det_model_dir=path/to/det_model_dir --rec_model_dir=path/to/rec_model_dir --table_model_dir=path/to/table_model_dir --image_dir=../doc/table/1.png --rec_char_dict_path=../ppocr/utils/dict/table_dict.txt --table_char_dict_path=../ppocr/utils/dict/table_structure_dict.txt --rec_char_type=EN --det_limit_side_len=736 --det_limit_type=min --output ../output/table ``` After running, the excel sheet of each picture will be saved in the directory specified by the table_output field \ No newline at end of file diff --git a/test1/table/README_ch.md b/test1/table/README_ch.md index 29f88bb5c069178760a3ed17c1ce4858d2370173..718810718156933fc834e717f821a6b63074ba2f 100644 --- a/test1/table/README_ch.md +++ b/test1/table/README_ch.md @@ -36,7 +36,7 @@ json 中,key为图片名,value为对于的gt,gt是一个由四个item组 准备完成后使用如下命令进行评估,评估完成后会输出teds指标。 ```python -python3 table/eval_table.py --det_model_dir=path/to/det_model_dir --rec_model_dir=path/to/rec_model_dir --structure_model_dir=path/to/structure_model_dir --image_dir=../doc/table/1.png --rec_char_dict_path=../ppocr/utils/dict/table_dict.txt --structure_char_dict_path=../ppocr/utils/dict/table_structure_dict.txt --rec_char_type=EN --det_limit_side_len=736 --det_limit_type=min --gt_path=path/to/gt.json +python3 table/eval_table.py --det_model_dir=path/to/det_model_dir --rec_model_dir=path/to/rec_model_dir --table_model_dir=path/to/table_model_dir --image_dir=../doc/table/1.png --rec_char_dict_path=../ppocr/utils/dict/table_dict.txt --table_char_dict_path=../ppocr/utils/dict/table_structure_dict.txt --rec_char_type=EN --det_limit_side_len=736 --det_limit_type=min --gt_path=path/to/gt.json ``` @@ -44,6 +44,6 @@ python3 table/eval_table.py --det_model_dir=path/to/det_model_dir --rec_model_di 先cd到PaddleOCR/ppstructure目录下 ```python -python3 table/predict_table.py --det_model_dir=path/to/det_model_dir --rec_model_dir=path/to/rec_model_dir --structure_model_dir=path/to/structure_model_dir --image_dir=../doc/table/1.png --rec_char_dict_path=../ppocr/utils/dict/table_dict.txt --structure_char_dict_path=../ppocr/utils/dict/table_structure_dict.txt --rec_char_type=EN --det_limit_side_len=736 --det_limit_type=min --output ../output/table +python3 table/predict_table.py --det_model_dir=path/to/det_model_dir --rec_model_dir=path/to/rec_model_dir --table_model_dir=path/to/table_model_dir --image_dir=../doc/table/1.png --rec_char_dict_path=../ppocr/utils/dict/table_dict.txt --table_char_dict_path=../ppocr/utils/dict/table_structure_dict.txt --rec_char_type=EN --det_limit_side_len=736 --det_limit_type=min --output ../output/table ``` 运行完成后,每张图片的excel表格会保存到table_output字段指定的目录下 diff --git a/test1/table/predict_structure.py b/test1/table/predict_structure.py index 455bf7e7b93bc7a97635027c73900ffb39f50f95..1070c93ea61ac0efea7e700d00c8144f4139fbd8 100755 --- a/test1/table/predict_structure.py +++ b/test1/table/predict_structure.py @@ -41,7 +41,7 @@ class TableStructurer(object): def __init__(self, args): pre_process_list = [{ 'ResizeTableImage': { - 'max_len': args.structure_max_len + 'max_len': args.table_max_len } }, { 'NormalizeImage': { @@ -61,14 +61,14 @@ class TableStructurer(object): }] postprocess_params = { 'name': 'TableLabelDecode', - "character_type": args.structure_char_type, - "character_dict_path": args.structure_char_dict_path, + "character_type": args.table_char_type, + "character_dict_path": args.table_char_dict_path, } self.preprocess_op = create_operators(pre_process_list) self.postprocess_op = build_post_process(postprocess_params) self.predictor, self.input_tensor, self.output_tensors, self.config = \ - utility.create_predictor(args, 'structure', logger) + utility.create_predictor(args, 'table', logger) def __call__(self, img): ori_im = img.copy() diff --git a/test1/utility.py b/test1/utility.py index 0dd220af7975de95f770dbf26e9f00e74782d5b5..f21b287f7d4a044838d6949fae588547ee93ec3e 100644 --- a/test1/utility.py +++ b/test1/utility.py @@ -23,10 +23,10 @@ def init_args(): # params for output parser.add_argument("--output", type=str, default='./output/table') # params for table structure - parser.add_argument("--structure_max_len", type=int, default=488) - parser.add_argument("--structure_model_dir", type=str) - parser.add_argument("--structure_char_type", type=str, default='en') - parser.add_argument("--structure_char_dict_path", type=str, default="../ppocr/utils/dict/table_structure_dict.txt") + parser.add_argument("--table_max_len", type=int, default=488) + parser.add_argument("--table_model_dir", type=str) + parser.add_argument("--table_char_type", type=str, default='en') + parser.add_argument("--table_char_dict_path", type=str, default="../ppocr/utils/dict/table_structure_dict.txt") return parser diff --git a/tools/infer/utility.py b/tools/infer/utility.py index 1d652e7d352da90bcc08b701f332f586ebb9339c..90ac5aa5ba2a33707965159d0486bb42957e3fce 100755 --- a/tools/infer/utility.py +++ b/tools/infer/utility.py @@ -201,8 +201,8 @@ def create_predictor(args, mode, logger): model_dir = args.cls_model_dir elif mode == 'rec': model_dir = args.rec_model_dir - elif mode == 'structure': - model_dir = args.structure_model_dir + elif mode == 'table': + model_dir = args.table_model_dir else: model_dir = args.e2e_model_dir @@ -331,7 +331,7 @@ def create_predictor(args, mode, logger): config.disable_glog_info() config.delete_pass("conv_transpose_eltwiseadd_bn_fuse_pass") - if mode == 'structure': + if mode == 'table': config.delete_pass("fc_fuse_pass") # not supported for table config.switch_use_feed_fetch_ops(False) config.switch_ir_optim(True)