diff --git a/README.md b/README.md index e1f7efbf948a11bc69cfd8f9f4918783081626b7..dfeef4a128806096b833771d9a696cb9daa597e8 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ PaddleOCR旨在打造一套丰富、领先、且实用的OCR工具库,助力 - 单模型支持中英文数字组合识别、竖排文本识别、长文本识别 - 检测模型DB(4.1M)+识别模型CRNN(4.5M) - 实用通用中文OCR模型 -- 多种预测推理部署方案,包括服务部署和端测部署 +- 多种预测推理部署方案,包括服务部署和端侧部署 - 多种文本检测训练算法,EAST、DB - 多种文本识别训练算法,Rosetta、CRNN、STAR-Net、RARE - 可运行于Linux、Windows、MacOS等多种系统 @@ -29,7 +29,7 @@ PaddleOCR旨在打造一套丰富、领先、且实用的OCR工具库,助力 - 超轻量级中文OCR在线体验地址:https://www.paddlepaddle.org.cn/hub/scene/ocr -- [中文OCR模型快速使用](./doc/doc_ch/quickstart.md) +- [**中文OCR模型快速使用**](./doc/doc_ch/quickstart.md) ## 中文OCR模型列表 @@ -38,6 +38,31 @@ PaddleOCR旨在打造一套丰富、领先、且实用的OCR工具库,助力 |chinese_db_crnn_mobile|超轻量级中文OCR模型|[inference模型](https://paddleocr.bj.bcebos.com/ch_models/ch_det_mv3_db_infer.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/ch_models/ch_det_mv3_db.tar)|[inference模型](https://paddleocr.bj.bcebos.com/ch_models/ch_rec_mv3_crnn_infer.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/ch_models/ch_rec_mv3_crnn.tar)|[inference模型](https://paddleocr.bj.bcebos.com/ch_models/ch_rec_mv3_crnn_enhance_infer.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/ch_models/ch_rec_mv3_crnn_enhance.tar) |chinese_db_crnn_server|通用中文OCR模型|[inference模型](https://paddleocr.bj.bcebos.com/ch_models/ch_det_r50_vd_db_infer.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/ch_models/ch_det_r50_vd_db.tar)|[inference模型](https://paddleocr.bj.bcebos.com/ch_models/ch_rec_r34_vd_crnn_infer.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/ch_models/ch_rec_r34_vd_crnn.tar)|[inference模型](https://paddleocr.bj.bcebos.com/ch_models/ch_rec_r34_vd_crnn_enhance_infer.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/ch_models/ch_rec_r34_vd_crnn_enhance.tar) +## 文档教程 +- [快速安装](./doc/doc_ch/installation.md) +- [中文OCR模型快速使用](./doc/doc_ch/quickstart.md) +- [算法介绍](#算法介绍) +- 模型训练/评估 + - [文本检测](./doc/doc_ch/detection.md) + - [文本识别](./doc/doc_ch/recognition.md) + - [yml参数配置文件介绍](./doc/doc_ch/config.md) +- 预测部署 + - [基于Python预测引擎推理](./doc/doc_ch/inference.md) + - 基于C++预测引擎推理(comming soon) + - [服务部署](./doc/doc_ch/serving.md) + - [端侧部署](./deploy/lite/readme.md) +- [数据集](./doc/doc_ch/datasets.md) +- [FAQ](#FAQ) +- 效果展示 + - [超轻量级中文OCR效果展示](#超轻量级中文OCR效果展示) + - [通用中文OCR效果展示](#通用中文OCR效果展示) + - [支持空格的中文OCR效果展示](#支持空格的中文OCR效果展示) +- [技术交流群](#欢迎加入PaddleOCR技术交流群) +- [参考文献](./doc/doc_ch/reference.md) +- [许可证书](#许可证书) +- [贡献代码](#贡献代码) + + ## 算法介绍 ### 1.文本检测算法 @@ -98,29 +123,6 @@ PaddleOCR文本识别算法的训练和使用请参考文档教程中[模型训 ### 3.端到端OCR算法 - [ ] [End2End-PSL](https://arxiv.org/abs/1909.07808)(百度自研, comming soon) -## 文档教程 -- [快速安装](./doc/doc_ch/installation.md) -- [中文OCR模型快速使用](./doc/doc_ch/quickstart.md) -- 模型训练/评估 - - [文本检测](./doc/doc_ch/detection.md) - - [文本识别](./doc/doc_ch/recognition.md) - - [yml参数配置文件介绍](./doc/doc_ch/config.md) -- 预测部署 - - [基于Python预测引擎推理](./doc/doc_ch/inference.md) - - 基于C++预测引擎推理(comming soon) - - [服务部署](./doc/doc_ch/serving.md) - - [端侧部署](./deploy/lite/readme.md) -- [数据集](./doc/doc_ch/datasets.md) -- [FAQ](#FAQ) -- 效果展示 - - [超轻量级中文OCR效果展示](#超轻量级中文OCR效果展示) - - [通用中文OCR效果展示](#通用中文OCR效果展示) - - [支持空格的中文OCR效果展示](#支持空格的中文OCR效果展示) -- [技术交流群](#欢迎加入PaddleOCR技术交流群) -- [参考文献](./doc/doc_ch/reference.md) -- [许可证书](#许可证书) -- [贡献代码](#贡献代码) - ## 效果展示 diff --git a/configs/rec/rec_icdar15_train.yml b/configs/rec/rec_icdar15_train.yml index d0b75628c58833447333de36490141847f1815e4..98a38e7477f725c605c0cf017b6a7a4b469f7f3b 100755 --- a/configs/rec/rec_icdar15_train.yml +++ b/configs/rec/rec_icdar15_train.yml @@ -14,6 +14,7 @@ Global: character_type: en loss_type: ctc distort: true + debug: false reader_yml: ./configs/rec/rec_icdar15_reader.yml pretrain_weights: ./pretrain_models/rec_mv3_none_bilstm_ctc/best_accuracy checkpoints: diff --git a/doc/doc_ch/FAQ.md b/doc/doc_ch/FAQ.md index 2e2942295dfd98ab11d296c7e39598aac519e766..3f8bf2988cf1b5e74954f7c251234d2b425b8682 100644 --- a/doc/doc_ch/FAQ.md +++ b/doc/doc_ch/FAQ.md @@ -48,3 +48,4 @@ PaddleOCR已完成Windows和Mac系统适配,运行时注意两点:1、在[ 11. **自定义字典训练的模型,识别结果出现字典里没出现的字** 预测时没有设置采用的自定义字典路径。设置方法是在预测时,通过增加输入参数rec_char_dict_path来设置。 + diff --git a/tools/infer/predict_system.py b/tools/infer/predict_system.py index e96a1934bd86dfea45257a6ffab42f40cecf85ad..65478b6964c36a88507cd6c6895fdb74984f3eaa 100755 --- a/tools/infer/predict_system.py +++ b/tools/infer/predict_system.py @@ -117,12 +117,16 @@ def main(args): image_file_list = get_image_file_list(args.image_dir) text_sys = TextSystem(args) is_visualize = True + tackle_img_num = 0 for image_file in image_file_list: img = cv2.imread(image_file) if img is None: logger.info("error in loading image:{}".format(image_file)) continue starttime = time.time() + tackle_img_num += 1 + if not args.use_gpu and tackle_img_num % 30 == 0: + text_sys = TextSystem(args) dt_boxes, rec_res = text_sys(img) elapse = time.time() - starttime print("Predict time of %s: %.3fs" % (image_file, elapse)) diff --git a/tools/program.py b/tools/program.py index 870d27002f36bbed4b7a665f4ff9bc9cc420f0c1..6a51e5c37175f0f45e87571122adc2aba04d491c 100755 --- a/tools/program.py +++ b/tools/program.py @@ -75,6 +75,8 @@ class AttrDict(dict): global_config = AttrDict() +default_config = {'Global': {'debug': False, }} + def load_config(file_path): """ @@ -85,6 +87,7 @@ def load_config(file_path): Returns: global config """ + merge_config(default_config) _, ext = os.path.splitext(file_path) assert ext in ['.yml', '.yaml'], "only support yaml files for now" merge_config(yaml.load(open(file_path), Loader=yaml.Loader)) diff --git a/tools/train.py b/tools/train.py index 15d6ebb2138ce19a2f65c7d1fabd56d86b7645be..c8350ff64b4894cb22bde063529786b0945dfea3 100755 --- a/tools/train.py +++ b/tools/train.py @@ -43,6 +43,7 @@ logger = initial_logger() from ppocr.data.reader_main import reader_main from ppocr.utils.save_load import init_model from ppocr.utils.character import CharacterOps +from paddle.fluid.contrib.model_stat import summary def main(): @@ -87,6 +88,14 @@ def main(): # compile program for multi-devices train_compile_program = program.create_multi_devices_program( train_program, train_opt_loss_name) + + # dump mode structure + if config['Global']['debug']: + if 'Attention' in config['Head'].keys(): + logger.warning('Does not suport dump attention...') + else: + summary(train_program) + init_model(config, train_program, exe) train_info_dict = {'compile_program':train_compile_program,\