跳转到主要内容

TextRecognitionDataGenerator:文本识别的合成数据生成器

项目描述

TextRecognitionDataGenerator CircleCI PyPI version codecov Documentation Status

文本识别的合成数据生成器

这是用来做什么的?

生成文本图像样本以训练OCR软件。现在支持非拉丁文本!欲了解更多教程,请参阅官方文档

我需要什么才能使其工作?

安装pypi包

pip install trdg

之后,您可以从命令行使用 trdg。我建议使用 virtualenv 而不是用 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,
)

# The generators use the same arguments as the CLI, only as parameters
generator = GeneratorFromStrings(
    ['Test1', 'Test2', 'Test3'],
    blur=2,
    random_blur=True
)

for img, lbl in generator:
    # Do something with the pillow images here.

您可以在这里查看完整的类定义

基本(CLI)

trdg -c 1000 -w 5 -f 64

您将获得 1,000 个随机生成的图像,每个图像上都有随机文本,如下所示

1 2 3 4 5

默认情况下,它们将生成到当前工作目录中的 out/

文本倾斜

如果您想要随机倾斜,请添加 -k-rk(《trdg -c 1000 -w 5 -f 64 -k 5 -rk》)

6 7 8 9 10

文本扭曲

您也可以使用 -d-do 添加扭曲到生成的文本

23 24 25

文本模糊

但是扫描的文档通常并不那么清晰,对吧?添加 -bl-rbl 以获得用户定义半径(此处为 0、1、2、4)的高斯模糊的生成的图像

11 12 13 14

背景

也许您想使用另一种背景?添加 -b 以定义三种可用的背景之一:高斯噪声(0)、纯白色(1)、准晶体(2)或图像(3)。

15 16 17 23

当使用图像背景(3)时,将从 images/ 文件夹中随机选择一个图像,并在其上写入文本。

手写

或者,您可能正在为手写文本进行 OCR 工作?添加 -hw!(实验性)

18 19 20 21 22

它使用 Grzego 使用 这个出色的项目 训练的 Tensorflow 模型。

如果不需要此功能,则项目不需要 TensorFlow 来运行

字典

文本在字典文件中随机选择(该文件可从 dicts 文件夹中找到)并绘制在由高斯噪声制成的白色背景上。生成的图像将保存为 [text]_[index].jpg

有很多参数可以调整以获得您想要的结果,因此我建议查看 trdg -h 以获取更多信息。

创建带有中文文本的图片

很简单!只需执行 trdg -l cn -c 1000 -w 5 即可!

生成的文本包含简体和繁体中文。

繁体

27

简体

28

创建带有日文文本的图片

很简单!只需执行 trdg -l ja -c 1000 -w 5 即可!

输出

29

添加新字体

脚本会从 fonts 目录中随机选择一个字体。

目录 语言
fonts/latin 英语、法语、西班牙语、德语
fonts/cn 中文
fonts/ko 韩语
fonts/ja 日语
fonts/th 泰语

只需添加/移除字体,直到得到所需输出。

如果您想添加新的非拉丁语,所需的工作量很小。

  1. 创建一个包含您语言 两位字母代码 的新文件夹
  2. 在里面添加一个 .ttf 字体文件
  3. 编辑 run.py 以在 load_fonts() 中添加一个 if 语句
  4. dicts 中添加一个与相同两位字母代码相同的文本文件
  5. 像平时一样运行工具,但添加 -l 与您的两位字母代码

目前只支持 .ttf 格式。

基准测试

每秒生成的图片数量。

  • Intel Core i7-4710HQ @ 2.50Ghz + SSD (-c 1000 -w 1)
    • -t 1 : 363 img/s
    • -t 2 : 694 img/s
    • -t 4 : 1300 img/s
    • -t 8 : 1500 img/s
  • AMD Ryzen 7 1700 @ 4.0Ghz + SSD (-c 1000 -w 1)
    • -t 1 : 558 img/s
    • -t 2 : 1045 img/s
    • -t 4 : 2107 img/s
    • -t 8 : 3297 img/s

贡献

  1. 创建一个描述您将要工作的功能的 issue
  2. 实现该功能
  3. 创建一个 pull request

功能请求 & issues

如果缺少任何内容、不清楚或根本不起作用,请在仓库中打开一个 issue。

还有什么要做?

  • 更好的背景生成
  • 更好的手写文本生成
  • 更多自定义参数(主要关于背景)

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分发

此版本没有可用的源分发文件。请参阅有关 生成分发存档 的教程。

构建分发

trdg-1.8.0-py3-none-any.whl (98.6 MB 查看哈希值)

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面