change doc and move style_text to root folder
@ -1,24 +1,35 @@
 | 
			
		||||
### 快速上手
 | 
			
		||||
## Style Text Rec
 | 
			
		||||
 | 
			
		||||
### 目录
 | 
			
		||||
 | 
			
		||||
[TOC]
 | 
			
		||||
 | 
			
		||||
### 工具简介
 | 
			
		||||
<div align="center">
 | 
			
		||||
    <img src="../imgs_style_text/3.png" width="800">
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
Style-Text是对百度自研文本编辑算法《Editing Text in the Wild》中提出的SRNet网络的改进,不同于常用的GAN的方法只选择一个分支,该工具将文本合成任务分解为三个子模块,文本风格迁移模块、背景抽取模块和前背景融合模块,来提升合成数据的效果。下图显示了一些示例结果。
 | 
			
		||||
 | 
			
		||||
<div align="center">
 | 
			
		||||
    <img src="../imgs_style_text/1.png" width="800">
 | 
			
		||||
    <img src="../imgs_style_text/2.png" width="800">
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
此外,在实际铭牌文本识别场景和韩语文本识别场景,验证了该合成工具的有效性,具体如下。
 | 
			
		||||
此外,在实际铭牌文本识别场景和韩语文本识别场景,验证了该合成工具的有效性。
 | 
			
		||||
 | 
			
		||||
### 环境配置
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#### 环境配置
 | 
			
		||||
 | 
			
		||||
1. 参考[快速安装](./installation.md),安装PaddlePaddle并准备环境。强烈建议您使用python3环境。
 | 
			
		||||
1. 参考[快速安装](./installation.md),安装PaddleOCR。强烈建议您使用python3环境。
 | 
			
		||||
2. 进入`style_text_rec`目录,下载模型,并解压:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
cd tools/style_text_rec
 | 
			
		||||
wget /path/to/style_text_models.zip
 | 
			
		||||
cd style_text_rec
 | 
			
		||||
wget /https://paddleocr.bj.bcebos.com/dygraph_v2.0/style_text/style_text_models.zip
 | 
			
		||||
