NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

为什么才云能打进 500 强企业的财务部门?

  • 2020-03-02
  • 本文字数:3564 字

    阅读完需:约 12 分钟

为什么才云能打进 500 强企业的财务部门?

发票是会计核算的原始依据。于国家,它是保障税收的基石;于企业,它是公司做账的依据;于个人,它是报销的凭证。


临近年底,为了赶在截止日期前完成封账,各大公司的财务部门开始加急投入人力、时间成本将发票录入系统,工作压力大,运营成本昂贵。


以增值税发票为例,财务人员通常需要肉眼核对长达十几位的发票代码、纳税人识别号等,并手动录入关键数据。这样沉重的负担无疑会导致发票出错风险激增,也拖累公司整体财务管理效率!



增值税电子普通发票格式


为了降低财务工作难度,实现财务数据的信息化和录入的智能化,国内某能源企业在系统中引入了才云科技的 OCR 解决方案,财务人员上传发票图像即可完成对工程建设、电力调度、员工报销等多种发票的信息自动录入。即便存在发票褶皱、倾斜、扭曲,该方案的数字识别准确率也始终保持在 90% 以上!人工复核压力小,海量票据的报销流程大大加快。而现在,随着这套解决方案即将上线 Caicloud Clever,对更多企业来说,自主开发票据 OCR 正变得触手可及。

票据 OCR 为何难以落地?

OCR,全称光学字符识别(Optical Character Recognition),是计算机视觉的一个分支,主要包含文本检测和文本识别两大关键技术:前者用于定位图像中的文字,后者负责将定位到的文字图像转化为可编辑的文本。


发展至今,OCR 的应用已经十分广泛,市场上的 OCR 产品也比比皆是,但它们的在现实场景下的识别效果却良莠不齐。这是因为作为一种基于图像的文字识别技术,OCR 的识别效果不仅取决于算法,输入图像的质量也严重影响着其最终准确率。


对于算法:目前业界针对文本检测和文本识别已经提出了很多优秀的“轮子”。但检测模型只能完成文字定位,识别模型只能完成文字转录,为了形成一套完整的 OCR 流程,企业需要对各类已有“轮子”进行定制化组合。考虑到 AI 模型的开发难度,这就为企业增加了引进 AI 技术专家的成本。


对于图像质量:通用的 OCR 方法在高质量扫描图像上都能取得较好的效果,但在实际应用中,财务部门上传的票据大多存在分辨率低、光照不均匀、背景杂乱、拍摄角度随意、版式复杂多样等问题,这些都可能影响最终的识别结果。


同时,OCR 服务在许多场景下是系统中连接着后续业务逻辑的子模块。为方便后续业务的进行,系统不仅要知道图像上包含哪些文字,更需要结构化文本内容,这也增加了 OCR 的技术难度。以增值税发票的识别为例,OCR 服务的最终返回结果类似如下的形式:



因此,从实际落地的角度看,当下有很多 OCR 产品只是炫技之作,它们忽视了企业的现实情况,无法从平台级别实现一套通用的票据结构化识别流程,方便非 AI 专家构建定制化 OCR 解决方案,提升 AI 产品在企业系统中的长期价值。

才云票据结构化识别通用 Pipeline

针对上一节提出的问题,才云算法团队(Cabernet 团队)经多方调研和尝试,总结出了企业对通用票据 OCR 落地应用的三项主要需求:


  • 构建通用的票据结构化识别流程,方便非 AI 专家灵活、合理利用“轮子”;

  • 拥有多角度检测和识别的能力,在图像质量不理想的情况下仍能保持高准确率;

  • 结构化不同票据的票面信息,为每一种票据做定制化处理。

  • 结合在五百强企业财务部门的应用实践,才云 Cabernet 团队针对当下所有具有明确版式的票据,设计了一套通用的结构化识别流程(Pipeline),整个 Pipeline 包含票据提取、票据标准化、文本检测及结构化和文本识别四大模块。


才云票据结构化识别通用 Pipeline

票据提取

