2020-12-15 22:46:58 +08:00
|
|
|
|
## Style Text
|
2020-12-15 15:38:01 +08:00
|
|
|
|
|
2020-12-15 20:21:04 +08:00
|
|
|
|
### 目录
|
2020-12-15 22:50:48 +08:00
|
|
|
|
- [一、工具简介](#工具简介)
|
2020-12-15 22:52:44 +08:00
|
|
|
|
- [二、环境配置](#环境配置)
|
|
|
|
|
- [三、快速上手](#快速上手)
|
2020-12-15 23:02:41 +08:00
|
|
|
|
- [四、应用案例](#应用案例)
|
2020-12-15 23:30:03 +08:00
|
|
|
|
- [五、代码结构](#代码结构)
|
2020-12-15 15:38:01 +08:00
|
|
|
|
|
2020-12-15 22:52:44 +08:00
|
|
|
|
<a name="工具简介"></a>
|
2020-12-15 22:46:58 +08:00
|
|
|
|
### 一、工具简介
|
2020-12-15 20:21:04 +08:00
|
|
|
|
<div align="center">
|
2020-12-15 21:53:06 +08:00
|
|
|
|
<img src="doc/images/3.png" width="800">
|
2020-12-15 20:21:04 +08:00
|
|
|
|
</div>
|
2020-12-15 15:38:01 +08:00
|
|
|
|
|
2020-12-15 22:11:59 +08:00
|
|
|
|
<div align="center">
|
2020-12-15 22:13:20 +08:00
|
|
|
|
<img src="doc/images/1.png" width="600">
|
2020-12-15 22:11:59 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
2020-12-15 22:53:28 +08:00
|
|
|
|
|
2020-12-15 22:09:50 +08:00
|
|
|
|
Style-Text数据合成工具是基于百度自研的文本编辑算法《Editing Text in the Wild》https://arxiv.org/abs/1908.03047
|
2020-12-15 22:53:07 +08:00
|
|
|
|
|
2020-12-15 22:54:15 +08:00
|
|
|
|
不同于常用的基于GAN的数据合成工具,Style-Text主要框架包括:1.文本前景风格迁移模块 2.背景抽取模块 3.融合模块。经过这样三步,就可以迅速实现图像文本风格迁移。下图是一些该数据合成工具效果图。
|
2020-12-15 15:38:01 +08:00
|
|
|
|
|
2020-12-15 20:21:04 +08:00
|
|
|
|
<div align="center">
|
2020-12-15 22:13:20 +08:00
|
|
|
|
<img src="doc/images/2.png" width="1000">
|
2020-12-15 20:21:04 +08:00
|
|
|
|
</div>
|
2020-12-15 15:38:01 +08:00
|
|
|
|
|
2020-12-15 22:52:44 +08:00
|
|
|
|
<a name="环境配置"></a>
|
2020-12-15 22:46:58 +08:00
|
|
|
|
### 二、环境配置
|
2020-12-15 20:21:04 +08:00
|
|
|
|
|
2020-12-15 22:17:34 +08:00
|
|
|
|
1. 参考[快速安装](../doc/doc_ch/installation.md),安装PaddleOCR。
|
2020-12-15 22:46:58 +08:00
|
|
|
|
2. 进入`StyleText`目录,下载模型,并解压:
|
2020-12-15 15:38:01 +08:00
|
|
|
|
|
|
|
|
|
```bash
|
2020-12-15 22:46:58 +08:00
|
|
|
|
cd StyleText
|
2020-12-15 21:14:48 +08:00
|
|
|
|
wget https://paddleocr.bj.bcebos.com/dygraph_v2.0/style_text/style_text_models.zip
|
2020-12-15 15:38:01 +08:00
|
|
|
|
unzip style_text_models.zip
|
|
|
|
|
```
|
|
|
|
|
|
2020-12-15 20:21:04 +08:00
|
|
|
|
如果您将模型保存再其他位置,请在`configs/config.yml`中修改模型文件的地址,修改时需要同时修改这三个配置:
|
2020-12-15 15:38:01 +08:00
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
bg_generator:
|
|
|
|
|
pretrain: style_text_models/bg_generator
|
|
|
|
|
...
|
|
|
|
|
text_generator:
|
|
|
|
|
pretrain: style_text_models/text_generator
|
|
|
|
|
...
|
|
|
|
|
fusion_generator:
|
|
|
|
|
pretrain: style_text_models/fusion_generator
|
|
|
|
|
```
|
|
|
|
|
|
2020-12-15 22:52:44 +08:00
|
|
|
|
<a name="快速上手"></a>
|
2020-12-15 22:46:58 +08:00
|
|
|
|
### 三、快速上手
|
|
|
|
|
|
2020-12-15 23:30:03 +08:00
|
|
|
|
#### 合成单张图
|
2020-12-15 23:35:10 +08:00
|
|
|
|
输入一张风格图和一段文字语料,运行tools/synth_image,合成单张图片,结果图像保存在当前目录下:
|
2020-12-15 15:38:01 +08:00
|
|
|
|
```python
|
2020-12-15 23:12:17 +08:00
|
|
|
|
python3 -m tools.synth_image -c configs/config.yml --style_image examples/style_images/2.jpg --text_corpus PaddleOCR --language en
|
2020-12-15 15:38:01 +08:00
|
|
|
|
```
|
2020-12-15 23:33:09 +08:00
|
|
|
|
* 注意:语言选项和语料相对应,目前该工具只支持英文、简体中文和韩语。
|
2020-12-15 23:38:16 +08:00
|
|
|
|
|
2020-12-15 23:12:17 +08:00
|
|
|
|
例如,输入如下图片和语料"PaddleOCR":
|
2020-12-15 23:35:10 +08:00
|
|
|
|
|
2020-12-15 23:12:17 +08:00
|
|
|
|
<div align="center">
|
2020-12-15 23:30:03 +08:00
|
|
|
|
<img src="examples/style_images/2.jpg" width="300">
|
2020-12-15 23:12:17 +08:00
|
|
|
|
</div>
|
2020-12-15 23:35:10 +08:00
|
|
|
|
|
2020-12-15 23:37:39 +08:00
|
|
|
|
生成合成数据`fake_fusion.jpg`:
|
2020-12-15 20:21:04 +08:00
|
|
|
|
<div align="center">
|
2020-12-15 21:53:06 +08:00
|
|
|
|
<img src="doc/images/4.jpg" width="300">
|
2020-12-15 20:21:04 +08:00
|
|
|
|
</div>
|
2020-12-15 23:35:10 +08:00
|
|
|
|
|
2020-12-15 23:37:39 +08:00
|
|
|
|
除此之外,程序还会生成并保存中间结果`fake_bg.jpg`:为风格参考图去掉文字后的背景;
|
2020-12-15 23:35:10 +08:00
|
|
|
|
|
2020-12-15 23:30:03 +08:00
|
|
|
|
<div align="center">
|
|
|
|
|
<img src="doc/images/7.jpg" width="300">
|
|
|
|
|
</div>
|
2020-12-15 23:35:10 +08:00
|
|
|
|
|
2020-12-15 23:36:13 +08:00
|
|
|
|
`fake_text.jpg`:是用提供的字符串,仿照风格参考图中文字的风格,生成在灰色背景上的文字图片。
|
2020-12-15 23:35:10 +08:00
|
|
|
|
|
2020-12-15 23:30:03 +08:00
|
|
|
|
<div align="center">
|
|
|
|
|
<img src="doc/images/8.jpg" width="300">
|
|
|
|
|
</div>
|
2020-12-15 21:14:48 +08:00
|
|
|
|
|
2020-12-15 23:30:03 +08:00
|
|
|
|
#### 批量合成
|
2020-12-15 23:20:35 +08:00
|
|
|
|
在实际应用场景中,经常需要批量合成图片,补充到训练集中。StyleText可以使用一批风格图片和语料,批量合成数据。合成过程如下:
|
2020-12-15 15:38:01 +08:00
|
|
|
|
|
2020-12-15 23:49:07 +08:00
|
|
|
|
1. 在`configs/dataset_config.yml`中配置目标场景风格图像和语料的路径,具体如下:
|
2020-12-15 23:46:59 +08:00
|
|
|
|
|
2020-12-15 23:57:56 +08:00
|
|
|
|
* `Global`:
|
|
|
|
|
* `output_dir:`:保存合成数据的目录。
|
2020-12-15 21:17:03 +08:00
|
|
|
|
* `StyleSampler`:
|
2020-12-15 15:38:01 +08:00
|
|
|
|
* `image_home`:风格图片目录;
|
|
|
|
|
* `label_file`:风格图片路径列表文件,如果所用数据集有label,则label_file为label文件路径;
|
|
|
|
|
* `with_label`:标志`label_file`是否为label文件。
|
|
|
|
|
* `CorpusGenerator`:
|
|
|
|
|
* `method`:语料生成方法,目前有`FileCorpus`和`EnNumCorpus`可选。如果使用`EnNumCorpus`,则不需要填写其他配置,否则需要修改`corpus_file`和`language`;
|
|
|
|
|
* `language`:语料的语种;
|
|
|
|
|
* `corpus_file`: 语料文件路径。
|
2020-12-15 22:02:22 +08:00
|
|
|
|
|
2020-12-15 23:46:59 +08:00
|
|
|
|
StyleText也提供了一批中英韩5万张通用场景数据用作文本风格图像,便于合成场景丰富的文本图像,下图给出了一些示例。
|
|
|
|
|
|
2020-12-15 23:49:07 +08:00
|
|
|
|
中英韩5万张通用场景数据: [下载地址](https://paddleocr.bj.bcebos.com/dygraph_v2.0/style_text/chkoen_5w.tar)
|
2020-12-15 23:46:59 +08:00
|
|
|
|
|
2020-12-15 22:02:22 +08:00
|
|
|
|
<div align="center">
|
|
|
|
|
<img src="doc/images/5.png" width="800">
|
|
|
|
|
</div>
|
2020-12-15 23:46:59 +08:00
|
|
|
|
|
2020-12-15 15:38:01 +08:00
|
|
|
|
2. 运行`tools/synth_dataset`合成数据:
|
|
|
|
|
|
|
|
|
|
``` bash
|
|
|
|
|
python -m tools.synth_dataset -c configs/dataset_config.yml
|
|
|
|
|
```
|
|
|
|
|
|
2020-12-15 23:02:41 +08:00
|
|
|
|
<a name="应用案例"></a>
|
|
|
|
|
### 四、应用案例
|
|
|
|
|
下面以金属表面英文数字识别和通用韩语识别两个场景为例,说明使用StyleText合成数据,来提升文本识别效果的实际案例。下图给出了一些真实场景图像和合成图像的示例:
|
2020-12-15 20:21:04 +08:00
|
|
|
|
|
2020-12-15 22:02:22 +08:00
|
|
|
|
<div align="center">
|
|
|
|
|
<img src="doc/images/6.png" width="800">
|
|
|
|
|
</div>
|
|
|
|
|
|
2020-12-15 23:02:41 +08:00
|
|
|
|
在添加上述合成数据进行训练后,识别模型的效果提升,如下表所示:
|
2020-12-15 21:46:56 +08:00
|
|
|
|
|
2020-12-15 22:57:50 +08:00
|
|
|
|
| 场景 | 字符 | 原始数据 | 测试数据 | 只使用原始数据</br>识别准确率 | 新增合成数据 | 同时使用合成数据</br>识别准确率 | 指标提升 |
|
2020-12-15 22:02:22 +08:00
|
|
|
|
| -------- | ---------- | -------- | -------- | -------------------------- | ------------ | ---------------------- | -------- |
|
|
|
|
|
| 金属表面 | 英文和数字 | 2203 | 650 | 0.5938 | 20000 | 0.7546 | 16% |
|
|
|
|
|
| 随机背景 | 韩语 | 5631 | 1230 | 0.3012 | 100000 | 0.5057 | 20% |
|
2020-12-15 20:21:04 +08:00
|
|
|
|
|
2020-12-15 23:02:41 +08:00
|
|
|
|
|
2020-12-15 23:30:03 +08:00
|
|
|
|
<a name="代码结构"></a>
|
|
|
|
|
### 五、代码结构
|
2020-12-15 21:14:48 +08:00
|
|
|
|
```
|
|
|
|
|
style_text_rec
|
2020-12-15 20:21:04 +08:00
|
|
|
|
|-- 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
|
2020-12-15 21:14:48 +08:00
|
|
|
|
`-- sys_funcs.py
|
2020-12-15 22:06:38 +08:00
|
|
|
|
```
|