简介:本文面向财务、行政及开发者,梳理基于OCR的发票识别与台账整理完整流程。内容涵盖图片采集、字段定义、异常处理、结果校验等关键环节,帮助读者用较低成本把零散票据转成结构化Excel台账,减少手工录入与重复核对。
很多团队在处理报销时,仍然停留在手工录入阶段:一张张打开图片,肉眼读取发票号码、开票日期、销方名称、金额与税额,再逐行填入表格。票据数量少时还能应付,一旦每月有几十张甚至上百张发票,重复录入不仅耗时,还容易把数字看错、把字段填串,后续对账更是一场灾难。
OCR,即光学字符识别,可以从图片中提取文字信息,再把非结构化的票面内容转换为可处理的结构化数据。将OCR能力引入报销前处理环节,可以把发票图片批量整理成台账,显著降低人工录入量。本文围绕这一场景,整理一套可落地的实践方法,不依赖特定品牌或平台,适用于具备通用OCR能力的云服务、本地识别引擎或自建识别流程。
OCR本身只是能力之一,真正解决问题的是后续的结构化整理。识别结果如果仍然是一段连续文本,财务人员依旧要自己翻找关键字段,效率提升有限。
因此,在设计流程之前,应明确最终交付物是什么。以报销场景为例,通常需要的是一张Excel表,每一行对应一张发票,每一列对应一个关键字段。常见字段包括:
只有把目标结构定义清楚,后面的图片采集、提示词设计、结果校验才有依据。否则很容易陷入“识别很快、整理很乱”的尴尬局面。
OCR对输入图片质量比较敏感。同样的识别能力,面对清晰图片与模糊图片,结果差异可能很大。拍摄或扫描发票时,建议遵循以下原则:
保留完整票面
四角与边框不要被裁剪,尤其是发票号码和二维码区域,位置固定、信息关键。
避免反光与阴影
手机拍摄时容易产生局部高光,导致部分数字被“洗掉”。如果条件允许,优先使用扫描仪或文档扫描类工具。
减少倾斜与透视变形
倾斜过大的图片即使能识别,字段对齐和区域定位也可能出错。拍摄时尽量正对票面,后期可适度校正。
统一文件命名与存放
建议在识别前将所有图片集中到一个目录,并使用有意义的文件名,例如“202501供应商A发票01.jpg”。文件名不仅是查找凭证的线索,也可以成为台账中的一个字段,帮助回溯原始文件。
图片准备虽然简单,但直接影响后续识别准确率与核对成本。一次清晰的采集,往往能减少大量异常处理时间。
在实际操作中,如果只给出一个模糊指令,例如“帮我整理这些发票”,识别系统可能返回各种风格不一的内容:有的提取发票号码,有的只识别金额,还有的可能把二维码内容也拼进来。结果越自由,后续清洗越痛苦。
更合理的做法是明确列出期望字段,并指定输出格式。例如:
请从发票图片中提取以下字段:
- 发票号码
- 开票日期
- 销售方名称
- 购买方名称
- 金额
- 税额
- 价税合计
- 来源文件名
输出为Excel表格,每张发票一行,字段顺序与上述一致。
为什么要强调“来源文件名”?因为当多条记录金额相近、销方名称相似时,没有来源信息就很难追溯原始凭证。在台账中保留文件名,等于为每一行数据建立了可回溯的索引。
此外,字段命名要保持统一。不要在识别时用“价税合计”,核对时又改成“含税金额”,名称不一致会在后续公式计算和人工对比时制造额外麻烦。
识别结果不可能百分之百准确。更稳妥的做法是:对不确定的内容进行标记,而不是强行给出一个可能错误的数字。
常见的异常类型包括:
模糊数字
面对无法确认的数字,不要直接采用识别结果中的“最像值”。可以标记为“待核对”,回到原图人工确认。
重复发票号码
如果出现两条记录号码相同,有可能是同一张发票被重复识别,也可能是图片重名覆盖。此时应单独列出,核对文件与票面。
字段缺失
个别发票可能因为模板差异导致某字段未被识别到,需要回到原图补充。
金额关系不对
正常情况下,金额与税额之和应接近价税合计。若发现明显不一致,应优先怀疑识别错误。
异常处理不是流程的附加项,而是流程的一部分。只有把不确定内容显式暴露出来,台账才是可信的。
机器输出只是中间结果,最终用于报销的材料必须经过人工抽查。建议从三个层面进行校验:
字段级抽查
随机抽取若干条记录,逐一对照原图核对金额、日期和发票号码。重点检查长数字串与日期格式。
记录数量核对
确认台账中的记录数与原图数量一致。数量对不上,往往意味着漏识别或重复识别。
业务规则检查
根据公司报销规则,检查发票类型、购买方名称、金额上限等是否符合要求。OCR只负责提取,不负责合规。
需要特别说明的是,发票识别与字段整理并不等于发票验真。税务验真通常需要对接税务系统或官方渠道,属于另一个环节。识别台账可以提升录入效率,但不能替代真实的报销审批与发票查验流程。
对于开发者来说,上述过程还可以进一步工程化。一个简单的批处理脚本通常包含以下步骤:
输入目录:发票图片│├─ 1. 读取图片列表├─ 2. 调用OCR识别,获得原始文本├─ 3. 字段抽取与结构化├─ 4. 输出Excel/CSV├─ 5. 异常记录单独保存└─ 6. 生成核对报告
当票据量增大后,可以引入任务队列、异步处理与结果缓存,避免重复调用识别接口。字段抽取部分也可以基于规则或模板持续优化,逐步提高自动化比例。
任何自动化流程都建议先小范围跑通,再逐步扩大。不要一上来就批量识别几百张图片,而是先选三五张清晰样本,验证字段是否齐全、格式是否符合预期、异常是否可追踪。
小范围验证阶段可以重点观察:
只有确认流程可靠,再逐步扩展到整月票据或全部门使用。稳定、可追溯、可核对,比单纯追求“全自动”重要得多。