在 财务自动化 的浪潮中,企业最先解决的往往是 增值税专用发票 和 电子发票。因为它们都有“作弊码”——二维码。只要扫一下,100% 准确的数据就出来了。
但是,在 费控系统 的长尾场景里,还潜伏着一类顽固的“钉子户”:
- 出租车司机给你的 卷式发票。
- 过路费收费站给你的 手撕定额发票。
- 有些偏远地区餐馆给你的 通用机打发票。
这些票据统称为 “无二维码发票”。 它们纸质差、字迹淡、格式千奇百怪,而且没有任何校验码。 对于 OCR 来说,这就是“地狱模式”。识别错一个小数点,财务就得退单。
今天我们探讨:如何利用深度学习技术,攻克这些“老古董”的 发票OCR识别 难题,补齐 财务自动化 的最后一块短板。
1. 痛点:OCR 的“盲区”
在 财务报销 中,定额发票 和 通用机打发票 虽然金额不大,但数量极多(高频低额)。 痛点在于:
- 无二维码兜底:必须纯靠 票据OCR 识别文字。如果把“100”识别成“10”,或者把“壹佰圆”识别成“壹仟圆”,没有校验位可以纠错。
- 版式大乱炖:每个省份的 通用机打发票 版式都不一样(虽然有国标,但执行不一)。
- 物理状况差:出租车票往往皱皱巴巴,字迹是针式打印的,稍微摩擦一下就看不清了。
2. 核心方案一:分类先行,各个击破
要解决这个问题,不能用一个通用模型去跑。必须先进行 票据分类。
工程架构:
- 预处理:图像矫正、去噪。
- 分类器 (Classifier): 使用一个轻量级的 CNN 模型(如 MobileNet),将图片分为三类:
Class A: 定额发票(手撕票,金额固定)。Class B: 卷式发票(出租车/过路费,长条形)。Class C: 通用机打发票(平推式打印,格式多样)。
- 路由分发:不同类型的票,送入不同的 OCR识别 引擎。
3. 场景 A:定额发票(手撕票)的“颜色识别”
定额发票(如停车票、过路费)通常金额是印好的,比如“壹元”、“伍元”、“拾元”。 更有趣的是,不同金额的票,颜色 往往不同(红色的 100 元,蓝色的 10 元)。
技术策略:
- 颜色特征辅助:在 OCR 之前,先提取图片的主色调(HSV 直方图)。如果主色调是“粉红色”,那金额大概率是 100 元。这作为一个强特征输入给模型。
- 大字提取:不需要识别所有小字。只需定位票面中心最大的那几个汉字(“壹佰圆整”)。
- 金额后处理:建立一个
[1, 2, 5, 10, 20, 50, 100]的金额白名单。如果 OCR 识别出“15 元”,直接强制修正为最接近的合法面额。
4. 场景 B:出租车卷式发票的“关键点检测”
出租车发票 是 费控系统 中最难处理的。因为它们是连续打印的,没有固定的边界,且字迹极易磨损。
技术策略:
- 文本行检测 (DBNet): 不依赖固定模板,而是使用基于深度学习的 DBNet 或 PSENet 算法,动态检测文本行。
- 关键词锚点 (Anchor Matching): 寻找
金额、日期、车号、里程这四个关键词。- 逻辑:
金额通常在时间的下方或右侧。
- 逻辑:
- 针式打印体优化: 训练专门的 CRNN 模型,针对针式打印机(Dot-matrix printer)的断点字体进行微调(Fine-tuning)。这能显著提升模糊数字的识别率。
5. 场景 C:通用机打发票的“去印章”
通用机打发票 最头疼的是那枚红色的“发票专用章”。 它往往不偏不倚,正好盖在“大写金额”或“小写金额”上。 红色的印泥遮住了黑色的数字,导致 发票OCR识别 失败。
技术策略:HSV + GAN 去印章
- 色彩分离:利用红色在 HSV 空间的高饱和度特征,将红色像素提取出来,生成 Mask。
- 图像修复 (Inpainting):
- 传统方法:将红色像素置白。缺点是会把压在下面的黑色笔画也弄断。
- 深度学习方法:使用 GAN (生成对抗网络)。训练模型“脑补”被印章遮挡的文字线条。
- 效果:去印章后,OCR 对金额的识别率可从 60% 提升至 95% 以上。
6. 价值总结:消灭人工录入的“最后一公里”
处理好 定额发票识别 和 通用机打发票,是 财务自动化 系统成熟的标志。
这套方案的价值在于:
- 全票种覆盖:让 费控系统 不再挑食,无论是二维码电票还是皱巴巴的手撕票,都能秒级录入。
- 降低退单:通过针对性的算法优化(如去印章、针式字体增强),大幅减少因识别错误导致的财务退单。
- 数据沉淀:即使是老旧票据,也能转化为 结构化数据,为企业的支出分析提供完整拼图。
对于 OCR 算法工程师 而言,搞定这些“脏乱差”的 无二维码发票,才是展现技术实力的真正战场。