From 6a38af589028fe38cd8c165598519ce1f8d8ed45 Mon Sep 17 00:00:00 2001 From: WenmuZhou Date: Thu, 28 Jan 2021 11:03:58 +0800 Subject: [PATCH 1/8] fix starnet export --- tools/export_model.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/tools/export_model.py b/tools/export_model.py index b7d61a59f8..a2428bf720 100755 --- a/tools/export_model.py +++ b/tools/export_model.py @@ -47,14 +47,18 @@ def main(): char_num = len(getattr(post_process_class, 'character')) config['Architecture']["Head"]['out_channels'] = char_num model = build_model(config['Architecture']) - init_model(config, model, logger) + # init_model(config, model, logger) model.eval() save_path = '{}/inference'.format(config['Global']['save_inference_dir']) - infer_shape = [3, -1, -1] + infer_shape = [3, -1, -1] if config['Architecture']['model_type'] == "rec": - infer_shape = [3, 32, -1] + infer_shape = [3, 32, -1] + if 'Transform' in config['Architecture'] and config['Architecture'][ + 'Transform'] is not None and config['Architecture'][ + 'Transform']['name'] == 'TPS': + infer_shape[-1] = 100 model = to_static( model, From b30add8ae51e51cc085750fa7f3a5f27a7f6f5ce Mon Sep 17 00:00:00 2001 From: WenmuZhou Date: Thu, 28 Jan 2021 11:05:28 +0800 Subject: [PATCH 2/8] fix bug --- tools/export_model.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/export_model.py b/tools/export_model.py index a2428bf720..542dffe360 100755 --- a/tools/export_model.py +++ b/tools/export_model.py @@ -47,7 +47,7 @@ def main(): char_num = len(getattr(post_process_class, 'character')) config['Architecture']["Head"]['out_channels'] = char_num model = build_model(config['Architecture']) - # init_model(config, model, logger) + init_model(config, model, logger) model.eval() save_path = '{}/inference'.format(config['Global']['save_inference_dir']) From 8e697e349fdb17d7fb7148ed1f79bec08936e207 Mon Sep 17 00:00:00 2001 From: WenmuZhou Date: Thu, 28 Jan 2021 13:21:10 +0800 Subject: [PATCH 3/8] add note --- tools/export_model.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tools/export_model.py b/tools/export_model.py index 542dffe360..a9b9e7dd51 100755 --- a/tools/export_model.py +++ b/tools/export_model.py @@ -54,10 +54,13 @@ def main(): infer_shape = [3, -1, -1] if config['Architecture']['model_type'] == "rec": - infer_shape = [3, 32, -1] + infer_shape = [3, 32, -1] # for rec model, H must be 32 if 'Transform' in config['Architecture'] and config['Architecture'][ 'Transform'] is not None and config['Architecture'][ 'Transform']['name'] == 'TPS': + logger.info( + 'When there is tps in the network, variable length input is not supported, and the input size needs to be the same as during training' + ) infer_shape[-1] = 100 model = to_static( From 248669a81e711e87f95b782042dd4cab3acaf7db Mon Sep 17 00:00:00 2001 From: WenmuZhou Date: Wed, 3 Feb 2021 11:58:24 +0800 Subject: [PATCH 4/8] update rec doc --- doc/doc_ch/recognition.md | 142 ++++++++++++++++++----------------- doc/doc_en/recognition_en.md | 107 ++++++++++++++------------ 2 files changed, 132 insertions(+), 117 deletions(-) diff --git a/doc/doc_ch/recognition.md b/doc/doc_ch/recognition.md index c5f459bdb8..c2b61a2802 100644 --- a/doc/doc_ch/recognition.md +++ b/doc/doc_ch/recognition.md @@ -1,60 +1,90 @@ ## 文字识别 -- [一、数据准备](#数据准备) - - [数据下载](#数据下载) - - [自定义数据集](#自定义数据集) - - [字典](#字典) - - [支持空格](#支持空格) +- [1 数据准备](#数据准备) + - [1.1 自定义数据集](#自定义数据集) + - [1.2 数据下载](#数据下载) + - [1.3 字典](#字典) + - [1.4 支持空格](#支持空格) -- [二、启动训练](#启动训练) - - [1. 数据增强](#数据增强) - - [2. 训练](#训练) - - [3. 小语种](#小语种) +- [2 启动训练](#启动训练) + - [2.1 数据增强](#数据增强) + - [2.2 训练](#训练) + - [2.3 小语种](#小语种) -- [三、评估](#评估) +- [3 评估](#评估) -- [四、预测](#预测) - - [1. 训练引擎预测](#训练引擎预测) +- [4 预测](#预测) + - [4.1 训练引擎预测](#训练引擎预测) -### 数据准备 +### 1. 数据准备 -PaddleOCR 支持两种数据格式: `lmdb` 用于训练公开数据,调试算法; `通用数据` 训练自己的数据: - -请按如下步骤设置数据集: +PaddleOCR 支持两种数据格式: + - `lmdb` 用于训练以lmdb格式存储的数据集; + - `通用数据` 用于训练以文本文件存储的数据集: 训练数据的默认存储路径是 `PaddleOCR/train_data`,如果您的磁盘上已有数据集,只需创建软链接至数据集目录: ``` +# linux and mac os ln -sf /train_data/dataset +# windows +mklink /d /train_data/dataset ``` - -* 数据下载 + +#### 1.1 自定义数据集 +下面以通用数据集为例, 介绍如何准备数据集: -若您本地没有数据集,可以在官网下载 [icdar2015](http://rrc.cvc.uab.es/?ch=4&com=downloads) 数据,用于快速验证。也可以参考[DTRB](https://github.com/clovaai/deep-text-recognition-benchmark#download-lmdb-dataset-for-traininig-and-evaluation-from-here),下载 benchmark 所需的lmdb格式数据集。 +* 训练集 - -* 使用自己数据集 +建议将训练图片放入同一个文件夹,并用一个txt文件(rec_gt_train.txt)记录图片路径和标签,txt文件里的内容如下: -若您希望使用自己的数据进行训练,请参考下文组织您的数据。 - -- 训练集 - -首先请将训练图片放入同一个文件夹(train_images),并用一个txt文件(rec_gt_train.txt)记录图片路径和标签。 - -**注意:** 默认请将图片路径和图片标签用 \t 分割,如用其他方式分割将造成训练报错 +**注意:** txt文件中默认请将图片路径和图片标签用 \t 分割,如用其他方式分割将造成训练报错。 ``` " 图像文件名 图像标注信息 " -train_data/train_0001.jpg 简单可依赖 -train_data/train_0002.jpg 用科技让复杂的世界更简单 +train_data/train/word_001.jpg 简单可依赖 +train_data/train/word_002.jpg 用科技让复杂的世界更简单 +... ``` -PaddleOCR 提供了一份用于训练 icdar2015 数据集的标签文件,通过以下方式下载: + +最终训练集应有如下文件结构: +``` +|-train_data + |- rec_gt_train.txt + |- train + |- word_001.png + |- word_002.jpg + |- word_003.jpg + | ... +``` + +- 测试集 + +同训练集类似,测试集也需要提供一个包含所有图片的文件夹(test)和一个rec_gt_test.txt,测试集的结构如下所示: + +``` +|-train_data + |- rec_gt_test.txt + |- test + |- word_001.jpg + |- word_002.jpg + |- word_003.jpg + | ... +``` + + + +1.2 数据下载 + +若您本地没有数据集,可以在官网下载 [icdar2015](http://rrc.cvc.uab.es/?ch=4&com=downloads) 数据,用于快速验证。也可以参考[DTRB](https://github.com/clovaai/deep-text-recognition-benchmark#download-lmdb-dataset-for-traininig-and-evaluation-from-here) ,下载 benchmark 所需的lmdb格式数据集。 + +如果你使用的是icdar2015的公开数据集,PaddleOCR 提供了一份用于训练 icdar2015 数据集的标签文件,通过以下方式下载: ``` # 训练集标签 @@ -70,34 +100,8 @@ PaddleOCR 也提供了数据格式转换脚本,可以将官网 label 转换支 python gen_label.py --mode="rec" --input_path="{path/of/origin/label}" --output_label="rec_gt_label.txt" ``` -最终训练集应有如下文件结构: -``` -|-train_data - |-ic15_data - |- rec_gt_train.txt - |- train - |- word_001.png - |- word_002.jpg - |- word_003.jpg - | ... -``` - -- 测试集 - -同训练集类似,测试集也需要提供一个包含所有图片的文件夹(test)和一个rec_gt_test.txt,测试集的结构如下所示: - -``` -|-train_data - |-ic15_data - |- rec_gt_test.txt - |- test - |- word_001.jpg - |- word_002.jpg - |- word_003.jpg - | ... -``` -- 字典 +1.3 字典 最后需要提供一个字典({word_dict_name}.txt),使模型在训练时,可以将所有出现的字符映射为字典的索引。 @@ -114,6 +118,10 @@ n word_dict.txt 每行有一个单字,将字符与数字索引映射在一起,“and” 将被映射成 [2 5 1] +* 内置字典 + +PaddleOCR内置了一部分字典,可以按需使用。 + `ppocr/utils/ppocr_keys_v1.txt` 是一个包含6623个字符的中文字典 `ppocr/utils/ic15_dict.txt` 是一个包含36个字符的英文字典 @@ -129,7 +137,7 @@ word_dict.txt 每行有一个单字,将字符与数字索引映射在一起, `ppocr/utils/dict/en_dict.txt` 是一个包含63个字符的英文字典 -您可以按需使用。 + 目前的多语言模型仍处在demo阶段,会持续优化模型并补充语种,**非常欢迎您为我们提供其他语言的字典和字体**, 如您愿意可将字典文件提交至 [dict](../../ppocr/utils/dict) 将语料文件提交至[corpus](../../ppocr/utils/corpus),我们会在Repo中感谢您。 @@ -140,13 +148,13 @@ word_dict.txt 每行有一个单字,将字符与数字索引映射在一起, 并将 `character_type` 设置为 `ch`。 -- 添加空格类别 +1.4 添加空格类别 如果希望支持识别"空格"类别, 请将yml文件中的 `use_space_char` 字段设置为 `True`。 -### 启动训练 +### 2. 启动训练 PaddleOCR提供了训练脚本、评估脚本和预测脚本,本节将以 CRNN 识别模型为例: @@ -171,7 +179,7 @@ tar -xf rec_mv3_none_bilstm_ctc_v2.0_train.tar && rm -rf rec_mv3_none_bilstm_ctc python3 -m paddle.distributed.launch --gpus '0,1,2,3' tools/train.py -c configs/rec/rec_icdar15_train.yml ``` -- 数据增强 +#### 2.1 数据增强 PaddleOCR提供了多种数据增强方式,如果您希望在训练时加入扰动,请在配置文件中设置 `distort: true`。 @@ -182,7 +190,7 @@ PaddleOCR提供了多种数据增强方式,如果您希望在训练时加入 *由于OpenCV的兼容性问题,扰动操作暂时只支持Linux* -- 训练 +#### 2.2 训练 PaddleOCR支持训练和评估交替进行, 可以在 `configs/rec/rec_icdar15_train.yml` 中修改 `eval_batch_step` 设置评估频率,默认每500个iter评估一次。评估过程中默认将最佳acc模型,保存为 `output/rec_CRNN/best_accuracy` 。 @@ -268,7 +276,7 @@ Eval: **注意,预测/评估时的配置文件请务必与训练一致。** -- 小语种 +#### 2.3 小语种 PaddleOCR目前已支持26种(除中文外)语种识别,`configs/rec/multi_languages` 路径下提供了一个多语言的配置文件模版: [rec_multi_language_lite_train.yml](../../configs/rec/multi_language/rec_multi_language_lite_train.yml)。 @@ -411,7 +419,7 @@ Eval: ... ``` -### 评估 +### 3 评估 评估数据集可以通过 `configs/rec/rec_icdar15_train.yml` 修改Eval中的 `label_file_path` 设置。 @@ -421,10 +429,10 @@ python3 -m paddle.distributed.launch --gpus '0' tools/eval.py -c configs/rec/rec ``` -### 预测 +### 4 预测 -* 训练引擎的预测 +#### 4.1 训练引擎的预测 使用 PaddleOCR 训练好的模型,可以通过以下脚本进行快速预测。 diff --git a/doc/doc_en/recognition_en.md b/doc/doc_en/recognition_en.md index 22f89cdef0..f6c4c1059a 100644 --- a/doc/doc_en/recognition_en.md +++ b/doc/doc_en/recognition_en.md @@ -1,79 +1,69 @@ ## TEXT RECOGNITION -- [DATA PREPARATION](#DATA_PREPARATION) - - [Dataset Download](#Dataset_download) - - [Costom Dataset](#Costom_Dataset) - - [Dictionary](#Dictionary) - - [Add Space Category](#Add_space_category) +- [1 DATA PREPARATION](#DATA_PREPARATION) + - [1.1 Costom Dataset](#Costom_Dataset) + - [1.2 Dataset Download](#Dataset_download) + - [1.3 Dictionary](#Dictionary) + - [1.4 Add Space Category](#Add_space_category) -- [TRAINING](#TRAINING) - - [Data Augmentation](#Data_Augmentation) - - [Training](#Training) - - [Multi-language](#Multi_language) +- [2 TRAINING](#TRAINING) + - [2.1 Data Augmentation](#Data_Augmentation) + - [2.2 Training](#Training) + - [2.3 Multi-language](#Multi_language) -- [EVALUATION](#EVALUATION) +- [3 EVALUATION](#EVALUATION) -- [PREDICTION](#PREDICTION) - - [Training engine prediction](#Training_engine_prediction) +- [4 PREDICTION](#PREDICTION) + - [4.1 Training engine prediction](#Training_engine_prediction) ### DATA PREPARATION -PaddleOCR supports two data formats: `LMDB` is used to train public data and evaluation algorithms; `general data` is used to train your own data: +PaddleOCR supports two data formats: +- `LMDB` is used to train data sets stored in lmdb format; +- `general data` is used to train data sets stored in text files: Please organize the dataset as follows: The default storage path for training data is `PaddleOCR/train_data`, if you already have a dataset on your disk, just create a soft link to the dataset directory: ``` +# linux and mac os ln -sf /train_data/dataset +# windows +mklink /d /train_data/dataset ``` - -* Dataset download - -If you do not have a dataset locally, you can download it on the official website [icdar2015](http://rrc.cvc.uab.es/?ch=4&com=downloads). Also refer to [DTRB](https://github.com/clovaai/deep-text-recognition-benchmark#download-lmdb-dataset-for-traininig-and-evaluation-from-here),download the lmdb format dataset required for benchmark - -If you want to reproduce the paper indicators of SRN, you need to download offline [augmented data](https://pan.baidu.com/s/1-HSZ-ZVdqBF2HaBZ5pRAKA), extraction code: y3ry. The augmented data is obtained by rotation and perturbation of mjsynth and synthtext. Please unzip the data to {your_path}/PaddleOCR/train_data/data_lmdb_Release/training/path. - -* Use your own dataset: +#### 1.1 Costom dataset If you want to use your own data for training, please refer to the following to organize your data. - Training set -First put the training images in the same folder (train_images), and use a txt file (rec_gt_train.txt) to store the image path and label. +It is recommended to put the training images in the same folder, and use a txt file (rec_gt_train.txt) to store the image path and label. The contents of the txt file are as follows: * Note: by default, the image path and image label are split with \t, if you use other methods to split, it will cause training error ``` " Image file name Image annotation " -train_data/train_0001.jpg 简单可依赖 -train_data/train_0002.jpg 用科技让复杂的世界更简单 -``` -PaddleOCR provides label files for training the icdar2015 dataset, which can be downloaded in the following ways: - -``` -# Training set label -wget -P ./train_data/ic15_data https://paddleocr.bj.bcebos.com/dataset/rec_gt_train.txt -# Test Set Label -wget -P ./train_data/ic15_data https://paddleocr.bj.bcebos.com/dataset/rec_gt_test.txt +train_data/train/word_001.jpg 简单可依赖 +train_data/train/word_002.jpg 用科技让复杂的世界更简单 +... ``` The final training set should have the following file structure: ``` |-train_data - |-ic15_data - |- rec_gt_train.txt - |- train - |- word_001.png - |- word_002.jpg - |- word_003.jpg - | ... + |- rec_gt_train.txt + |- train + |- word_001.png + |- word_002.jpg + |- word_003.jpg + | ... ``` - Test set @@ -90,8 +80,25 @@ Similar to the training set, the test set also needs to be provided a folder con |- word_003.jpg | ... ``` + + +#### 1.2 Dataset download + +If you do not have a dataset locally, you can download it on the official website [icdar2015](http://rrc.cvc.uab.es/?ch=4&com=downloads). Also refer to [DTRB](https://github.com/clovaai/deep-text-recognition-benchmark#download-lmdb-dataset-for-traininig-and-evaluation-from-here) ,download the lmdb format dataset required for benchmark + +If you want to reproduce the paper indicators of SRN, you need to download offline [augmented data](https://pan.baidu.com/s/1-HSZ-ZVdqBF2HaBZ5pRAKA), extraction code: y3ry. The augmented data is obtained by rotation and perturbation of mjsynth and synthtext. Please unzip the data to {your_path}/PaddleOCR/train_data/data_lmdb_Release/training/path. + +PaddleOCR provides label files for training the icdar2015 dataset, which can be downloaded in the following ways: + +``` +# Training set label +wget -P ./train_data/ic15_data https://paddleocr.bj.bcebos.com/dataset/rec_gt_train.txt +# Test Set Label +wget -P ./train_data/ic15_data https://paddleocr.bj.bcebos.com/dataset/rec_gt_test.txt +``` + -- Dictionary +#### 1.3 Dictionary Finally, a dictionary ({word_dict_name}.txt) needs to be provided so that when the model is trained, all the characters that appear can be mapped to the dictionary index. @@ -108,6 +115,8 @@ n In `word_dict.txt`, there is a single word in each line, which maps characters and numeric indexes together, e.g "and" will be mapped to [2 5 1] +PaddleOCR has built-in dictionaries, which can be used on demand. + `ppocr/utils/ppocr_keys_v1.txt` is a Chinese dictionary with 6623 characters. `ppocr/utils/ic15_dict.txt` is an English dictionary with 63 characters @@ -123,8 +132,6 @@ In `word_dict.txt`, there is a single word in each line, which maps characters a `ppocr/utils/dict/en_dict.txt` is a English dictionary with 63 characters -You can use it on demand. - The current multi-language model is still in the demo stage and will continue to optimize the model and add languages. **You are very welcome to provide us with dictionaries and fonts in other languages**, If you like, you can submit the dictionary file to [dict](../../ppocr/utils/dict) or corpus file to [corpus](../../ppocr/utils/corpus) and we will thank you in the Repo. @@ -136,14 +143,14 @@ To customize the dict file, please modify the `character_dict_path` field in `co If you need to customize dic file, please add character_dict_path field in configs/rec/rec_icdar15_train.yml to point to your dictionary path. And set character_type to ch. -- Add space category +#### 1.4 Add space category If you want to support the recognition of the `space` category, please set the `use_space_char` field in the yml file to `True`. **Note: use_space_char only takes effect when character_type=ch** -### TRAINING +### 2 TRAINING PaddleOCR provides training scripts, evaluation scripts, and prediction scripts. In this section, the CRNN recognition model will be used as an example: @@ -166,7 +173,7 @@ Start training: python3 -m paddle.distributed.launch --gpus '0,1,2,3' tools/train.py -c configs/rec/rec_icdar15_train.yml ``` -- Data Augmentation +#### 2.1 Data Augmentation PaddleOCR provides a variety of data augmentation methods. If you want to add disturbance during training, please set `distort: true` in the configuration file. @@ -175,7 +182,7 @@ The default perturbation methods are: cvtColor, blur, jitter, Gasuss noise, rand Each disturbance method is selected with a 50% probability during the training process. For specific code implementation, please refer to: [img_tools.py](https://github.com/PaddlePaddle/PaddleOCR/blob/develop/ppocr/data/rec/img_tools.py) -- Training +#### 2.2 Training PaddleOCR supports alternating training and evaluation. You can modify `eval_batch_step` in `configs/rec/rec_icdar15_train.yml` to set the evaluation frequency. By default, it is evaluated every 500 iter and the best acc model is saved under `output/rec_CRNN/best_accuracy` during the evaluation process. @@ -264,7 +271,7 @@ Eval: **Note that the configuration file for prediction/evaluation must be consistent with the training.** -- Multi-language +#### 2.3 Multi-language PaddleOCR currently supports 26 (except Chinese) language recognition. A multi-language configuration file template is provided under the path `configs/rec/multi_languages`: [rec_multi_language_lite_train.yml](../../configs/rec/multi_language/rec_multi_language_lite_train.yml)。 @@ -416,7 +423,7 @@ Eval: ``` -### EVALUATION +### 3 EVALUATION The evaluation dataset can be set by modifying the `Eval.dataset.label_file_list` field in the `configs/rec/rec_icdar15_train.yml` file. @@ -426,10 +433,10 @@ python3 -m paddle.distributed.launch --gpus '0' tools/eval.py -c configs/rec/rec ``` -### PREDICTION +### 4 PREDICTION -* Training engine prediction +#### 4.1 Training engine prediction Using the model trained by paddleocr, you can quickly get prediction through the following script. From 94278781c64851db8010d0135740d66941e222d9 Mon Sep 17 00:00:00 2001 From: WenmuZhou Date: Wed, 3 Feb 2021 12:05:20 +0800 Subject: [PATCH 5/8] update rec doc --- doc/doc_ch/recognition.md | 6 ++++-- doc/doc_en/recognition_en.md | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/doc/doc_ch/recognition.md b/doc/doc_ch/recognition.md index c2b61a2802..80a8fb13f2 100644 --- a/doc/doc_ch/recognition.md +++ b/doc/doc_ch/recognition.md @@ -48,14 +48,15 @@ mklink /d /train_data/dataset ``` " 图像文件名 图像标注信息 " -train_data/train/word_001.jpg 简单可依赖 -train_data/train/word_002.jpg 用科技让复杂的世界更简单 +train_data/rec/train/word_001.jpg 简单可依赖 +train_data/rec/train/word_002.jpg 用科技让复杂的世界更简单 ... ``` 最终训练集应有如下文件结构: ``` |-train_data + |-rec |- rec_gt_train.txt |- train |- word_001.png @@ -70,6 +71,7 @@ train_data/train/word_002.jpg 用科技让复杂的世界更简单 ``` |-train_data + |-rec |- rec_gt_test.txt |- test |- word_001.jpg diff --git a/doc/doc_en/recognition_en.md b/doc/doc_en/recognition_en.md index f6c4c1059a..483df5d7ef 100644 --- a/doc/doc_en/recognition_en.md +++ b/doc/doc_en/recognition_en.md @@ -49,8 +49,8 @@ It is recommended to put the training images in the same folder, and use a txt f ``` " Image file name Image annotation " -train_data/train/word_001.jpg 简单可依赖 -train_data/train/word_002.jpg 用科技让复杂的世界更简单 +train_data/rec/train/word_001.jpg 简单可依赖 +train_data/rec/train/word_002.jpg 用科技让复杂的世界更简单 ... ``` @@ -58,6 +58,7 @@ The final training set should have the following file structure: ``` |-train_data + |-rec |- rec_gt_train.txt |- train |- word_001.png @@ -72,6 +73,7 @@ Similar to the training set, the test set also needs to be provided a folder con ``` |-train_data + |-rec |-ic15_data |- rec_gt_test.txt |- test From bae07f51b53560aef0667c80b32131c1c61e3cb5 Mon Sep 17 00:00:00 2001 From: WenmuZhou Date: Wed, 3 Feb 2021 12:08:56 +0800 Subject: [PATCH 6/8] update angle cls doc --- doc/doc_ch/angle_class.md | 10 +++++++--- doc/doc_en/angle_class_en.md | 4 ++++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/doc/doc_ch/angle_class.md b/doc/doc_ch/angle_class.md index 4d7ff0d7aa..1f5b4f6d3d 100644 --- a/doc/doc_ch/angle_class.md +++ b/doc/doc_ch/angle_class.md @@ -1,4 +1,8 @@ ## 文字角度分类 +### 方法介绍 +文字角度分类主要用于图片非0度的场景下,在这种场景下需要对图片里检测到的文本行进行一个转正的操作。在PaddleOCR系统内, +文字检测之后得到的文本行图片经过仿射变换之后送入识别模型,此时只需要对文字进行一个0和180度的角度分类,因此PaddleOCR内置的 +文字角度分类器**只支持了0和180度的分类**。如果想支持更多角度,可以自己修改算法进行支持。 ### 数据准备 @@ -13,7 +17,7 @@ ln -sf /train_data/cls/dataset 请参考下文组织您的数据。 - 训练集 -首先请将训练图片放入同一个文件夹(train_images),并用一个txt文件(cls_gt_train.txt)记录图片路径和标签。 +首先建议将训练图片放入同一个文件夹,并用一个txt文件(cls_gt_train.txt)记录图片路径和标签。 **注意:** 默认请将图片路径和图片标签用 `\t` 分割,如用其他方式分割将造成训练报错 @@ -21,8 +25,8 @@ ln -sf /train_data/cls/dataset ``` " 图像文件名 图像标注信息 " -train/word_001.jpg 0 -train/word_002.jpg 180 +train/cls/train/word_001.jpg 0 +train/cls/train/word_002.jpg 180 ``` 最终训练集应有如下文件结构: diff --git a/doc/doc_en/angle_class_en.md b/doc/doc_en/angle_class_en.md index 8d9328700f..d78bac9cef 100644 --- a/doc/doc_en/angle_class_en.md +++ b/doc/doc_en/angle_class_en.md @@ -1,5 +1,9 @@ ## TEXT ANGLE CLASSIFICATION +### Method introduction +The angle classification is used in the scene where the image is not 0 degrees. In this scene, it is necessary to perform a correction operation on the text line detected in the picture. In the PaddleOCR system, +The text line image obtained after text detection is sent to the recognition model after affine transformation. At this time, only a 0 and 180 degree angle classification of the text is required, so the built-in PaddleOCR text angle classifier **only supports 0 and 180 degree classification**. If you want to support more angles, you can modify the algorithm yourself to support. + ### DATA PREPARATION Please organize the dataset as follows: From 69c85d976ad1cab364f904e0b8de2885d17267ab Mon Sep 17 00:00:00 2001 From: WenmuZhou Date: Wed, 3 Feb 2021 12:20:40 +0800 Subject: [PATCH 7/8] update whl doc --- doc/doc_ch/whl.md | 43 +++++++++++++++++++++++-------------------- doc/doc_en/whl_en.md | 30 ++++++++++++++++-------------- 2 files changed, 39 insertions(+), 34 deletions(-) diff --git a/doc/doc_ch/whl.md b/doc/doc_ch/whl.md index 6b218e31ec..032d7ae642 100644 --- a/doc/doc_ch/whl.md +++ b/doc/doc_ch/whl.md @@ -1,8 +1,8 @@ # paddleocr package使用说明 -## 快速上手 +## 1 快速上手 -### 安装whl包 +### 1.1 安装whl包 pip安装 ```bash @@ -14,9 +14,12 @@ pip install "paddleocr>=2.0.1" # 推荐使用2.0.1+版本 python3 setup.py bdist_wheel pip3 install dist/paddleocr-x.x.x-py3-none-any.whl # x.x.x是paddleocr的版本号 ``` -### 1. 代码使用 -* 检测+分类+识别全流程 +## 2 使用 +### 2.1 代码使用 +paddleocr whl包会自动下载ppocr轻量级模型作为默认模型,可以根据第3节**自定义模型**进行自定义更换。 + +* 检测+方向分类器+识别全流程 ```python from paddleocr import PaddleOCR, draw_ocr # Paddleocr目前支持中英文、英文、法语、德语、韩语、日语,可以通过修改lang参数进行切换 @@ -84,7 +87,7 @@ im_show.save('result.jpg') -* 分类+识别 +* 方向分类器+识别 ```python from paddleocr import PaddleOCR ocr = PaddleOCR(use_angle_cls=True) # need to run only once to download and load model into memory @@ -143,7 +146,7 @@ for line in result: ['韩国小馆', 0.9907421] ``` -* 单独执行分类 +* 单独执行方向分类器 ```python from paddleocr import PaddleOCR ocr = PaddleOCR(use_angle_cls=True) # need to run only once to download and load model into memory @@ -157,14 +160,14 @@ for line in result: ['0', 0.9999924] ``` -### 通过命令行使用 +### 2.2 通过命令行使用 查看帮助信息 ```bash paddleocr -h ``` -* 检测+分类+识别全流程 +* 检测+方向分类器+识别全流程 ```bash paddleocr --image_dir PaddleOCR/doc/imgs/11.jpg --use_angle_cls true ``` @@ -188,7 +191,7 @@ paddleocr --image_dir PaddleOCR/doc/imgs/11.jpg ...... ``` -* 分类+识别 +* 方向分类器+识别 ```bash paddleocr --image_dir PaddleOCR/doc/imgs_words/ch/word_1.jpg --use_angle_cls true --det false ``` @@ -220,7 +223,7 @@ paddleocr --image_dir PaddleOCR/doc/imgs_words/ch/word_1.jpg --det false ['韩国小馆', 0.9907421] ``` -* 单独执行分类 +* 单独执行方向分类器 ```bash paddleocr --image_dir PaddleOCR/doc/imgs_words/ch/word_1.jpg --use_angle_cls true --det false --rec false ``` @@ -230,11 +233,11 @@ paddleocr --image_dir PaddleOCR/doc/imgs_words/ch/word_1.jpg --use_angle_cls tru ['0', 0.9999924] ``` -## 自定义模型 +## 3 自定义模型 当内置模型无法满足需求时,需要使用到自己训练的模型。 首先,参照[inference.md](./inference.md) 第一节转换将检测、分类和识别模型转换为inference模型,然后按照如下方式使用 -### 代码使用 +### 3.1 代码使用 ```python from paddleocr import PaddleOCR, draw_ocr # 模型路径下必须含有model和params文件 @@ -255,17 +258,17 @@ im_show = Image.fromarray(im_show) im_show.save('result.jpg') ``` -### 通过命令行使用 +### 3.2 通过命令行使用 ```bash paddleocr --image_dir PaddleOCR/doc/imgs/11.jpg --det_model_dir {your_det_model_dir} --rec_model_dir {your_rec_model_dir} --rec_char_dict_path {your_rec_char_dict_path} --cls_model_dir {your_cls_model_dir} --use_angle_cls true ``` -### 使用网络图片或者numpy数组作为输入 +## 4 使用网络图片或者numpy数组作为输入 -1. 网络图片 +### 4.1 网络图片 -代码使用 +- 代码使用 ```python from paddleocr import PaddleOCR, draw_ocr # Paddleocr目前支持中英文、英文、法语、德语、韩语、日语,可以通过修改lang参数进行切换 @@ -286,12 +289,12 @@ im_show = draw_ocr(image, boxes, txts, scores, font_path='/path/to/PaddleOCR/doc im_show = Image.fromarray(im_show) im_show.save('result.jpg') ``` -命令行模式 +- 命令行模式 ```bash paddleocr --image_dir http://n.sinaimg.cn/ent/transform/w630h933/20171222/o111-fypvuqf1838418.jpg --use_angle_cls=true ``` -2. numpy数组 +### 4.2 numpy数组 仅通过代码使用时支持numpy数组作为输入 ```python from paddleocr import PaddleOCR, draw_ocr @@ -301,7 +304,7 @@ ocr = PaddleOCR(use_angle_cls=True, lang="ch") # need to run only once to downlo img_path = 'PaddleOCR/doc/imgs/11.jpg' img = cv2.imread(img_path) # img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY), 如果你自己训练的模型支持灰度图,可以将这句话的注释取消 -result = ocr.ocr(img_path, cls=True) +result = ocr.ocr(img, cls=True) for line in result: print(line) @@ -316,7 +319,7 @@ im_show = Image.fromarray(im_show) im_show.save('result.jpg') ``` -## 参数说明 +## 5 参数说明 | 字段 | 说明 | 默认值 | |-------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------| diff --git a/doc/doc_en/whl_en.md b/doc/doc_en/whl_en.md index 1ef14f1427..ae4d349235 100644 --- a/doc/doc_en/whl_en.md +++ b/doc/doc_en/whl_en.md @@ -1,7 +1,7 @@ # paddleocr package -## Get started quickly -### install package +## 1 Get started quickly +### 1.1 install package install by pypi ```bash pip install "paddleocr>=2.0.1" # Recommend to use version 2.0.1+ @@ -12,9 +12,11 @@ build own whl package and install python3 setup.py bdist_wheel pip3 install dist/paddleocr-x.x.x-py3-none-any.whl # x.x.x is the version of paddleocr ``` -### 1. Use by code +## 2 Use +### 2.1 Use by code +The paddleocr whl package will automatically download the ppocr lightweight model as the default model, which can be customized and replaced according to the section 3 **Custom Model**. -* detection classification and recognition +* detection angle classification and recognition ```python from paddleocr import PaddleOCR,draw_ocr # Paddleocr supports Chinese, English, French, German, Korean and Japanese. @@ -163,7 +165,7 @@ Output will be a list, each item contains classification result and confidence ['0', 0.99999964] ``` -### Use by command line +### 2.2 Use by command line show help information ```bash @@ -239,11 +241,11 @@ Output will be a list, each item contains classification result and confidence ['0', 0.99999964] ``` -## Use custom model +## 3 Use custom model When the built-in model cannot meet the needs, you need to use your own trained model. First, refer to the first section of [inference_en.md](./inference_en.md) to convert your det and rec model to inference model, and then use it as follows -### 1. Use by code +### 3.1 Use by code ```python from paddleocr import PaddleOCR,draw_ocr @@ -265,17 +267,17 @@ im_show = Image.fromarray(im_show) im_show.save('result.jpg') ``` -### Use by command line +### 3.2 Use by command line ```bash paddleocr --image_dir PaddleOCR/doc/imgs/11.jpg --det_model_dir {your_det_model_dir} --rec_model_dir {your_rec_model_dir} --rec_char_dict_path {your_rec_char_dict_path} --cls_model_dir {your_cls_model_dir} --use_angle_cls true ``` -### Use web images or numpy array as input +## 4 Use web images or numpy array as input -1. Web image +### 4.1 Web image -Use by code +- Use by code ```python from paddleocr import PaddleOCR, draw_ocr ocr = PaddleOCR(use_angle_cls=True, lang="ch") # need to run only once to download and load model into memory @@ -294,12 +296,12 @@ im_show = draw_ocr(image, boxes, txts, scores, font_path='/path/to/PaddleOCR/doc im_show = Image.fromarray(im_show) im_show.save('result.jpg') ``` -Use by command line +- Use by command line ```bash paddleocr --image_dir http://n.sinaimg.cn/ent/transform/w630h933/20171222/o111-fypvuqf1838418.jpg --use_angle_cls=true ``` -2. Numpy array +### 4.2 Numpy array Support numpy array as input only when used by code ```python @@ -324,7 +326,7 @@ im_show.save('result.jpg') ``` -## Parameter Description +## 5 Parameter Description | Parameter | Description | Default value | |-------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------| From 1617cfdd1e457cd6e33d5ecc8ef3e41ce362ba85 Mon Sep 17 00:00:00 2001 From: WenmuZhou Date: Wed, 3 Feb 2021 19:28:38 +0800 Subject: [PATCH 8/8] update angle doc --- doc/doc_ch/angle_class.md | 4 ++++ doc/doc_en/angle_class_en.md | 3 +++ doc/imgs_results/angle_class_example.jpg | Bin 0 -> 62016 bytes 3 files changed, 7 insertions(+) create mode 100644 doc/imgs_results/angle_class_example.jpg diff --git a/doc/doc_ch/angle_class.md b/doc/doc_ch/angle_class.md index 7e8e9b34f3..ad25a66618 100644 --- a/doc/doc_ch/angle_class.md +++ b/doc/doc_ch/angle_class.md @@ -4,6 +4,10 @@ 文字检测之后得到的文本行图片经过仿射变换之后送入识别模型,此时只需要对文字进行一个0和180度的角度分类,因此PaddleOCR内置的 文字角度分类器**只支持了0和180度的分类**。如果想支持更多角度,可以自己修改算法进行支持。 +0和180度数据样本例子: + +![](../imgs_results/angle_class_example.jpg) + ### 数据准备 请按如下步骤设置数据集: diff --git a/doc/doc_en/angle_class_en.md b/doc/doc_en/angle_class_en.md index 9b80737095..0044d85ac0 100644 --- a/doc/doc_en/angle_class_en.md +++ b/doc/doc_en/angle_class_en.md @@ -4,6 +4,9 @@ The angle classification is used in the scene where the image is not 0 degrees. In this scene, it is necessary to perform a correction operation on the text line detected in the picture. In the PaddleOCR system, The text line image obtained after text detection is sent to the recognition model after affine transformation. At this time, only a 0 and 180 degree angle classification of the text is required, so the built-in PaddleOCR text angle classifier **only supports 0 and 180 degree classification**. If you want to support more angles, you can modify the algorithm yourself to support. +Example of 0 and 180 degree data samples: + +![](../imgs_results/angle_class_example.jpg) ### DATA PREPARATION Please organize the dataset as follows: diff --git a/doc/imgs_results/angle_class_example.jpg b/doc/imgs_results/angle_class_example.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8e683be32cdb20e964a7154980d5b1d33d6a8eca GIT binary patch literal 62016 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 x|$%Q^F1 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 BE2;nh literal 0 HcmV?d00001