README_ch.md 7.4 KB
Newer Older
littletomatodonkey's avatar
fix doc  
littletomatodonkey 已提交
1 2
简体中文 | [English](README.md)

W
weishengyu 已提交
3
## Style Text
W
weishengyu 已提交
4 5


6
### 目录
D
dyning 已提交
7
- [一、工具简介](#工具简介)
D
dyning 已提交
8 9
- [二、环境配置](#环境配置)
- [三、快速上手](#快速上手)
D
dyning 已提交
10
- [四、应用案例](#应用案例)
W
weishengyu 已提交
11
- [五、代码结构](#代码结构)
W
weishengyu 已提交
12

D
dyning 已提交
13
<a name="工具简介"></a>
W
weishengyu 已提交
14
### 一、工具简介
15
<div align="center">
W
weishengyu 已提交
16
    <img src="doc/images/3.png" width="800">
17
</div>
W
weishengyu 已提交
18

D
dyning 已提交
19
<div align="center">
D
dyning 已提交
20
    <img src="doc/images/1.png" width="600">
D
dyning 已提交
21 22
</div>

D
dyning 已提交
23

D
dyning 已提交
24
Style-Text数据合成工具是基于百度自研的文本编辑算法《Editing Text in the Wild》https://arxiv.org/abs/1908.03047
D
dyning 已提交
25

D
dyning 已提交
26
不同于常用的基于GAN的数据合成工具,Style-Text主要框架包括:1.文本前景风格迁移模块 2.背景抽取模块 3.融合模块。经过这样三步,就可以迅速实现图像文本风格迁移。下图是一些该数据合成工具效果图。
W
weishengyu 已提交
27

28
<div align="center">
D
dyning 已提交
29
    <img src="doc/images/2.png" width="1000">
30
</div>
W
weishengyu 已提交
31

D
dyning 已提交
32
<a name="环境配置"></a>
W
weishengyu 已提交
33
### 二、环境配置
34

D
dyning 已提交
35
1. 参考[快速安装](../doc/doc_ch/installation.md),安装PaddleOCR。
W
weishengyu 已提交
36
2. 进入`StyleText`目录,下载模型,并解压:
W
weishengyu 已提交
37 38

```bash
W
weishengyu 已提交
39
cd StyleText
W
dbg  
weishengyu 已提交
40
wget https://paddleocr.bj.bcebos.com/dygraph_v2.0/style_text/style_text_models.zip
W
weishengyu 已提交
41 42 43
unzip style_text_models.zip
```

44
如果您将模型保存再其他位置,请在`configs/config.yml`中修改模型文件的地址,修改时需要同时修改这三个配置:
W
weishengyu 已提交
45 46 47 48 49 50 51 52 53 54 55 56

```
bg_generator:
  pretrain: style_text_models/bg_generator
...
text_generator:
  pretrain: style_text_models/text_generator
...
fusion_generator:
  pretrain: style_text_models/fusion_generator
```

D
dyning 已提交
57
<a name="快速上手"></a>
W
weishengyu 已提交
58 59
### 三、快速上手

W
weishengyu 已提交
60
#### 合成单张图
D
dyning 已提交
61
输入一张风格图和一段文字语料,运行tools/synth_image,合成单张图片,结果图像保存在当前目录下:
littletomatodonkey's avatar
fix doc  
littletomatodonkey 已提交
62

W
weishengyu 已提交
63
```python
W
weishengyu 已提交
64
python3 -m tools.synth_image -c configs/config.yml --style_image examples/style_images/2.jpg --text_corpus PaddleOCR --language en
W
weishengyu 已提交
65
```
D
dyning 已提交
66
* 注意:语言选项和语料相对应,目前该工具只支持英文、简体中文和韩语。
D
dyning 已提交
67

W
weishengyu 已提交
68
例如,输入如下图片和语料"PaddleOCR":
D
dyning 已提交
69

W
weishengyu 已提交
70
<div align="center">
W
weishengyu 已提交
71
    <img src="examples/style_images/2.jpg" width="300">
W
weishengyu 已提交
72
</div>
D
dyning 已提交
73

D
dyning 已提交
74
生成合成数据`fake_fusion.jpg`
75
<div align="center">
W
weishengyu 已提交
76
    <img src="doc/images/4.jpg" width="300">
77
</div>
D
dyning 已提交
78

D
dyning 已提交
79
除此之外,程序还会生成并保存中间结果`fake_bg.jpg`:为风格参考图去掉文字后的背景;
littletomatodonkey's avatar
fix doc  
littletomatodonkey 已提交
80

W
weishengyu 已提交
81 82 83
<div align="center">
    <img src="doc/images/7.jpg" width="300">
</div>
D
dyning 已提交
84

D
dyning 已提交
85
`fake_text.jpg`:是用提供的字符串,仿照风格参考图中文字的风格,生成在灰色背景上的文字图片。
littletomatodonkey's avatar
fix doc  
littletomatodonkey 已提交
86

W
weishengyu 已提交
87 88 89
<div align="center">
    <img src="doc/images/8.jpg" width="300">
</div>
W
dbg  
weishengyu 已提交
90

W
weishengyu 已提交
91
#### 批量合成
D
dyning 已提交
92
在实际应用场景中,经常需要批量合成图片,补充到训练集中。Style-Text可以使用一批风格图片和语料,批量合成数据。合成过程如下:
W
weishengyu 已提交
93

D
dyning 已提交
94
1.`configs/dataset_config.yml`中配置目标场景风格图像和语料的路径,具体如下:
D
dyning 已提交
95

D
dyning 已提交
96 97
   * `Global`
     * `output_dir:`:保存合成数据的目录。
W
dbg  
weishengyu 已提交
98
   * `StyleSampler`
W
weishengyu 已提交
99 100 101 102 103 104
     * `image_home`:风格图片目录;
     * `label_file`:风格图片路径列表文件,如果所用数据集有label,则label_file为label文件路径;
     * `with_label`:标志`label_file`是否为label文件。
   * `CorpusGenerator`
     * `method`:语料生成方法,目前有`FileCorpus``EnNumCorpus`可选。如果使用`EnNumCorpus`,则不需要填写其他配置,否则需要修改`corpus_file``language`
     * `language`:语料的语种;
W
Wei Shengyu 已提交
105
     * `corpus_file`: 语料文件路径。语料文件应使用文本文件。语料生成器首先会将语料按行切分,之后每次随机选取一行。
littletomatodonkey's avatar
fix doc  
littletomatodonkey 已提交
106

W
Wei Shengyu 已提交
107 108 109 110 111 112 113 114 115
   语料文件格式示例:
   ```
   PaddleOCR
   飞桨文字识别
   StyleText
   风格文本图像数据合成
   ...
   ```

D
dyning 已提交
116
   Style-Text也提供了一批中英韩5万张通用场景数据用作文本风格图像,便于合成场景丰富的文本图像,下图给出了一些示例。
littletomatodonkey's avatar
fix doc  
littletomatodonkey 已提交
117 118 119

   中英韩5万张通用场景数据: [下载地址](https://paddleocr.bj.bcebos.com/dygraph_v2.0/style_text/chkoen_5w.tar)

W
weishengyu 已提交
120 121 122
<div align="center">
    <img src="doc/images/5.png" width="800">
</div>
D
dyning 已提交
123

W
weishengyu 已提交
124 125 126 127 128
2. 运行`tools/synth_dataset`合成数据:

   ``` bash
   python -m tools.synth_dataset -c configs/dataset_config.yml
   ```
W
weishengyu 已提交
129 130 131 132 133 134 135 136 137 138 139 140 141
   我们在example提供了样例图片和语料在example中。
    <div align="center">
        <img src="examples/style_images/1.jpg" width="300">
        <img src="examples/style_images/2.jpg" width="300">
    </div>

   直接运行上述命令,可以在output_data中产生样例输出,包括图片和用于训练识别模型的标注文件:
   <div align="center">
       <img src="doc/images/12.png" width="800">
   </div>

   其中label目录下的标注文件为程序运行过程中产生的缓存,如果程序在中途异常终止,可以使用缓存的标注文件。
   如果程序正常运行完毕,则会在output_data下生成label.txt,为最终的标注结果。
W
weishengyu 已提交
142

D
dyning 已提交
143 144
<a name="应用案例"></a>
### 四、应用案例
D
dyning 已提交
145
下面以金属表面英文数字识别和通用韩语识别两个场景为例,说明使用Style-Text合成数据,来提升文本识别效果的实际案例。下图给出了一些真实场景图像和合成图像的示例:
146

W
weishengyu 已提交
147 148 149 150
<div align="center">
    <img src="doc/images/6.png" width="800">
</div>

D
dyning 已提交
151
在添加上述合成数据进行训练后,识别模型的效果提升,如下表所示:
W
weishengyu 已提交
152

D
dyning 已提交
153
| 场景     | 字符       | 原始数据 | 测试数据 | 只使用原始数据</br>识别准确率 | 新增合成数据 | 同时使用合成数据</br>识别准确率 | 指标提升 |
W
weishengyu 已提交
154 155 156
| -------- | ---------- | -------- | -------- | -------------------------- | ------------ | ---------------------- | -------- |
| 金属表面 | 英文和数字 | 2203     | 650      | 0.5938                     | 20000        | 0.7546                 | 16%      |
| 随机背景 | 韩语       | 5631     | 1230     | 0.3012                     | 100000       | 0.5057                 | 20%      |
157

D
dyning 已提交
158

W
weishengyu 已提交
159 160
<a name="代码结构"></a>
### 五、代码结构
littletomatodonkey's avatar
littletomatodonkey 已提交
161

W
dbg  
weishengyu 已提交
162
```
littletomatodonkey's avatar
littletomatodonkey 已提交
163
StyleText
W
weishengyu 已提交
164
|-- arch                        // 网络结构定义文件
165 166 167 168 169
|   |-- base_module.py
|   |-- decoder.py
|   |-- encoder.py
|   |-- spectral_norm.py
|   `-- style_text_rec.py
W
weishengyu 已提交
170
|-- configs                     // 配置文件
171 172
|   |-- config.yml
|   `-- dataset_config.yml
W
weishengyu 已提交
173 174 175 176 177
|-- engine                      // 数据合成引擎
|   |-- corpus_generators.py    // 从文本采样或随机生成语料
|   |-- predictors.py           // 调用网络生成数据
|   |-- style_samplers.py       // 采样风格图片
|   |-- synthesisers.py         // 调度各个模块,合成数据
W
dbg  
weishengyu 已提交
178
|   |-- text_drawers.py         // 生成标准文字图片,用作输入
W
weishengyu 已提交
179 180
|   `-- writers.py              // 将合成的图片和标签写入本地目录
|-- examples                    // 示例文件
181 182 183 184 185 186
|   |-- corpus
|   |   `-- example.txt
|   |-- image_list.txt
|   `-- style_images
|       |-- 1.jpg
|       `-- 2.jpg
W
weishengyu 已提交
187
|-- fonts                       // 字体文件
188 189 190
|   |-- ch_standard.ttf
|   |-- en_standard.ttf
|   `-- ko_standard.ttf
W
weishengyu 已提交
191
|-- tools                       // 程序入口
192
|   |-- __init__.py
W
weishengyu 已提交
193 194 195
|   |-- synth_dataset.py        // 批量合成数据
|   `-- synth_image.py          // 合成单张图片
`-- utils                       // 其他基础功能模块
196 197 198 199
    |-- config.py
    |-- load_params.py
    |-- logging.py
    |-- math_functions.py
W
dbg  
weishengyu 已提交
200
    `-- sys_funcs.py
D
dyning 已提交
201
```