首先,票据提取模块的输入是用户上传的图像。由于报销人可能会同时提交不同类型的多种票据,其中甚至夹杂公司不支持报销的纸质材料,Pipeline 的第一个环节需要完成感兴趣票据的自动分类和裁切(未支持的票据种类视为不感兴趣),如下图所示:



票据提取结果示例图(不同类型的票据用边界框颜色不同)


技术上,该环节是一个目标检测任务,它将每张票据视为一个目标,并预测目标的位置和类别。目前业内常用的目标检测模型有 Faster R-CNN、SSD、YOLO 以及 RetinaNet 等。为帮助非 AI 技术专家进行模型训练,未来,才云 AI 中台 Caicloud Clever 将提供上述模型选项,方便用户灵活选择。

票据标准化

在企业中,票据图像的采集一般由人工通过扫描仪、高拍仪、手机等设备完成,采集角度不固定,导致无法使用标准模板上的先验信息,影响结构化识别的准确率。


该问题虽然可以通过规范用户的采集方式缓解,但出于对提高用户体验、加快信息采集效率的考量,才云 Cabernet 团队最终选择在 Pipeline 中实现票据标准化。


标准化是通过空间映射将输入图像转换成标准模板。方法是在输入图像和标准票据模板上寻找特征点对计算映射矩阵 H,通过 H 将输入票据投影到模板平面。这包含两个问题:


  • 问题一:在标准模板上的特征点选择标准——选取的点应尽量均匀分布在图像四周,可以最大程度地保证投影之后图像信息的完整性;

  • 问题二:在输入图像上找到标准模板上特征点的映射——在模板图像上定义关键区域,训练检测(实例分割)模型预测输入图像的关键区域,以输入图像和模板上的区域中心作为特征点对。

  • *注:关于问题二,此处推荐使用 Mask R-CNN 完成区域检测并以 Mask 中心为特征点,避免常用检测算法的矩形框中心在拍摄角度随意的情况下无法准确描述特征点的位置。

  • 以火车票为例,我们可以定义如下的关键区域:起始站、车次号、到达站、时间/价格信息、座位信息、身份证、二维码。图中绿色的点代表该区域的中心点:


关键区域模板示意图


对任意一张车票图像完成关键区域的检测并得到区域中心后,我们就可以通过特征点对计算映射矩阵,完成输入图像到标准模板的转换。!



标准化前(左)和标准化后(右)

文本检测及结构化

这一环节的主要任务是检测、定位各类信息在票据上的位置,方便后续文字识别。


对于标准化后的票据,票面上的文本已基本被调整至水平方向,因此无论是传统文字检测方法还是深度学习文本检测模型,它们都能在票据上完成文本定位。


*注:由于传统方法易受图像质量的影响,抗噪能力不强,这里还是推荐使用场景适应性更好的深度学习方法。


以火车票为例:



文本检测结果(右)和关键字段模板示意图(左)


得到文本检测结果后,引入针对关键字段的模板,计算文本检测框与模板上关键字段边界框的 IOU (交并比),将“起始站”“车次号”“身份证”等信息分配给检测框以完成结构化。!



结构化检测结果(不同颜色的框代表属于不同字段)

文本识别

至此,整个 Pipeline 中最难的两个部分“标准化”和“结构化检测”都已经完成,相当于用户已经知道当前输入的票据上的感兴趣字段所在的位置,剩下的只需把关键字段位置对应的图像转换成文本内容即可。


文本识别可以将整个关键字段切割成单字逐个识别,也可以直接识别整条文本行,下图是才云 Cabernet 团队基于文本识别模型,对整条关键字段进行识别的效果。



结构化识别结果示意图


当前业内常见的识别模型分为 CTC 和 Attention 两大方向。如前文所述,在 OCR 解决方案正式上线 Caicloud Clever 平台后,用户可在 Caicloud Clever 上自由选取各类模型进行训练,降低开发者学习成本。

未来展望

本文提出的票据结构化通用 Pipeline 是一套针对常规票据从输入到最终结构化输出的最佳实践,包含票据分类、自动裁切、版面标准化、结构化检测与识别等多项 OCR 不可或缺的步骤及实现方法。


