财务自动化 的浪潮中,企业最先解决的往往是 增值税专用发票电子发票。因为它们都有“作弊码”——二维码。只要扫一下,100% 准确的数据就出来了。

但是,在 费控系统 的长尾场景里,还潜伏着一类顽固的“钉子户”:

  • 出租车司机给你的 卷式发票
  • 过路费收费站给你的 手撕定额发票
  • 有些偏远地区餐馆给你的 通用机打发票

这些票据统称为 “无二维码发票”。 它们纸质差、字迹淡、格式千奇百怪,而且没有任何校验码。 对于 OCR 来说,这就是“地狱模式”。识别错一个小数点,财务就得退单。

今天我们探讨:如何利用深度学习技术,攻克这些“老古董”的 发票OCR识别 难题,补齐 财务自动化 的最后一块短板。

1. 痛点:OCR 的“盲区”

财务报销 中,定额发票通用机打发票 虽然金额不大,但数量极多(高频低额)。 痛点在于:

  1. 无二维码兜底:必须纯靠 票据OCR 识别文字。如果把“100”识别成“10”,或者把“壹佰圆”识别成“壹仟圆”,没有校验位可以纠错。
  2. 版式大乱炖:每个省份的 通用机打发票 版式都不一样(虽然有国标,但执行不一)。
  3. 物理状况差:出租车票往往皱皱巴巴,字迹是针式打印的,稍微摩擦一下就看不清了。

2. 核心方案一:分类先行,各个击破

要解决这个问题,不能用一个通用模型去跑。必须先进行 票据分类

工程架构

  1. 预处理:图像矫正、去噪。
  2. 分类器 (Classifier): 使用一个轻量级的 CNN 模型(如 MobileNet),将图片分为三类:
    • Class A: 定额发票(手撕票,金额固定)。
    • Class B: 卷式发票(出租车/过路费,长条形)。
    • Class C: 通用机打发票(平推式打印,格式多样)。
  3. 路由分发:不同类型的票,送入不同的 OCR识别 引擎。

3. 场景 A:定额发票(手撕票)的“颜色识别”

定额发票(如停车票、过路费)通常金额是印好的,比如“壹元”、“伍元”、“拾元”。 更有趣的是,不同金额的票,颜色 往往不同(红色的 100 元,蓝色的 10 元)。

技术策略

  • 颜色特征辅助:在 OCR 之前,先提取图片的主色调(HSV 直方图)。如果主色调是“粉红色”,那金额大概率是 100 元。这作为一个强特征输入给模型。
  • 大字提取:不需要识别所有小字。只需定位票面中心最大的那几个汉字(“壹佰圆整”)。
  • 金额后处理:建立一个 [1, 2, 5, 10, 20, 50, 100] 的金额白名单。如果 OCR 识别出“15 元”,直接强制修正为最接近的合法面额。

4. 场景 B:出租车卷式发票的“关键点检测”

出租车发票费控系统 中最难处理的。因为它们是连续打印的,没有固定的边界,且字迹极易磨损。

技术策略

  1. 文本行检测 (DBNet): 不依赖固定模板,而是使用基于深度学习的 DBNetPSENet 算法,动态检测文本行。
  2. 关键词锚点 (Anchor Matching): 寻找 金额日期车号里程 这四个关键词。
    • 逻辑:金额 通常在 时间 的下方或右侧。
  3. 针式打印体优化: 训练专门的 CRNN 模型,针对针式打印机(Dot-matrix printer)的断点字体进行微调(Fine-tuning)。这能显著提升模糊数字的识别率。

5. 场景 C:通用机打发票的“去印章”

通用机打发票 最头疼的是那枚红色的“发票专用章”。 它往往不偏不倚,正好盖在“大写金额”或“小写金额”上。 红色的印泥遮住了黑色的数字,导致 发票OCR识别 失败。

技术策略:HSV + GAN 去印章

  1. 色彩分离:利用红色在 HSV 空间的高饱和度特征,将红色像素提取出来,生成 Mask。
  2. 图像修复 (Inpainting)
    • 传统方法:将红色像素置白。缺点是会把压在下面的黑色笔画也弄断。
    • 深度学习方法:使用 GAN (生成对抗网络)。训练模型“脑补”被印章遮挡的文字线条。
    • 效果:去印章后,OCR 对金额的识别率可从 60% 提升至 95% 以上。

6. 价值总结:消灭人工录入的“最后一公里”

处理好 定额发票识别通用机打发票,是 财务自动化 系统成熟的标志。

这套方案的价值在于:

  1. 全票种覆盖:让 费控系统 不再挑食,无论是二维码电票还是皱巴巴的手撕票,都能秒级录入。
  2. 降低退单:通过针对性的算法优化(如去印章、针式字体增强),大幅减少因识别错误导致的财务退单。
  3. 数据沉淀:即使是老旧票据,也能转化为 结构化数据,为企业的支出分析提供完整拼图。

对于 OCR 算法工程师 而言,搞定这些“脏乱差”的 无二维码发票,才是展现技术实力的真正战场。