From 23298119d94299ca13d0c7bb03e5c86656830375 Mon Sep 17 00:00:00 2001 From: dyning Date: Wed, 20 May 2020 15:57:44 +0800 Subject: [PATCH 1/5] Update inference.md --- doc/inference.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/inference.md b/doc/inference.md index 371d2f87d7..ca1d6af5ad 100644 --- a/doc/inference.md +++ b/doc/inference.md @@ -200,7 +200,7 @@ python3 tools/infer/predict_system.py --image_dir="./doc/imgs/2.jpg" --det_model 如果想尝试使用其他检测算法或者识别算法,请参考上述文本检测模型推理和文本识别模型推理,更新相应配置和模型,下面给出基于EAST文本检测和STAR-Net文本识别执行命令: ``` -python3 tools/infer/predict_system.py --image_dir="./doc/imgs_en/img_10.jpg" --det_model_dir="./inference/det_east/" --det_algorithm="EAST" --rec_model_dir="./inference/rec/" --rec_model_dir="./inference/starnet/" --rec_image_shape="3, 32, 100" --rec_char_type="en" +python3 tools/infer/predict_system.py --image_dir="./doc/imgs_en/img_10.jpg" --det_model_dir="./inference/det_east/" --det_algorithm="EAST" --rec_model_dir="./inference/starnet/" --rec_image_shape="3, 32, 100" --rec_char_type="en" ``` 执行命令后,识别结果图像如下: From 0758f913619ad5467b0480a78bcd84fd77332e3a Mon Sep 17 00:00:00 2001 From: LDOUBLEV Date: Wed, 20 May 2020 16:05:46 +0800 Subject: [PATCH 2/5] modify batch num in rec and fix sorted_box func --- tools/infer/predict_rec.py | 2 +- tools/infer/predict_system.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/infer/predict_rec.py b/tools/infer/predict_rec.py index c8c0797b49..a3f68f04c9 100755 --- a/tools/infer/predict_rec.py +++ b/tools/infer/predict_rec.py @@ -59,7 +59,7 @@ class TextRecognizer(object): def __call__(self, img_list): img_num = len(img_list) - batch_num = 30 + batch_num = 12 rec_res = [] predict_time = 0 for beg_img_no in range(0, img_num, batch_num): diff --git a/tools/infer/predict_system.py b/tools/infer/predict_system.py index 8b0abd706c..3953fa0df7 100755 --- a/tools/infer/predict_system.py +++ b/tools/infer/predict_system.py @@ -89,7 +89,7 @@ def sorted_boxes(dt_boxes): sorted boxes(array) with shape [4, 2] """ num_boxes = dt_boxes.shape[0] - sorted_boxes = sorted(dt_boxes, key=lambda x: x[0][1]) + sorted_boxes = sorted(dt_boxes, key=lambda x: (x[0][1], x[0][0])) _boxes = list(sorted_boxes) for i in range(num_boxes - 1): From 2bd6323642a8be188beaee0c7269936d0c633450 Mon Sep 17 00:00:00 2001 From: LDOUBLEV Date: Wed, 20 May 2020 16:19:49 +0800 Subject: [PATCH 3/5] modify batch num in rec and fix sorted_box func --- tools/infer/predict_rec.py | 3 ++- tools/infer/utility.py | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/tools/infer/predict_rec.py b/tools/infer/predict_rec.py index a3f68f04c9..6fa51e70d4 100755 --- a/tools/infer/predict_rec.py +++ b/tools/infer/predict_rec.py @@ -31,6 +31,7 @@ class TextRecognizer(object): image_shape = [int(v) for v in args.rec_image_shape.split(",")] self.rec_image_shape = image_shape self.character_type = args.rec_char_type + self.rec_batch_num = args.rec_batch_num char_ops_params = {} char_ops_params["character_type"] = args.rec_char_type char_ops_params["character_dict_path"] = args.rec_char_dict_path @@ -59,8 +60,8 @@ class TextRecognizer(object): def __call__(self, img_list): img_num = len(img_list) - batch_num = 12 rec_res = [] + batch_num = self.rec_batch_num predict_time = 0 for beg_img_no in range(0, img_num, batch_num): end_img_no = min(img_num, beg_img_no + batch_num) diff --git a/tools/infer/utility.py b/tools/infer/utility.py index fd72a19f6d..947a549577 100755 --- a/tools/infer/utility.py +++ b/tools/infer/utility.py @@ -56,6 +56,7 @@ def parse_args(): parser.add_argument("--rec_model_dir", type=str) parser.add_argument("--rec_image_shape", type=str, default="3, 32, 320") parser.add_argument("--rec_char_type", type=str, default='ch') + parser.add_argument("--rec_batch_num", type=int, default=30) parser.add_argument( "--rec_char_dict_path", type=str, @@ -172,7 +173,8 @@ def draw_ocr(image, boxes, txts, scores, draw_txt=True, drop_score=0.5): continue font = ImageFont.truetype( "./doc/simfang.ttf", font_size, encoding="utf-8") - new_txt = str(count) + ': ' + txt + ' ' + '%.3f' % (scores[count]) + new_txt = str(count) + ': ' + txt + ' ' + '%.3f' % ( + scores[count]) draw_txt.text( (20, gap * (count + 1)), new_txt, txt_color, font=font) count += 1 From 60f8c36c867de045979fa57d62d3f26d20ab9ca5 Mon Sep 17 00:00:00 2001 From: LDOUBLEV Date: Wed, 20 May 2020 17:46:48 +0800 Subject: [PATCH 4/5] fix eval_det_utils --- tools/eval_utils/eval_det_utils.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tools/eval_utils/eval_det_utils.py b/tools/eval_utils/eval_det_utils.py index f0be714fc0..25cda208cf 100644 --- a/tools/eval_utils/eval_det_utils.py +++ b/tools/eval_utils/eval_det_utils.py @@ -34,6 +34,7 @@ import json from copy import deepcopy import cv2 from ppocr.data.reader_main import reader_main +import os def cal_det_res(exe, config, eval_info_dict): @@ -43,6 +44,8 @@ def cal_det_res(exe, config, eval_info_dict): postprocess_params.update(global_params) postprocess = create_module(postprocess_params['function']) \ (params=postprocess_params) + if not os.path.exists(os.path.dirname(save_res_path)): + os.makedirs(os.path.dirname(save_res_path)) with open(save_res_path, "wb") as fout: tackling_num = 0 for data in eval_info_dict['reader'](): From fdad3d4d880d5067eb6928144f10e137fca4497f Mon Sep 17 00:00:00 2001 From: LDOUBLEV Date: Wed, 20 May 2020 20:12:53 +0800 Subject: [PATCH 5/5] single_img_path to infer_img as rec model, fix eval Hmean=0 --- configs/det/det_db_icdar15_reader.yml | 2 +- configs/det/det_east_icdar15_reader.yml | 2 +- configs/rec/rec_benchmark_reader.yml | 3 ++- doc/detection.md | 4 ++-- ppocr/data/det/dataset_traversal.py | 2 +- tools/eval.py | 1 + tools/eval_utils/eval_det_utils.py | 2 +- tools/infer_det.py | 3 +-- 8 files changed, 10 insertions(+), 9 deletions(-) diff --git a/configs/det/det_db_icdar15_reader.yml b/configs/det/det_db_icdar15_reader.yml index 388cd31845..0f99257b53 100755 --- a/configs/det/det_db_icdar15_reader.yml +++ b/configs/det/det_db_icdar15_reader.yml @@ -15,7 +15,7 @@ EvalReader: TestReader: reader_function: ppocr.data.det.dataset_traversal,EvalTestReader process_function: ppocr.data.det.db_process,DBProcessTest - single_img_path: + infer_img: img_set_dir: ./train_data/icdar2015/text_localization/ label_file_path: ./train_data/icdar2015/text_localization/test_icdar2015_label.txt test_image_shape: [736, 1280] diff --git a/configs/det/det_east_icdar15_reader.yml b/configs/det/det_east_icdar15_reader.yml index 478bfcd834..060ed4dd38 100755 --- a/configs/det/det_east_icdar15_reader.yml +++ b/configs/det/det_east_icdar15_reader.yml @@ -17,7 +17,7 @@ EvalReader: TestReader: reader_function: ppocr.data.det.dataset_traversal,EvalTestReader process_function: ppocr.data.det.east_process,EASTProcessTest - single_img_path: + infer_img: img_set_dir: ./train_data/icdar2015/text_localization/ label_file_path: ./train_data/icdar2015/text_localization/test_icdar2015_label.txt do_eval: True diff --git a/configs/rec/rec_benchmark_reader.yml b/configs/rec/rec_benchmark_reader.yml index d119c7aa87..44cc056790 100755 --- a/configs/rec/rec_benchmark_reader.yml +++ b/configs/rec/rec_benchmark_reader.yml @@ -9,4 +9,5 @@ EvalReader: TestReader: reader_function: ppocr.data.rec.dataset_traversal,LMDBReader - lmdb_sets_dir: ./train_data/data_lmdb_release/evaluation/ \ No newline at end of file + lmdb_sets_dir: ./train_data/data_lmdb_release/evaluation/ + infer_img: ./infer_img \ No newline at end of file diff --git a/doc/detection.md b/doc/detection.md index fce534d1b4..2fbe3c427f 100644 --- a/doc/detection.md +++ b/doc/detection.md @@ -79,10 +79,10 @@ python3 tools/eval.py -c configs/det/det_mv3_db.yml -o Global.checkpoints="./ou 测试单张图像的检测效果 ``` -python3 tools/infer_det.py -c configs/det/det_mv3_db.yml -o TestReader.single_img_path="./doc/imgs_en/img_10.jpg" Global.checkpoints="./output/det_db/best_accuracy" +python3 tools/infer_det.py -c configs/det/det_mv3_db.yml -o TestReader.infer_img="./doc/imgs_en/img_10.jpg" Global.checkpoints="./output/det_db/best_accuracy" ``` 测试文件夹下所有图像的检测效果 ``` -python3 tools/infer_det.py -c configs/det/det_mv3_db.yml -o TestReader.single_img_path="./doc/imgs_en/" Global.checkpoints="./output/det_db/best_accuracy" +python3 tools/infer_det.py -c configs/det/det_mv3_db.yml -o TestReader.infer_img="./doc/imgs_en/" Global.checkpoints="./output/det_db/best_accuracy" ``` diff --git a/ppocr/data/det/dataset_traversal.py b/ppocr/data/det/dataset_traversal.py index 3bd9318578..3051c60d37 100755 --- a/ppocr/data/det/dataset_traversal.py +++ b/ppocr/data/det/dataset_traversal.py @@ -84,7 +84,7 @@ class EvalTestReader(object): img_path = os.path.join(img_set_dir, img_name) img_list.append(img_path) else: - img_path = self.params['single_img_path'] + img_path = self.params['infer_img'] img_list = get_image_file_list(img_path) def batch_iter_reader(): diff --git a/tools/eval.py b/tools/eval.py index fcb572c652..d1762e9294 100755 --- a/tools/eval.py +++ b/tools/eval.py @@ -78,6 +78,7 @@ def main(): 'fetch_name_list':eval_fetch_name_list,\ 'fetch_varname_list':eval_fetch_varname_list} metrics = eval_det_run(exe, config, eval_info_dict, "eval") + print("Eval result", metrics) else: reader_type = config['Global']['reader_yml'] if "benchmark" not in reader_type: diff --git a/tools/eval_utils/eval_det_utils.py b/tools/eval_utils/eval_det_utils.py index 25cda208cf..252c93641e 100644 --- a/tools/eval_utils/eval_det_utils.py +++ b/tools/eval_utils/eval_det_utils.py @@ -96,7 +96,7 @@ def load_label_infor(label_file_path, do_ignore=False): if text == "###" and do_ignore: ignore = True bbox_infor[bno]['ignore'] = ignore - img_name_label_dict[substr[0]] = bbox_infor + img_name_label_dict[os.path.basename(substr[0])] = bbox_infor return img_name_label_dict diff --git a/tools/infer_det.py b/tools/infer_det.py index 9da617d1fa..800067655a 100755 --- a/tools/infer_det.py +++ b/tools/infer_det.py @@ -106,7 +106,6 @@ def main(): with open(save_res_path, "wb") as fout: test_reader = reader_main(config=config, mode='test') - # image_file_list = get_image_file_list(args.image_dir) tackling_num = 0 for data in test_reader(): img_num = len(data) @@ -135,7 +134,7 @@ def main(): elif config['Global']['algorithm'] == 'DB': dic = {'maps': outs[0]} else: - raise Exception("only support algorithm: ['EAST', 'BD']") + raise Exception("only support algorithm: ['EAST', 'DB']") dt_boxes_list = postprocess(dic, ratio_list) for ino in range(img_num): dt_boxes = dt_boxes_list[ino]