PaddleOCR数据合成:3步做出训练数据
【免费下载链接】PaddleOCRTurn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between images/PDFs and LLMs. Supports 100+ languages.项目地址: https://gitcode.com/GitHub_Trending/pa/PaddleOCR
微调一个门店招牌识别模型,真实数据只有几千张,字体、光照都覆盖不了你自己的行业。PaddleOCR数据合成就是干这个的:用程序直接生成"图片+标签"的文本训练样本,省去人工标注环节。读完你能直接跑通最小流程,产出一批可进训练的带标注样本。
一句话说清PaddleOCR数据合成是什么
PaddleOCR的数据合成不是某一个工具,而是官方整理好的一整套"用程序生成文本图像并自动产出标注"的工具链,解决的核心问题只有一个:训练数据不够、人工标注太贵。
- 标注自动产出:文本内容由你给定,坐标标签同步写出,不需要人工逐张框选
- 规模成熟:PP-OCR 系列模型的英文训练就依赖 MJSynth、SynthText 这类合成数据,量级达千万张,方案经过大规模验证
- 多语言字体:项目支持 100+ 语言模型,
doc/fonts/目录内置了中文、日文、韩文、拉丁、阿拉伯等 19 种字体文件,开箱即用
核心能力全景
官方文档共整理了 9 个合成工具,按"从零渲染"到"场景融合"覆盖不同需求,最常用的几个如下:
| 能力名称 | 一句话功能 | 适用场景 |
|---|---|---|
| Style-Text | 按目标场景风格批量合成文本图像 | 垂直领域(单据、票据、招牌)微调 |
| text_renderer | 多字体、多样式文本行渲染 | 大批量文本行图像生成 |
| SynthText(含中文版) | 把文字叠印到真实场景照片上 | 复杂自然场景背景训练 |
| TextRecognitionDataGenerator | 配置文件驱动渲染与噪声 | 快速上手、调参实验 |
| SynthTIGER | 多语言、复杂版面布局合成 | 多语言混合、密集排版 |
更多细节参考 官方文档。
三步跑通最小可用流程
- 环境准备:克隆仓库并安装依赖,合成脚本只用到其中的字体和依赖环境。
git clone https://gitcode.com/GitHub_Trending/pa/PaddleOCR cd PaddleOCR pip install -r requirements.txt- 最小示例:用仓库里的字体渲染一行文字、叠加随机噪声,保存成图,这就是合成数据的"图+标签"最小单元。
from PIL import Image, ImageDraw, ImageFont import numpy as np img = Image.new("RGB", (640, 128), color=(235, 235, 235)) draw = ImageDraw.Draw(img) font = ImageFont.truetype("doc/fonts/chinese_cht.ttf", 48) draw.text((24, 32), "PaddleOCR数据合成", font=font, fill=(30, 30, 30)) arr = np.clip(np.array(img).astype("int16") + np.random.randint(-25, 25, img.size[::-1]), 0, 255) Image.fromarray(arr.astype("uint8")).save("sample_0.png") print("PaddleOCR数据合成") # rec标签格式:一行文本- 验证产出:确认图片生成成功,并把标签写成训练可用的 txt 格式(识别任务一行文本;检测任务为四点坐标+文本)。
file sample_0.png echo "PaddleOCR数据合成" > sample_0.txt cat sample_0.txt进阶玩法与参数调优
模拟真实场景的拍摄畸变
真实拍摄有倾斜和旋转,纯平面渲染的样本分布偏"干净"。原理很简单:对渲染结果做一次透视变换,四点坐标同步记录即可。
import cv2 H, W = 128, 640 src = np.float32([[0, 0], [W, 0], [W, H], [0, H]]) dst = np.float32([[12, 10], [W-12, 0], [W-26, H-8], [0, H]]) out = cv2.warpPerspective(img, cv2.getPerspectiveTransform(src, dst), (W, H)) cv2.imwrite("sample_1.png", out)效果上,样本从"标准印刷体"变成"斜拍文字",与手机实拍分布更接近。
批量生成时参数随机化
单一样本够用,批量生成时要把参数做成随机池,循环采样出多样性,建议起步范围:
- 字体池:3~5 种(可从
doc/fonts/里挑) - 字号:36~64 px 随机
- 文本长度:4~16 个字符
- 背景:纯色与实拍背景至少各占一半
按场景选工具
💡 风格迁移选 Style-Text,快速实验选 TextRecognitionDataGenerator,要真实照片背景选 SynthText,多语言密集版面选 SynthTIGER。
效果怎么评估、怎么调
评估维度
- 覆盖度:字体、背景、文本长度是否覆盖你的目标场景,而不是只看"像不像"
- 真实感:随机抽 100 张混入真实数据,人工能不能一眼挑出合成的
- 标签一致性:抽样核对标签坐标是否真的框住文字,错位的样本比没有样本更有害
调优建议
- 合成与真实数据混用比纯合成更稳,可从 1:2(真实:合成)起步,观察验证集准确率再调整
- 增量生成:先做 5000~10000 张跑一轮训练评测,确认有效再放大到十万级
- 参数范围向推理端对齐:训练用的字号、背景分布要和你线上输入的实际分布保持一致,避免训推两张皮
延伸:与标注工具组合使用
合成数据抽检、真实数据补标,官方文档 数据标注工具 里整理了配套工具:
| 工具 | 定位 | 组合方式 |
|---|---|---|
| PPOCRLabel | PaddleOCR 团队半自动标注工具 | 模型先预标,人工只校对,效率最高 |
| roLabelImg | 支持旋转矩形标注 | 校对带倾斜的合成文本 |
| VoTT | 矩形/多边形、多格式导出 | 批量质检合成数据集 |
总结
如果业务场景垂直(单据、票据、招牌)且真实数据难以积累,PaddleOCR数据合成是目前性价比最高的数据补强路径,官方文档收录了 9 个工具并持续更新;如果真实数据量已经足够,直接微调即可,合成不是必选项。建议先用三步流程跑通最小样本,再按验证集表现决定放大规模。后续随着扩散模型等生成式技术介入,合成数据与实拍照片的差距还会继续缩小。
觉得有用,欢迎点赞收藏。
【免费下载链接】PaddleOCRTurn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between images/PDFs and LLMs. Supports 100+ languages.项目地址: https://gitcode.com/GitHub_Trending/pa/PaddleOCR
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考