OCR文本图像合成工具
问题
在进行文字识别时候,需要使用的数据集样式为一张含有文本的图片以及对应文本内容的标签。但是一般而言,实际情况是构建的文本字典中,每个字至少要出现200次才能有好的识别效果,因此,先对所有的label进行单字统计,看每个字出现的个数是否超过200次,如果不满足,则需要进一步收集数据。
数据来源有两种:
- 真实数据:通过真实数据去截取图片或者人工标注
- 生成数据:通过文本去生成对应的文本图片
真实数据的收集是比较费事费力的,因此可以使用一些生成数据的工具来无限量的生成想要的数据。
主要工具有:
Text Recognition Data Generator
: https://github.com/Belval/TextRecognitionDataGeneratorText Render
: https://github.com/oh-my-ocr/text_rendererSynthText
: https://github.com/ankush-me/SynthTextSynthText_Chinese_version
: https://github.com/JarveeLee/SynthText_Chinese_version
这里详细介绍Text Recognition Data Generator
工具的使用
Text Recognition Data Generator
-
Github地址: https://github.com/Belval/TextRecognitionDataGenerator
-
官方文档:https://textrecognitiondatagenerator.readthedocs.io/en/latest/index.html
安装:
有两种安装方式,一种是通过pip安装,另外一种是通过源码安装,建议使用源码安装:
- pip 安装
pip install trdg
- 项目源码安装
git clone https://github.com/Belval/TextRecognitionDataGenerator
pip3 install -r requirements.txt
# 如果想使用手写体
pip3 install -r requirements-hw.txt
文件目录
- images/ 文件夹内存放背景图,可以多添加一些图片用于丰富生成的合成图片,在使用是随机从中选择背景图区域作为背景;
- fonts/ 文件夹内 cn/ en/分别存放中、英文字体文件(.ttf格式),可以自己在网上下载不同ttf文件放入文件夹内;
- string_generator.py 定义了图片上的文本如何选取,可以自行定义
- data_generator.py 是按照给定参数生成图片,最好在里面加上 try / except,大规模合成数据万一有一个case报错就要重新生成,很麻烦
重要参数
-i
, --input_file: 具体的文本内容文件,文件中是一行行的文本,可以指定生成的图片内容;-c
, --count:设置 生成的图片数量-l
, --language: 设定生成的文本语言-t
, --thread_count: 设定线程个数,加快生成速度-f
, --format: 设定图片高度像素值,默认是32-b
, --background: 设定图片的背景样式-W
, --length:设定生成图片中文本的长度
具体可以使用
-h
, --help 去查看每个参数的意义
生成命令:
样例:
$ python run.py -l cn -c 10000 -b 3 -w 20 -f 64 -t 32
生成10000张图片,生成语言是使用中文,背景图样式是3,每个生成文本长度为20, 图片像素值高度为64,使用32线程去生成