TextRecognitionDataGenerator
一个用于文本识别的合成数据生成器
它的用途是什么?
生成文本图像样本以训练OCR软件。现在支持非拉丁文本!有关更详细的教程,请参阅官方文档。
我需要做什么才能使它工作?
安装pypi包
pip install trdg
之后,您可以从命令行使用trdg
。我建议使用虚拟环境而不是使用sudo
安装。
如果您想添加另一种语言,可以选择克隆存储库。只需运行pip install -r requirements.txt
Docker镜像
如果您不想安装任何东西就使用TextRecognitionDataGenerator,可以拉取docker镜像。
docker pull belval/trdg:latest
docker run -v /output/path/:/app/out/ -t belval/trdg:latest trdg [args]
路径(/output/path/
)必须是绝对路径。
新功能
- 添加
--stroke_width
参数设置文本描边宽度(感谢@SunHaozhe) - 添加
--stroke_fill
参数设置文本轮廓颜色(当描边>0时)(感谢@SunHaozhe) - 添加
--word_split
参数按单词而不是按字符分割。这对基于连字的语言很有用 - 添加
--dict
参数指定自定义词典(感谢@luh0907) - 添加
--font_dir
参数指定要使用的字体 - 添加
--output_mask
为每个图像输出字符级掩码 - 添加
--character_spacing
控制字符之间的间距(以像素为单位) - 添加Python模块
- 添加
--font
为所有生成的图像仅使用一种字体(感谢@JulienCoutault!) - 添加
--fit
和--margins
以实现更精细的布局控制 - 使用
-or
参数更改文本方向 - 使用
-tc '#000000,#FFFFFF'
指定文本颜色范围,请注意引号是必需的 - 添加对简体和繁体中文的支持
它是如何工作的?
将从特定语言的词典中随机选择单词。然后,通过使用指定的字体、背景和修改(倾斜、模糊等)生成这些单词的图像。
基本用法(Python模块)
作为Python模块的用法与CLI非常相似,但如果您想直接将其包含在训练流程中,它更灵活,并且会消耗更少的空间和内存。有4个可以使用的生成器。
from trdg.generators import (
GeneratorFromDict,
GeneratorFromRandom,
GeneratorFromStrings,
GeneratorFromWikipedia,
)
# 生成器使用与CLI相同的参数,只是作为参数传递
generator = GeneratorFromStrings(
['Test1', 'Test2', 'Test3'],
blur=2,
random_blur=True
)
for img, lbl in generator:
# 在这里对Pillow图像进行操作。
您可以在这里查看完整的类定义:
基本用法(CLI)
trdg -c 1000 -w 5 -f 64
您将获得1,000个带有随机文本的随机生成图像,如:
默认情况下,它们将生成在当前工作目录的out/
文件夹中。
文本倾斜
如果您想要随机倾斜怎么办?添加-k
和-rk
(trdg -c 1000 -w 5 -f 64 -k 5 -rk
)
文本扭曲
您还可以使用-d
和-do
为生成的文本添加扭曲
文本模糊
但扫描的文档通常不是那么清晰,对吧?添加-bl
和-rbl
以在生成的图像上应用用户定义半径的高斯模糊(这里是0、1、2、4):
背景
也许您想要另一种背景?添加-b
以定义三种可用背景之一:高斯噪声(0)、纯白(1)、准晶体(2)或图像(3)。
使用图像背景(3)时。将从images/文件夹中随机选择一张图像,并在其上写入文本。
手写
或者也许您正在开发一个手写文本的OCR?添加-hw
!(实验性功能)
它使用了一个由Grzego的这个优秀项目训练的TensorFlow模型。
如果你不使用这个功能,该项目运行时不需要TensorFlow
词典
文本是从字典文件(可在dicts文件夹中找到)中随机选择的,并绘制在由高斯噪声生成的白色背景上。生成的图像保存为[文本]_[索引].jpg
有许多参数可以调整以获得你想要的结果,因此我建议查看trdg -h
以获取更多信息。
创建带有中文文本的图像
很简单!只需执行trdg -l cn -c 1000 -w 5
即可!
生成的文本包括简体和繁体中文。
繁体:
简体:
创建带有日语文本的图像
很简单!只需执行trdg -l ja -c 1000 -w 5
即可!
输出
添加新字体
脚本从fonts目录中随机选择字体。
目录 | 语言 |
---|---|
fonts/latin | 英语、法语、西班牙语、德语 |
fonts/cn | 中文 |
fonts/ko | 韩语 |
fonts/ja | 日语 |
fonts/th | 泰语 |
只需添加/删除字体,直到获得所需的输出。
如果你想添加一种新的非拉丁语言,工作量很小。
- 使用你的语言两个字母的代码创建一个新文件夹
- 在其中添加一个.ttf字体
- 编辑
run.py
,在load_fonts()
中添加一个if语句 - 在
dicts
中添加一个具有相同两个字母代码的文本文件 - 像平常一样运行工具,但添加
-l
和你的两个字母代码
目前只支持.ttf格式。
基准测试
每秒生成的图像数量。
- Intel Core i7-4710HQ @ 2.50Ghz + SSD (-c 1000 -w 1)
-t 1
: 363 图像/秒-t 2
: 694 图像/秒-t 4
: 1300 图像/秒-t 8
: 1500 图像/秒
- AMD Ryzen 7 1700 @ 4.0Ghz + SSD (-c 1000 -w 1)
-t 1
: 558 图像/秒-t 2
: 1045 图像/秒-t 4
: 2107 图像/秒-t 8
: 3297 图像/秒
贡献
- 创建一个描述你将要开发的功能的问题
- 编写该功能的代码
- 创建一个拉取请求
功能请求和问题
如果有任何缺失、不清楚或simply无法工作的地方,请在仓库中提出问题。
还有什么需要做?
- 更好的背景生成
- 更好的手写文本生成
- 更多自定义参数(主要关于背景)