Label Studio OCR 发票预标注模板实战教程:从 OCR 框到 BIO NER 训练数据只需 3 步
2026/9/13 2:26:55 网站建设 项目流程

Label Studio OCR 发票预标注模板实战教程:从 OCR 框到 BIO NER 训练数据只需 3 步

【免费下载链接】label-studioLabel Studio is a multi-type data labeling and annotation tool with standardized output format项目地址: https://gitcode.com/GitHub_Trending/la/label-studio

手头有一批发票图片,OCR 模型已经能跑出文本框和识别文字,但识别结果有错、框选不够准,没法直接当 NER 训练数据用。Label Studio 的 OCR Invoices Pre-NER BIO Format 模板正好补上这段:把发票上每个 OCR 框变成图片里的矩形,人工逐个校对框内文字,导出后即得到带「坐标 + 文本 + 类别」的 token 序列,可直接进入 BIO 实体标注。照下面的步骤走,半小时能搭起一条「发票图片 → 预标注语料」的完整管线。

先建立心智模型:这条流水线分几步

  1. OCR 出草稿:OCR 模型对发票图片做文本检测,输出一组带坐标的 text token——发票号、金额、日期各是一个 token。
  2. 人工校对(本模板干的事):每个 token 在界面里呈现为一个矩形,标注者核对框选区域、修正框内 OCR 转写的文字,同时所有 token 先统一归到O类。BIO 约定里 O 代表 Outside(实体外),含义是"这个 token 暂时不属于任何实体"。
  3. 实体标注:把校对后的 token 序列按阅读顺序排好,在其上按 BIO 约定(B-前缀标实体开头、I-标实体内部、O标实体外)打标签,产出发票字段抽取模型的训练数据。

"Pre-NER" 这个名字说的就是第 2 步的定位:它不直接产出 B-xxx / I-xxx 实体标签,只负责把 token 边界和文字收拾干净。全部 token 从O起步,意味着下一轮 NER 标注面对的是干净起点。仓库里还有一个后接模板 ner-tagging-invoices-bio-format,专门负责在文字序列上打 BIO 标签,两者前后衔接。

最小可用配置:贴进去就能跑

<View> <!-- 待标注的发票图片,取任务数据 $image 字段,可缩放 --> <Image name="image" value="$image" zoomControl="true"/> <!-- 矩形框选:初期只定义 O(实体外)一个类别,后续可随意扩充 --> <RectangleLabels name="label" toName="image" choice="single"> <Label value="O" background="#FFA500"/> </RectangleLabels> <!-- 逐区域转写框:perRegion 让每个矩形各绑定一个输入框 --> <TextArea name="transcription" toName="image" perRegion="true" editable="true" rows="1" required="true" placeholder="Type or correct OCR text…"/> </View>

新项目在 Labeling Setup 里选 Custom template,把这段粘进去保存,就可以导数据开工了。思路是先跑通、再扩展。带示例数据注释的完整可运行配置在仓库 config.yml,想核对细节可去比对。

三个控件,各管一件事

按标注者的真实操作顺序讲:先看图片 → 再画框 → 最后改字。

1️⃣ Image:看图

  • 它做什么:展示待标注发票,value="$image"从任务dataimage字段取图,支持 HTTP(S) 链接、本地路径、base64。
  • 关键参数zoomControl="true"打开缩放,发票号、金额这类小字号看得清。
  • 为什么这样设:导出时矩形坐标存的是相对原图尺寸的百分比(0–100),不是像素值。不同分辨率的发票混在一起不会出现坐标系混乱;原图像素尺寸由结果里的original_width/original_height单独记录,需要时随时换算回像素。

2️⃣ RectangleLabels:画框

参数默认值本配置取值说明
namelabel控件名,对应结果的from_name
toNameimage绑定的图片控件
choicesinglesingle一个矩形只允许选一个类别
opacity0.6未设置矩形填充透明度
strokeWidth1未设置边框粗细
canRotatetrue未设置是否显示旋转控制

