技术分享:基于深度学习的发票平台验证码识别与自动化查验实践
·
基于 CRNN+CTC 的验证码识别实战:以某税务查验平台为例
摘要
在财务自动化流程中,发票查验是高频刚需场景。然而,国家税务总局全国增值税发票查验平台的图形验证码机制往往成为阻碍 RPA(机器人流程自动化)落地的最大痛点。本文不讨论商业 OCR 接口的高昂成本,而是从零开始,分享如何利用深度学习框架训练一个轻量级、高精度的专用验证码识别模型,并结合 UI 自动化技术实现全流程无人值守查验。
一、 背景与难点分析
在进行发票批量查验时,我们面临的主要挑战并非数据录入,而是非结构化图像的解析。该平台的验证码具有以下特征:
- 干扰性强: 包含大量噪点、干扰线及字符粘连。
- 动态变化: 字体、颜色、扭曲程度随机生成。
- 时效性要求高: 验证码刷新频繁,要求模型推理速度必须在毫秒级。
传统的 Tesseract OCR 在此类场景下准确率极低,而调用第三方商业 API 不仅存在数据隐私风险,长期来看成本也极高。因此,自研垂直领域的识别模型是最佳解法。
二、 核心技术方案
1. 数据集构建策略
高质量的数据集是模型成功的基石。我没有使用公开数据集,而是针对该平台进行了定向采集:
- 自动化采集脚本: 利用 Selenium 编写爬虫,模拟访问并自动截取验证码图片,同时通过图像预处理提取正确答案作为标签(Label)。
- 样本增强: 原始采集约 2000 张样本,通过
Albumentations库进行增强,包括:- 几何变换: 随机旋转、透视变换、弹性形变。
- 像素级变换: 高斯噪声、运动模糊、亮度/对比度调整。
- 最终规模: 扩充至 10,000+ 张训练集,确保模型见过各种“极端情况”。
2. 模型架构设计 (CRNN + CTC)
针对定长或不定长的序列识别,我采用了经典的 CNN + BiLSTM + CTC 架构:
- CNN 特征提取层: 使用轻量级的 MobileNetV3 作为 Backbone,负责从图像中提取高阶语义特征,同时保证推理速度。
- BiLSTM 序列建模: 双向 LSTM 捕捉字符间的上下文依赖关系(例如前一个字符是 'C',后一个大概率不是数字)。
- CTC Loss 解码: 引入 Connectionist Temporal Classification 损失函数,解决了输入图像特征序列与输出标签序列长度不一致的对齐问题,无需预先分割字符即可端到端训练。
3. 训练与优化
- 框架: PyTorch
- 超参数: Batch Size 64, Learning Rate 1e-3 (Cosine Annealing 衰减)。
- 难点攻克: 训练初期发现模型容易过拟合于特定的噪点模式。通过增加 Dropout 层(0.5)以及 Mixup 数据增强策略,有效提升了泛化能力。
- 结果: 经过 50 Epochs 训练,测试集准确率稳定在 98.5% 以上,单张图片推理耗时 < 30ms。
三、 自动化工程落地
单纯的模型识别只是第一步,要形成生产力,还需要解决工程化问题:
- UI 交互闭环: 使用 Python 的
pyautogui或Selenium WebDriver定位网页元素。程序读取本地 Excel 发票清单,自动填充代码、号码、日期等信息。 - 置信度过滤机制: 这是一个关键的工程技巧。模型输出时会给出概率值,当识别结果的置信度低于设定阈值(如 0.85)时,程序不会盲目提交,而是自动触发“看不清?换一张”逻辑,重新获取验证码再次识别。这极大地降低了因识别错误导致的查验失败率。
- 异常处理: 针对网络波动、页面加载超时等情况加入了重试机制,确保程序能 7x24 小时稳定运行。
四、 总结与开源交流
通过本次实践,验证了在特定垂直场景下,定制化的深度学习模型比通用 OCR 更具优势。它不仅成本低,而且可控性强。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)