为帮助更多企业自主开发票据识别 OCR 系统,才云 AI 中台 Caicloud Clever 即将上线票据结构化识别通用 Pipeline,利用平台级 AI 开发能力及在国内诸多大型企业积累的丰富落地经验,帮助用户灵活、自由地定制各环节模型,轻松实现票据种类的扩展,并快速在生产环境中落地。


为进一步服务用户,才云 Cabernet 团队下一步的工作将围绕两个方向展开:


设计通用 OCR 模型框架:通过规范化 OCR 模型的输入输出,统一训练、推理的流程和接口,实现在 Pipeline 中的即插即用;


开展对自动数据增强(Data Augmentation)的研究:在数据有限的情况下,低成本、更稳健地提升 OCR 的性能。


本文转载自才云 Caicloud 公众号。


原文链接:https://mp.weixin.qq.com/s/6XcH_jfULfGZQCDdehQzfg


2020-03-02 21:59526

评论

发布
暂无评论
发现更多内容

Java多线程案例之线程池

未见花闻

7月月更

Spring Cloud源码分析之Eureka篇第六章:服务注册

程序员欣宸

Java SpringCloud 7月月更

【这款插件在IntelliJ IDEA中,可以大幅提升工作效率,强烈推荐!】

了不起的程序猿

Java java程序员 实用工具

Flutter 实现爱心三连动画效果

岛上码农

flutter ios 安卓 移动端开发 7月月更

Nginx Http模块是如何处理请求的?

Ethan

ngnix

Python|「函数」递归与迭代

AXYZdong

Python 7月月更

跨域的问题终于能解决了

是乃德也是Ned

JavaScript ajax 前端 7月月更

iOS中方法和函数的区别

NewBoy

前端 移动端 iOS 知识体系

QT 实现文件夹的删除

小肉球

qt 7月月更

2000字教你如何玩转Linux man命令,隐藏技能非常nice

wljslmz

Linux 运维 man 7月月更

Nginx 部署的虚拟主机如何使用 Let's Encrypt 来进行加密 https

HoneyMoose

Android 小巧技-不用图片框架,实现加载类似微博超长图片的手法

芝麻粒儿

android 7月月更

双目立体匹配步骤

秃头小苏

7月月更 双目立体匹配

学一招,docker自启动以及容器自启动的解决方案

麦洛

Docker docker image

ORACLE进阶(十)start with connect by 实现递归查询

No Silver Bullet

oracle 递归 7月月更

spark调优(五):提交任务优化

怀瑾握瑜的嘉与嘉

7月月更

iOS中SEL类型

NewBoy

ios 前端 移动端 iOS 知识体系 7月月更

MySQL灵魂16问,你能撑到第几问?

了不起的程序猿

Java MySQL 面试题 java程序员

基于STM32+华为云IOT设计的智能家居控制系统_语音+环境检测

DS小龙哥

7月月更

【LeetCode】玩筹码Java题解

Albert

LeetCode 7月月更

java零基础入门-抽象类

喵手

Java 7月月更

你以为,设计一个RPC框架很简单?应该从哪入手,深入剖析? Java架构新资讯

了不起的程序猿

Java RPC java程序员 java 编程

Qt|实现边加载数据边显示页面

中国好公民st

qt 7月月更

内部排序——选择排序

乔乔

7月月更

ArrayBlockingQueue源码分析-构造方法

zarmnosaj

7月月更

SAP Fiori 注解 @ObjectModel.readOnly工作原理解析

Jerry Wang

SAP abap Fiori SAP UI5 7月月更

LeetCode-136. 只出现一次的数字(java)

bug菌

Leet Code 7月月更

NumPy 与 Python 内置列表计算标准差的区别

宇宙之一粟

Numpy 7月月更

模块6(拆分电商系统为微服务)

Geek_701557

给自己点鸡汤吧

沃德

程序员 心灵鸡汤 7月月更

注入攻击

沃德

程序员 7月月更

为什么才云能打进 500 强企业的财务部门?_语言 & 开发_才云科技_InfoQ精选文章