为什么只有一个O:Pre-NER 阶段只关心"每个框里到底是什么字",实体归类留给下一步。O(橙色 #FFA500 背景)就是 BIO 里的 Outside 标记。想提前归类也不用动结构,直接往<RectangleLabels>里加<Label>即可,见文末改法。

3️⃣ TextArea:改字

参数默认值本配置取值说明
nametranscription控件名,对应结果的from_name
toNameimage绑定的图片控件
perRegiontrue核心参数:每个矩形各生成一个输入框,一一对应
editablefalsetrue已提交的文字还能再编辑
rows11单行输入
requiredfalsetrue每个框的转写内容必填
placeholderType or correct OCR text…输入提示文案

perRegion="true"是这套组合的精髓:标注者点选某个矩形,输入框就自动对应这个区域,切换选中框时内容跟着切换,天然实现"一个框一段文字"。rows="1"还有个提速效果——单行输入框直接按 Enter 就能提交,省掉点 Add(rows 大于 1 时必须点 Add 或按 Shift+Enter)。官方 textarea 文档里还展示了displayMode="region-list"变体:所有输入框集中显示在 Regions 面板里,适合整图批量回看。

从建项目到导出:完整走一遍

  1. 建项目、贴配置:新建项目,Labeling Setup 选 Custom template,粘贴上面的配置。
  2. 导入任务数据:每个任务的data只需要一个键image,值是图片 URL 或 base64。支持 JSON/CSV 上传、API 上传,以及 S3/GCS/Azure Blob/本地目录等存储后端;若你已有 OCR 草稿结果,可以作为预检测结果预填进任务,标注者只需校对。
  3. 标注操作序列
    • 在发票字段上拖出一个矩形(比如发票号),框自动带上O标记;
    • 在自动关联的输入框里核对、修正该 token 的 OCR 转写;
    • 按 Enter 提交,移向下一个框;required="true"保证漏填时提交会被拦住;
    • 重复以上动作直到整张发票的 token 全部框完校对完。
  4. 导出:项目页用 Export 功能导出标注结果,格式见下一节。

导出的 JSON 怎么读

每个矩形区域对应两条成对出现的记录,靠同一个区域 id 关联:

{ "id": "annotation-id", "result": [ { "id": "region-1", "type": "rectanglelabels", "from_name": "label", "to_name": "image", "original_width": 1920, "original_height": 1280, "image_rotation": 0, "value": { "x": 3.1, "y": 8.2, "width": 20, "height": 16, "rectanglelabels": ["O"], "rotation": 0 } }, { "id": "region-1", "type": "textarea", "from_name": "transcription", "to_name": "image", "value": { "text": ["Invoice No. 1024"] } } ] }

rectanglelabels 那条给坐标(xy是旋转前左上角、widthheight均为 0–100 百分比)和类别;textarea 那条给转写文本。处理逻辑很简单:按区域 id 分组聚合,再按阅读顺序排序,就得到「坐标 + 文本 + 标签(O)」的 token 列表——这正是 BIO 序列标注要的输入形态,可以直接接进下一阶段的 NER 模板。

想更进一步:常见改法

  • 预标注阶段直接归类:在<RectangleLabels>里追加实体类别,如<Label value="B-Vendor" background="#4CAF50"/><Label value="B-Amount" background="#F44336"/>,导出时部分 token 直接带上实体类型,省掉中间转换。
  • 一个框允许多类别:把choice改成multiple,适合"字段类型 + 是否实体"需要同时标记的场景。
  • Regions 面板批量校对:给 TextArea 加displayMode="region-list",所有区域输入框集中进 Regions 面板,收尾时整图过一遍更方便。
  • 防止重复录入:TextArea 加skipDuplicates="true",重复提交相同文本会弹窗拦截。
  • 喂给多模态模型:导出结果带百分比坐标和原图尺寸,可还原出像素位置,配合转写文本训练「文字 + 版面」的文档抽取模型。

这套配置的价值,在于把最费人力的"OCR 结果校对"固化成标准化流水线,且输出天然对齐 BIO 约定,不需要额外的格式转换。下一步可以挑几张发票跑通完整标注,然后把导出的 token 序列直接接进 ner-tagging-invoices-bio-format 模板,体验一遍 Pre-NER → NER 的完整闭环。

【免费下载链接】label-studioLabel Studio is a multi-type data labeling and annotation tool with standardized output format项目地址: https://gitcode.com/GitHub_Trending/la/label-studio

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询