TextRecognitionDataGenerator

GitHub
3.7k 1k 非常简单 1 次阅读 今天MIT音频视频开发框架图像语言模型数据工具
AI 解读 由 AI 自动生成,仅供参考

TextRecognitionDataGenerator 是一款专为光学字符识别(OCR)打造的合成数据生成工具。在训练高精度 OCR 模型时,往往面临真实标注数据稀缺或采集成本高昂的难题,而它能通过算法自动生成海量带有精确标签的文本图像,有效解决这一数据瓶颈。

该工具非常适合 AI 开发者、计算机视觉研究人员以及需要构建自定义识别模型的技术团队使用。其核心工作原理是从特定语言的词典中随机选取词汇,结合多样的字体、背景纹理,并施加模糊、倾斜、噪点等自然失真效果,模拟真实场景中的复杂情况。

TextRecognitionDataGenerator 的技术亮点在于其强大的灵活性与广泛的兼容性。它不仅支持包括简体中文、繁体中文在内的非拉丁语系,还允许用户通过命令行或 Python 模块两种方式调用,轻松集成到自动化训练流水线中。用户可以精细控制字符间距、笔画粗细、文字颜色范围甚至输出像素级掩码,从而生成高度定制化的数据集。无论是从零开始训练模型,还是针对特定场景进行微调,它都能以极低的成本提供高质量的“燃料”,助力提升识别算法的鲁棒性。

使用场景

某物流科技公司正在开发一款能自动识别快递单上手写地址的 OCR 系统,但面临训练数据严重匮乏的难题。

没有 TextRecognitionDataGenerator 时

  • 数据采集成本极高:团队需雇佣大量人员实地拍摄或手动标注数万张真实快递单图片,耗时数月且预算超支。
  • 样本多样性不足:收集到的真实图片背景单一、字体固定,导致模型遇到稍微倾斜、模糊或非标准字体的单据时识别率骤降。
  • 隐私合规风险大:直接使用包含真实姓名和电话的快递单图片进行训练,存在严重的用户隐私泄露隐患,难以通过安全审计。
  • 长尾场景覆盖难:对于生僻字、特殊符号或极端光照条件下的样本,几乎无法通过自然采集获得足够的训练量。

使用 TextRecognitionDataGenerator 后

  • 秒级生成海量数据:利用其命令行或 Python 模块,几分钟内即可生成数十万张带有随机文本、不同字体及背景的合成图像,零成本解决数据荒。
  • 模拟真实复杂环境:通过调整模糊度、倾斜角、字符间距及添加噪点参数,精准模拟快递单在运输中产生的磨损、褶皱和拍摄角度偏差,大幅提升模型鲁棒性。
  • 彻底规避隐私问题:所有生成文本均为随机组合或来自公开词典,完全不涉及任何真实用户信息,从源头杜绝合规风险。
  • 灵活定制特殊样本:针对生僻地名或特定格式需求,可通过自定义字典和字体目录功能,定向生成稀缺样本,填补训练盲区。

TextRecognitionDataGenerator 将原本需要数月的人工数据筹备工作压缩至小时级,以低成本、高多样性的合成数据成功构建了高精度的物流 OCR 模型。

运行环境要求

操作系统
  • Linux
  • macOS
  • Windows
GPU
  • 不需要 GPU
  • 仅在使用手写文本生成功能(-hw)时需要 TensorFlow,但未明确指定必须使用 GPU 加速,CPU 亦可运行
内存

未说明

依赖
notes该工具主要用于生成 OCR 训练数据。默认安装无需 TensorFlow;仅在启用手写文本生成功能时才需要安装 TensorFlow。支持通过 Docker 直接运行以避免环境配置问题。生成速度取决于 CPU 核心数,多核处理器可显著提升性能。
python未说明 (通过 pip 安装,通常支持 Python 3.x)
Pillow
requests
tqdm
tensorflow (可选,仅用于手写文本生成)
TextRecognitionDataGenerator hero image

快速开始

文本识别数据生成器 CircleCI PyPI版本 codecov 文档状态

用于文本识别的合成数据生成工具

它用来做什么?

生成用于训练 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 模块的使用方式与命令行类似,但如果您希望将其直接集成到训练流程中,这种方式更加灵活,且占用的空间和内存更少。共有四种生成器可供使用。

from trdg.generators import (
    GeneratorFromDict,
    GeneratorFromRandom,
    GeneratorFromStrings,
    GeneratorFromWikipedia,
)

# 生成器使用的参数与命令行相同,只是以参数形式传入
generator = GeneratorFromStrings(
    ['Test1', 'Test2', 'Test3'],
    blur=2,
    random_blur=True
)

for img, lbl in generator:
    # 在这里对 Pillow 图像进行处理。

完整的类定义如下:

基本用法(命令行)

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 张/秒
    • -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 张/秒

贡献说明

  1. 创建一个议题,描述你将要实现的功能。
  2. 实现该功能。
  3. 提交拉取请求。

功能请求与问题

如果发现有任何缺失、不明确或无法正常工作的情况,请在仓库中提交一个议题。

尚待完成的工作?

  • 改进背景生成
  • 改进手写文本生成
  • 增加更多自定义参数(主要针对背景)

版本历史

v1.6.02020/05/09
v1.4.02020/03/17
v1.3.22019/12/05
v1.3.12019/11/25
v1.2.02019/09/03
v1.1.12019/08/30
v1.0.12019/06/14
v1.0.02019/05/15

常见问题

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|2周前
Agent开发框架图像

n8n

n8n 是一款面向技术团队的公平代码(fair-code)工作流自动化平台,旨在让用户在享受低代码快速构建便利的同时,保留编写自定义代码的灵活性。它主要解决了传统自动化工具要么过于封闭难以扩展、要么完全依赖手写代码效率低下的痛点,帮助用户轻松连接 400 多种应用与服务,实现复杂业务流程的自动化。 n8n 特别适合开发者、工程师以及具备一定技术背景的业务人员使用。其核心亮点在于“按需编码”:既可以通过直观的可视化界面拖拽节点搭建流程,也能随时插入 JavaScript 或 Python 代码、调用 npm 包来处理复杂逻辑。此外,n8n 原生集成了基于 LangChain 的 AI 能力,支持用户利用自有数据和模型构建智能体工作流。在部署方面,n8n 提供极高的自由度,支持完全自托管以保障数据隐私和控制权,也提供云端服务选项。凭借活跃的社区生态和数百个现成模板,n8n 让构建强大且可控的自动化系统变得简单高效。

184.7k|★★☆☆☆|今天
数据工具开发框架Agent

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|2周前
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

161.1k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

109.2k|★★☆☆☆|昨天
开发框架图像Agent

gemini-cli

gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。

100.8k|★★☆☆☆|1周前
插件Agent图像