OCR 读对了字,为什么地址仍然错?
从信封照片提取收件人和地址时,同一张图上往往还有寄件人、公司名称、页脚和打印标记。OCR 可能每个字都读对,最终填进表单的却是寄件地址。
因此这个问题不能只看识字准确率。还要判断文字来自哪个区域,以及整理后的字段是否满足业务要求。
一段纯文字,为什么不够用?
把所有 OCR 文本拼成一段交给模型,位置关系就弱了。人看到的是信封上的两个区域,模型收到的可能只是一串名字与地址,难以分清归属。
可选办法包括按版式写规则、让模型结合位置整理字段,或让两者配合。项目要求 OCR 同时返回每块文字的包围盒,用位置寻找信封地址窗口,再整理姓名和地址行。
这里的包围盒就是文字在图片中的范围。如果先裁切、缩放或旋转了图片,坐标也要一起转换,否则窗口和文字落在不同坐标系,比较出来的位置没有意义。
加了 AI,规则还怎么用?
项目先尝试 AI 提取。没有启用 AI、调用条件不足、响应解析失败或调用抛错时,得到的是“没有结果”,随后走规则识别,并在输出中记录使用了哪条路径。
但“没有结果”和“结果里的类型未知”不同。模型返回能整理成字典的数据,即使字段不全、类型是 UNKNOWN,也可能直接进入 AI 结果分支,并不会自动回退。
如果业务要求缺地址就必须转人工或重新识别,就要另设完整度判断。接口处理成功,只表示这次处理结束了,不能代替字段正确性或可提交性的判断。
JSON 合法以后,还检查什么?
项目会归一化类型枚举、窗口坐标、收件人和地址行。输入不是字典时拒绝;非法类型归为 UNKNOWN,收件人再结合 OCR 文字和窗口位置清理。
类型未知时,规则会尝试补分类,并保留命中的规则。模型已经给出已知类型时,当前流程不会再用规则逐项否决。规则在这里是有限补充,不是对全部 AI 输出做第二轮审定。
规则本身也会误认。缩写可能嵌在公司名里,组合分类可能缺少必要连接词。已有负例用 trading、CTR 等相似文本与不完整组合检查误判;拿不准时保留 UNKNOWN,比为了命中而放宽匹配更容易核对。
未知、失败和没有输入应分别记录。前端显示未知分类时,也应保留待确认状态,不能把它展示成已确认结果。
已有固定输入用例覆盖分类负例、归一化和识别路径切换,真实图片准确率仍需人工标注样本,按版式、拍摄质量和字段分别统计。
怎么追查某个字段为什么填错?
项目可以按选项返回识别来源、模型置信分、解释、规则编号和原始 OCR 数据。回查时,更有用的问题是:用了哪几块文字,文字在窗口的什么位置,哪条规则改过类型。
模型给出的 0.95 没有校准成真实正确率,不能直接解释为字段有 95% 概率正确;模型生成的解释也仍要与原始输入对照。是否直接提交或只填入待确认表单,应由业务对完整度的要求决定。
当前 AI 异常都归成无结果,进一步区分超时、格式错误与调用条件不足,有助于知道为何回退。日志可以记录原因和耗时,避免把密钥及整段姓名地址长期保存下来。