把 PaddleOCR 模型转换成 ONNX,生成模型文件只是第一步。接下来的问题往往更贴近
实际任务:转换后的输入预处理是否一致,输出如何还原成文字与位置,原来能取到的编号、
日期、金额等字段是否还在同一列,异常值能不能回到原图确认。
如果目标是把图片、PDF 或文件夹中的指定信息整理成 Excel,ONNX(开放神经网络交换
格式)部署的验收不该停在“运行时加载成功”。更可靠的验收目标是:同一批材料经过
转换前后两条链路,仍然能得到一张字段规则一致、来源可定位、异常可复核的结果表。
本文不提供与具体版本绑定的转换命令。PaddleOCR、Paddle2ONNX、ONNX Runtime 及其
接口会随版本和环境变化,实际转换应以对应版本官方文档为准。本文聚焦模型转换后
最容易被忽略的部分:怎样验证字段交付没有在中间环节失真。
1. 先明确:转换成功不等于任务验收通过
Paddle2ONNX 的作用是把模型转换为 ONNX 格式,方便接入相应运行环境。但一条完整
OCR 链路并不只有模型文件,还包括输入准备、结果解释、字段取值、Excel 导出和复核。
对于资料整理任务,验收路径应写成:
原始材料 → 预处理 → 模型推理 → 后处理 → 目标字段 → Excel → 原图复核
只检查中间的“模型推理”,容易遗漏两类问题:一是图片缩放、方向或颜色处理改变了
输入;二是输出张量虽然存在,但文字、坐标或置信信息的解释方式没有与原链路保持一致。
最终表现为控制台看着正常,字段表却出现取错列、丢前导零或找不到来源。
先把验收目标写清楚:
| 验收层 | 需要确认的内容 |
|---|---|
| 转换层 | 工具、配置、原始模型与输出模型可追溯 |
| 运行层 | ONNX 运行时可加载模型并处理约定输入 |
| 结果层 | 文字、位置或页面定位可被稳定解释 |
| 字段层 | 目标字段按同一规则落入固定列 |
| 交付层 | Excel 能回到原始文件,异常保留复核状态 |
这张表的意义是把“模型格式变化”与“业务结果可用”分开。前者完成后,后者仍要用实际
材料验证。
2. 转换之前,先固定一条原始基线
没有基线,就无法判断转换后的变化来自哪里。开始前,使用转换前原始链路处理一组固定
样本,并把结果保存下来。样本不必很多,但要覆盖真实任务中的典型和异常情况:清晰页、
模糊页、版式变化页、字段缺失页。
同一批样本需要固定四类信息:
| 内容 | 要记录什么 |
|---|---|
| 环境 | 操作系统、硬件、PaddleOCR 与原始模型版本 |
| 材料 | 文件名、页码、分辨率、版式类型与保管位置 |
| 字段 | 目标列、定位依据、候选值选择与格式规则 |
| 结果 | 识别值、来源定位、复核值、状态与差异说明 |
这一步的重点不是写出一个漂亮的性能数字,而是留下能比较的原始记录。之后转换模型、
更换运行时或调整输入时,才知道某个字段差异是模型、预处理、后处理还是业务规则造成的。
建立基线的第一步,是固定材料来源和字段列。下面的真实产品界面展示了上传材料、定义
字段后再开始处理的方式;它用于说明基线记录的输入约定,并不表示 ONNX 链路的运行结果。
图 1:真实产品界面中的上传材料与字段配置,字段规则应在模型转换前固定。
3. 把模型之外的三个环节写进部署清单
模型转换后,最容易被漏掉的是模型前后的处理。对于字段提取,下面三个环节应和模型
文件一起进入版本记录:
- 预处理:图片的页选择、方向、尺寸、色彩和归一化规则。输入不一致,结果自然
不适合直接比较。 - 后处理:怎样把运行时输出还原为文字、坐标、行或页面信息。字段的来源定位通常
就在这里形成。 - 字段规则:从候选文字中选择哪个值、怎样处理日期格式、前导零、小数点和空值。
字段规则尤其不能省。比如“金额”这个词太宽,应该明确是“合计金额”还是“应付金额”;
“日期”也要明确是签署日期、开票日期还是有效期。每个字段应写清:
- 在页面中通常出现在哪里,附近有什么标签或上下文。
- 同页出现多个候选值时,优先级是什么。
- 无法判断时是保留候选、留空还是标为待复核。
这样做能避免把模型输出的变化误判为字段规则的变化,也让后来接手的人知道每列数据
是怎样来的。
对照转换前后结果时,除了目标字段,还要保留全文结果和原始页面。字段不一致时,这些
信息能帮助判断问题发生在输入、模型输出解释,还是字段选择规则。
图 2:真实产品界面中的原始页面与全文识别结果,用于回看字段的完整上下文。
4. 用同一批材料做字段级对照
转换后不要直接开始整批处理。先使用与原始基线相同的材料、字段表和导出规则,把两条
链路的结果并排比较。比较对象不是“控制台有没有输出”,而是最终字段是否一致、来源
是否仍可定位、格式是否仍满足交付规则。
可以使用下面的对照表:
| 样本定位 | 字段 | 原始链路结果 | ONNX 链路结果 | 复核值 | 状态 |
|---|---|---|---|---|---|
| 文件名 + 页码 | 编号 | 待填 | 待填 | 待填 | 一致 / 待复核 |
| 文件名 + 页码 | 日期 | 待填 | 待填 | 待填 | 一致 / 待复核 |
| 文件名 + 页码 | 合计金额 | 待填 | 待填 | 待填 | 一致 / 待复核 |
一旦出现差异,先回到原始页面,再按顺序排查:输入材料是否相同,预处理是否一致,输出
解释是否正确,字段规则有没有变化。没有证据时,不应把差异直接归因给 ONNX 模型。
下面几类情况需要重点保留在复核表中:
| 情况 | 处理原则 |
|---|---|
| 编号前导零丢失 | 以原图为准,确认该列按文本保存 |
| 日期格式不同 | 保留原始写法,并记录统一转换规则 |
| 同页存在多个候选金额 | 按字段标签与位置判断,不从相邻行猜补 |
| 模糊、多栏或异常版式 | 标为待复核,保留文件与页码 |
字段级对照需要同时看到候选值和来源页面。下图展示了原始材料与字段结果并排显示的
方式,适合把两条链路中出现差异的字段逐项回到原图确认。
图 3:真实产品界面中的原始页面与字段结果对照,便于保留差异字段的复核依据。
5. Excel 不是结果的终点,而是复核界面
把字段导出为 Excel 后,只保留“最终值”会丢掉最重要的追溯信息。更适合实际流程的表格
应同时保留来源定位、识别值、复核值和状态列:
| 来源定位 | 字段 | 识别值 | 复核值 | 状态 | 差异说明 |
|---|---|---|---|---|---|
| 文件名 + 页码 | 目标字段 | 模型输出 | 原图确认 | 一致 / 待复核 | 原图原因 |
这样做有两个好处。第一,字段差异不会在导出时被“抹平”,可以继续追查具体材料和规则。
第二,人工复核只聚焦异常与不确定值,不需要重新翻完整批文档。
在转换前后都记录同样的 Excel 结构,才能让模型格式变化真正进入可比较的交付流程。
处理时间也可以记录,但应分开模型加载、预处理、推理、字段整理、导出和人工复核,
避免用一个总数掩盖了不同阶段的差异。
导出时,Excel 应服务于复核和后续工作,而不是掩盖模型输出的差异。下图是字段结果
导出的真实示例;实际任务可在此基础上增加来源定位、复核值和差异说明。
图 4:真实字段结果导出的 Excel 示例,适合承接审核、录入或统计流程。
6. 不想维护模型转换时,直接完成字段表
ONNX 部署适合需要维护模型格式、运行时和集成链路的读者。若你的目标不是持续处理
模型转换,而是把图片、PDF 或文件夹中的指定字段整理成可复核 Excel,可以直接使用
文档工作台。
它是一键安装、打开即用的桌面工具,定位为极致轻量和高精确度字段提取,适合把时间
留给字段定义、结果检查和后续业务处理;实际导出结果仍应结合原图逐项复核。
文档工作台下载链接https://pan.quark.cn/s/82ef5efcf992
ONNX 部署的关键不是成功生成一个新模型文件,而是转换前后都能回答同一个问题:这份
字段表里的每个值,能否回到原始材料找到依据。先完成这个小样本验证,再决定是否把
转换后的链路扩大到更多资料。