unzip style_text_models.zip
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
您可以在 [此处](https://paddleocr.bj.bcebos.com/dygraph_v2.0/style_text/style_text_models.zip) 下载模型文件。如果您选择了其他下载位置,请在`configs/config.yml`中修改模型文件的地址,修改时需要同时修改这三个配置:
 | 
			
		||||
如果您将模型保存再其他位置,请在`configs/config.yml`中修改模型文件的地址,修改时需要同时修改这三个配置:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
bg_generator:
 | 
			
		||||
@ -31,17 +42,19 @@ fusion_generator:
 | 
			
		||||
  pretrain: style_text_models/fusion_generator
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#### 合成单张图片
 | 
			
		||||
### 快速上手
 | 
			
		||||
 | 
			
		||||
1. 运行tools/synth_image,生成示例图片:
 | 
			
		||||
 | 
			
		||||
```python
 | 
			
		||||
python -m tools.synth_image -c configs/config.yml
 | 
			
		||||
python3 -m tools.synth_image -c configs/config.yml
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
1. 运行后,会生成`fake_busion.jpg`,即为最终结果。除此之外,程序还会生成并保存中间结果:
 | 
			
		||||
1. 运行后,会生成`fake_busion.jpg`,即为最终结果。
 | 
			
		||||
<div align="center">
 | 
			
		||||
    <img src="../imgs_style_text/4.jpg" width="800">
 | 
			
		||||
</div>
 | 
			
		||||
除此之外,程序还会生成并保存中间结果:
 | 
			
		||||
   * `fake_bg.jpg`:为风格参考图去掉文字后的背景;
 | 
			
		||||
   * `fake_text.jpg`:是用提供的字符串,仿照风格参考图中文字的风格,生成在灰色背景上的文字图片。
 | 
			
		||||
  
 | 
			
		||||
@ -54,26 +67,6 @@ python -m tools.synth_image -c configs/config.yml
 | 
			
		||||
 | 
			
		||||
### 高级使用
 | 
			
		||||
 | 
			
		||||
#### 组件介绍
 | 
			
		||||
 | 
			
		||||
`Style Text Rec`主要包含以下组件:
 | 
			
		||||
 | 
			
		||||
* `style_samplers`:风格图片采样器,负责返回风格图片。目前我们提供了`DatasetSampler`,可以从一个有标注的数据集中采样。
 | 
			
		||||
 | 
			
		||||
* `corpus_generators`:语料生成器,负责生成语料。目前提供了两种语料成生成器:
 | 
			
		||||
  * `EnNumCorpus`:根据给定的长度生成随机字符串,字符可能是大小写英文字母、数字和空格。
 | 
			
		||||
  * `FileCorpus`:读取指定的文本文件,并随机返回其中的单词.
 | 
			
		||||
 | 
			
		||||
* `text_drawers`:标准字体图片生成器,负责根据输入的语料,生成标准字体的图片。注意,使用该组件时,一定要根据语料修改对应的语言信息,否则可能会书写失败。
 | 
			
		||||
 | 
			
		||||
* `predictors`:预测器,根据给定的风格图片和标准字体图片,调用深度学习模型,生成新的数据。`predictor`是整个算法的核心模块。
 | 
			
		||||
 | 
			
		||||
* `writers`:文件输出器,负责将合成的图片与标签文件写入硬盘。
 | 
			
		||||
 | 
			
		||||
* `synthesisers`:合成器,负责调用各个模块,完成数据合成。
 | 
			
		||||
 | 
			
		||||
### 合成数据集
 | 
			
		||||
 | 
			
		||||
在开始合成数据集前,需要准备一些素材。
 | 
			
		||||
 | 
			
		||||
首先,需要风格图片作为合成图片的参考依据,这些数据可以是用作训练OCR识别模型的数据集。本例中使用带有标注文件的数据集作为风格图片.
 | 
			
		||||
@ -99,11 +92,52 @@ python -m tools.synth_image -c configs/config.yml
 | 
			
		||||
3. 如果您想使用并行方式来快速合成数据,可以通过启动多个进程,在启动时需要指定不同的`tag`(`-t`),如下所示:
 | 
			
		||||
 | 
			
		||||
   ```bash
 | 
			
		||||
   python -m tools.synth_dataset -t 0 -c configs/dataset_config.yml
 | 
			
		||||
   python -m tools.synth_dataset -t 1 -c configs/dataset_config.yml
 | 
			
		||||
   python3 -m tools.synth_dataset -t 0 -c configs/dataset_config.yml
 | 
			
		||||
   python3 -m tools.synth_dataset -t 1 -c configs/dataset_config.yml
 | 
			
		||||
   ```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### 使用合成数据集进行OCR识别训练
 | 
			
		||||
### 应用示例
 | 
			
		||||
 | 
			
		||||
在完成上述操作后,即可得到用于OCR识别的合成数据集,接下来请参考[OCR识别文档](https://github.com/PaddlePaddle/PaddleOCR/blob/dygraph/doc/doc_ch/recognition.md#%E5%90%AF%E5%8A%A8%E8%AE%AD%E7%BB%83),完成训练。
 | 
			
		||||
 | 
			
		||||
### 项目结构
 | 
			
		||||
 | 
			
		||||
.
 | 
			
		||||
|-- arch
 | 
			
		||||
|   |-- base_module.py
 | 
			
		||||
|   |-- decoder.py
 | 
			
		||||
|   |-- encoder.py
 | 
			
		||||
|   |-- spectral_norm.py
 | 
			
		||||
|   `-- style_text_rec.py
 | 
			
		||||
|-- configs
 | 
			
		||||
|   |-- config.yml
 | 
			
		||||
|   `-- dataset_config.yml
 | 
			
		||||
|-- engine
 | 
			
		||||
|   |-- corpus_generators.py
 | 
			
		||||
|   |-- predictors.py
 | 
			
		||||
|   |-- style_samplers.py
 | 
			
		||||
|   |-- synthesisers.py
 | 
			
		||||
|   |-- text_drawers.py
 | 
			
		||||
|   `-- writers.py
 | 
			
		||||
|-- examples
 | 
			
		||||
|   |-- corpus
 | 
			
		||||
|   |   `-- example.txt
 | 
			
		||||
|   |-- image_list.txt
 | 
			
		||||
|   `-- style_images
 | 
			
		||||
|       |-- 1.jpg
 | 
			
		||||
|       `-- 2.jpg
 | 
			
		||||
|-- fonts
 | 
			
		||||
|   |-- ch_standard.ttf
 | 
			
		||||
|   |-- en_standard.ttf
 | 
			
		||||
|   `-- ko_standard.ttf
 | 
			
		||||
|-- tools
 | 
			
		||||
|   |-- __init__.py
 | 
			
		||||
|   |-- synth_dataset.py
 | 
			
		||||
|   `-- synth_image.py
 | 
			
		||||
`-- utils
 | 
			
		||||
    |-- config.py
 | 
			
		||||
    |-- load_params.py
 | 
			
		||||
    |-- logging.py
 | 
			
		||||
    |-- math_functions.py
 | 
			
		||||
    `-- sys_funcs.py
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								doc/imgs_style_text/1.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 168 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								doc/imgs_style_text/2.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 201 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								doc/imgs_style_text/3.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 68 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								doc/imgs_style_text/4.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 2.2 KiB  | 
							
								
								
									
										0
									
								
								style_text_rec/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										0
									
								
								style_text_rec/arch/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										0
									
								
								style_text_rec/engine/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB  | 
| 
		 Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.8 KiB  | 
							
								
								
									
										0
									
								
								style_text_rec/tools/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -15,6 +15,7 @@ import os
 | 
			
		||||
import cv2
 | 
			
		||||
import sys
 | 
			
		||||
import glob
 | 
			
		||||
from argparse import ArgumentParser, RawDescriptionHelpFormatter
 | 
			
		||||
 | 
			
		||||
from engine.synthesisers import ImageSynthesiser
 | 
			
		||||
 | 
			
		||||
@ -24,11 +25,14 @@ sys.path.append(os.path.abspath(os.path.join(__dir__, '..')))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def synth_image():
 | 
			
		||||
    args = ArgsParser().parse_args()
 | 
			
		||||
    image_synthesiser = ImageSynthesiser()
 | 
			
		||||
    img = cv2.imread("examples/style_images/1.jpg")
 | 
			
		||||
    corpus = "PaddleOCR"
 | 
			
		||||
    language = "en"
 | 
			
		||||
    synth_result = image_synthesiser.synth_image(corpus, img, language)
 | 
			
		||||
    style_image_path = args.style_image
 | 
			
		||||
    img = cv2.imread(style_image_path)
 | 
			
		||||
    text_corpus = args.text_corpus
 | 
			
		||||
    language = args.language
 | 
			
		||||
 | 
			
		||||
    synth_result = image_synthesiser.synth_image(text_corpus, img, language)
 | 
			
		||||
    fake_fusion = synth_result["fake_fusion"]
 | 
			
		||||
    fake_text = synth_result["fake_text"]
 | 
			
		||||
    fake_bg = synth_result["fake_bg"]
 | 
			
		||||
@ -73,6 +77,26 @@ def batch_synth_images():
 | 
			
		||||
            print(cno, corpus_num, sno, style_img_num)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ArgsParser(ArgumentParser):
 | 
			
		||||
    def __init__(self):
 | 
			
		||||
        super(ArgsParser, self).__init__(
 | 
			
		||||
            formatter_class=RawDescriptionHelpFormatter)
 | 
			
		||||
        self.add_argument("-c", "--config", help="configuration file to use")
 | 
			
		||||
        self.add_argument(
 | 
			
		||||
            "--style_image", default="examples/style_images/1.jpg", help="tag for marking worker")
 | 
			
		||||
        self.add_argument(
 | 
			
		||||
            "--text_corpus", default="PaddleOCR", help="tag for marking worker")
 | 
			
		||||
        self.add_argument(
 | 
			
		||||
            "--language", default="en", help="tag for marking worker")
 | 
			
		||||
 | 
			
		||||
    def parse_args(self, argv=None):
 | 
			
		||||
        args = super(ArgsParser, self).parse_args(argv)
 | 
			
		||||
        assert args.config is not None, \
 | 
			
		||||
            "Please specify --config=configure_file_path."
 | 
			
		||||
        return args
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    # batch_synth_images()
 | 
			
		||||
    synth_image()
 | 
			
		||||