全页文本识别数据集创建咨询:OCR数据集生成工具指引
构建类似Maurdoor的行级OCR标注数据集实操指引
我完全懂你现在的困扰——这类针对行起始点、行高定制化标注的数据集,不像通用OCR数据集有现成工具一键生成,得靠「现有资源改造+轻量工具定制」来实现,下面给你拆解具体步骤:
1. 从现有公开数据集快速转换标注(最省时间的方案)
你提到的用文本行边界框的左下角点当起始点、框高当行高,这个思路非常高效,不用重新标注。
- 先找带行级边界框的全页文本数据集,比如ICDAR系列全页数据集、PubLayNet这类,它们的标注一般是XML或JSON格式,包含每个文本行的左上角/右下角坐标。
- 写个简单的Python脚本就能批量转换:读取标注文件里的行框坐标,计算出
左下角点(x_min, y_max)和行高(y_max - y_min),再把对应行的文本转录一起导出成你需要的格式(比如JSON或CSV)。举个伪代码片段:import json with open("original_annotations.json", "r") as f: data = json.load(f) new_annotations = [] for img in data: for line in img["lines"]: x_min, y_min, x_max, y_max = line["bbox"] new_annotations.append({ "image_path": img["image_path"], "start_point": [x_min, y_max], "line_height": y_max - y_min, "transcription": line["text"] }) with open("converted_annotations.json", "w") as f: json.dump(new_annotations, f, indent=2)
2. 用开源标注工具定制标注流程(全新数据集标注)
如果现有数据集不满足需求,需要自己标注新图像,不用从零开发工具,基于开源工具改就行:
- LabelStudio:支持自定义标注模板,你可以配置一个标注任务,让标注员完成三个操作:点击文本行的起始点、系统自动计算行高(或手动输入)、录入文本转录。它能直接导出结构化的标注文件,后续直接给模型用。
- VGG Image Annotator (VIA):轻量无服务器,适合小数据集。你可以给每个标注对象添加自定义属性:
start_x、start_y、line_height、transcription,标注完成后导出JSON,再用脚本整理成模型需要的格式。
3. 合成数据集补充生成(解决数据量不足问题)
要是需要大量训练数据,还可以用合成工具生成带精准标注的样本:
- 用TextRecognitionDataGenerator (TRDG),它本来是生成文本行图像的工具,你可以修改它的源码,在渲染每个文本行的时候,记录下该行的左下角坐标和高度,然后把这些信息和文本转录一起写入真值文件(比如XML或JSON)。这样生成的合成数据完全符合你的标注要求,还能自定义字体、背景、噪声等。
4. 标注验证与格式统一
最后一步很重要,要确保标注的准确性:
- 写个验证脚本,把标注的起始点和行高画在图像上(比如用OpenCV的
circle和rectangle函数),直观检查标注是否正确。 - 统一标注格式,比如用JSON每行存储一个样本,方便后续模型读取和处理。
内容的提问来源于stack exchange,提问作者Kelley Brady




