引言

随着社会经济的发展,印章作为企事业单位、社会团体、政府部门乃至国家的一种具有法律意义的标志和证据,在现代社会生活中发挥着重要作用。随着现代商务活动的不断发展,企业在业务开展的过程中通常会涉及大量的合同签署归档工作,以往会采取人工审核合同照片的方式来判断合同签署的双方是否都加盖了公章,但是这样做人工审核时间成本高、人力成本高,因此,印章识别可自动提取出印章文本,从而实现计算机替代人工审核比对,解决合同管理工作中人工审核时间成本高、人力成本高的难题,降低财税及商务合同签订过程的业务风险,使商务连接更加高效和便捷。

常用印章

日常工作中常见的印章有:公章、财务章、法定代表人章、发票专用章、合同专用章。

技术难点

回到本文的介绍主题,本文希望通过介绍印章识别和常规文本行识别的对比,来阐述两者的差异,从而让读者建立一个较为具象的认知。

对比纬度

常规文本行识别

印章识别

示例图像

文字形状

矩形/四边形

任意形状

 

文字遮挡

一般而言是无遮挡的独立文本行

大概率存在不同程度的遮挡和背景干扰

重叠

排版方式

 

千奇百怪,方形、椭圆形、圆形等各种形状差异都很大

阅读顺序

人类自然阅读顺序

从左到右

从右到左

无序

受盖章方向影响

显示详细信息

 

OCR领域中较少关于印章文字识别的研究,但是合合技术团队研究论证认为,自然场景文本识别的一些技术可以应用于印章识别。本文下面将介绍一些印章识别的技术方案。

印章识别主流方案

印章识别系统的输入是一张经过裁剪的印章图片,输出是印章中所有文本的坐标框和识别结果,流程如下图所示:

下面介绍一些印章识别的技术方案。

印章文本检测+文本矫正(optional)+文本识别

第一套印章识别方案是传统的级联系统:

经过裁剪的印章图片,首先经过一个支持曲形文本检测的文本检测模型获取文本坐标框,其输出可以直接送入文本识别模型得到最终的识别结果;也可以先利用一个TPS[1]矫正模块,将所有曲形文本拉直成水平文本行图片,再送入文本识别模型。

下面简单介绍一下其中重点模块的选型。

文本检测模型:近年来基于深度学习的场景文本检测领域取得了重大进展,有很多成熟的曲形文本检测方案可供选择,大体上分为两类:

  • 基于回归的检测模型,比如Mask RCNN[2]、EAST-like[3]和TextRay[4];

  • 基于分割的检测模型,比如PSENet[5]、CRAFT[6]和DBNet[7]。

下面以EAST-like(该模型没有名称,暂且称为EAST-like)为例做简单介绍:

上图是EAST-like的标签生成示意图和网络结构,该模型对经典的EAST[8]模型进行了扩展,通过增加回归点的数目来支持多边形检测;使用了多尺度预测来改善目标的尺度变化问题;另外在Loss方面也做了改进。

文本识别模型:从解码方式来划分,目前学术界主流的文本识别模型分为两类: CTC和Attention。

  • 基于CTC的代表模型是CRNN[9],速度快,性能稳定,不过只能处理水平文本行图片(需要先经过TPS模块将曲形文本进行拉直);

  • 基于Attention的识别模型有两种思路,第一种是先通过STN[10]进行矫正,然后送入1D Attention的识别模型进行端到端训练,代表模型是ASTER[11];另一种是抛弃STN模块,直接基于2D Attention解码完成(曲形)文本识别,比如SAR[12]、MASTER[13]和SATRN[14]。最近学术界流行的基于多模态的文本识别模型如ABINet[15]、VisionLAN[16]等,其实可以看作是2D Attention模型的延伸。

下面是经典的CRNN模型的网络结构:

CRNN模型由三部分组成: 卷积层、循环层和转录层。卷积层负责提取图像特征;循环层通过BLSTM进行序列建模,进一步改善特征表征;最后是线性分类层,并通过CTC解码得到最终的预测结果。

总结下来,合合信息技术团队认为多模型级联是较为成熟的印章识别方案。其优点是各个环节可供选择的模型较为丰富,同时将检测与识别模块进行解偶,使其各自的训练互不影响。其缺点主要是级联系统的误差累积问题。

印章端到端检测识别(End2End)

上一节的级联系统中,检测和识别模型单独训练,一方面会造成整个识别系统的次优化效果,另一方面错失了检测和识别head共享主干网络图像特征的机会。

近年来,学术界一直在致力于提出端到端的文本检测识别系统,通过检测和识别头共享主干网络,能有效降低系统的复杂度,同时利用多任务学习进一步提升了模型的整体性能。

印章端到端检测识别模型流程如下所示:

近两年来,不少支持曲形文本识别的端到端模型被提出,下面以ABCNet[17]和Mask TextSpotterv3[18]为例进行简要介绍。

ABCNet网络结构和贝塞尔曲线拟合示意图如下所示:

ABCNet的主要亮点在于引入了贝塞尔曲线用于建模曲形文本边界框,如上图所示,通过三阶贝塞尔曲线(四个控制点)可以灵活地拟合出各种曲线。

网络结构方面,ABCNet由检测模块 + RoI_Transform + 识别模块构成,类似于早期的端到端模型FOTS[19],只是检测模块的回归目标变成了贝塞尔曲线的控制点,以及RoI_Transform部分换成了BezierAlign。

Mask TextSpotterv3网络结构如下图所示:

该模型也是由检测模块 + RoI_Transform + 识别模块构成,但检测模块换成了分割模型,和基于回归的检测模型相比,分割模型能灵活地建模任意形状的文本,同时对文本长度不敏感;RoI_Transform部分直接使用了RoIAlign,利用水平外接框,裁剪出每个RoI文本块,同时对非前景区域进行了zero masking,防止背景干扰;与RoI_Transform配套,识别模块使用了基于attention的识别器。

总结下来,合合信息技术团队认为端到端检测识别算法有如下优点:

  1. 检测和识别模块进行端到端训练,改善了级联系统的误差累积问题,性能更好

  2. 通过共享主干网络,端到端检测识别模型的速度更快

  3. 维护具有相同依赖的统一框架,节省了大量的工程工作

与此同时,印章端到端检测识别算法也存在如下缺点:

  1. 检测和识别任务所需的训练样本的量级不一样(识别任务需要更多的训练数据),因此对训练数据集的要求更高。

印章序列预测方案(Image2Sequence)

不管是级联模型,还是端到端的检测识别模型,在进行方章识别时都会遇到多方向文本的难题,如下图所示:

真实方章图片中,文本阅读方向可能是从左到右,也可能是从右到左;可能是横排文本,也可能是竖排文本。文本检测模型仅依靠视觉信息,很容易将横排文本检测成竖排文本,同时不同的文本行还需要考虑如何拼接成正确语义顺序的完整字符串。

印章序列预测方案直接抛弃了检测模块:输入经过裁剪的印章图片,模型输出最终的字符串序列,该字符串包含了印章中所有感兴趣文本行:

理论上,序列预测方案可以同时处理所有类型的印章。如果想区分不同的字符串,可在不同字符串之间可插入某个特殊符号(比如'#'),如下图所示:

只需要人为规定印章中不同字符串之间的固定阅读顺序,构造相应的ground truth字符串标签,剩下的就交给模型自己去学习了。针对方章中字符串阅读顺序不固定的问题,本方案可以大大地简化处理流程。

img2seq模型选型没有特别要求,考虑到印章中文字的2D空间布局,可以使用一个基于2D Attention的文本识别模型来完成img2seq任务。为了让img2seq模型能更好地学习全局的上下文特征,推荐使用基于transformer encoder/decoder的识别模型,比如MASTER[12]和SATRN[13],借助其强大的self-attention机制,img2seq模型能获取全局的感受野,以及在解码阶段更好地进行关系建模。

下面以MASTER为例对img2seq模型进行简单介绍,其网络结构如下图所示:

该模型是一个典型的encoder-decoder架构,其中encoder部分是一个定制的,拥有全局感受野的CNN网络,输出一个8倍图的feature map,decoder部分则采用了标准的transformer decoder。同时论文中还使用了memory cache的技术对解码部分进行加速。

总结下来,合合信息技术团队认为img2seq模型具备以下的优缺点:

其优点是可以使用单个模型解决不同类型印章的识别问题。部署和维护都相当简单。

其缺点是模型容易过拟合,需要大量的训练数据,这一点可以通过数据合成的方案进行缓解。另外,img2seq模型不能提供每个文本行的位置信息。

感兴趣的小伙伴可以下载体验:

支持Android和iOS平台,Android最低支持4.4,iOS最低支持9

Android下载渠道:小米和华为应用商店;

iOS下载渠道:AppStore应用商店。

总结

合合信息技术团队经过调研复现以及对比实验,对于上述几个印章识别的解决方案,有以下总结,如下表所示:

技术方案

优点

缺点

印章文本检测+文本矫正(optional)+文本识别

检测与识别模块可独立优化

适用不同类型印章识别

速度慢

维护成本高

印章端到端检测识别

模型pipeline简单

速度快,便于维护

很难训练

不适用方章等特殊印章

印章序列预测方案

模型pipeline简单

适用不同类型印章识别

模型容易过拟合

可解释差

无法给出文本位置

 
 

参考文献

  1. Bookstein, Fred L. "Principal warps: Thin-plate splines and the decomposition of deformations." IEEE Transactions on pattern analysis and machine intelligence 11.6 (1989): 567-585.

  2. He, Kaiming, et al. "Mask r-cnn." Proceedings of the IEEE international conference on computer vision. 2017.

  3. Li, XiaoQian, et al. "Learning to predict more accurate text instances for scene text detection." Neurocomputing 449 (2021): 455-463.

  4. Wang, Fangfang, et al. "Textray: Contour-based geometric modeling for arbitrary-shaped scene text detection." Proceedings of the 28th ACM International Conference on Multimedia. 2020.

  5. Wang, Wenhai, et al. "Shape robust text detection with progressive scale expansion network." Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2019.

  6. Baek, Youngmin, et al. "Character region awareness for text detection." Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2019.

  7. Liao, Minghui, et al. "Real-time scene text detection with differentiable binarization." Proceedings of the AAAI Conference on Artificial Intelligence. Vol. 34. No. 07. 2020.

  8. Zhou, Xinyu, et al. "East: an efficient and accurate scene text detector." Proceedings of the IEEE conference on Computer Vision and Pattern Recognition. 2017.

  9. Shi, Baoguang, Xiang Bai, and Cong Yao. "An end-to-end trainable neural network for image-based sequence recognition and its application to scene text recognition." IEEE transactions on pattern analysis and machine intelligence 39.11 (2016): 2298-2304.

  10. Jaderberg, Max, Karen Simonyan, and Andrew Zisserman. "Spatial transformer networks." Advances in neural information processing systems 28 (2015).

  11. Shi, Baoguang, et al. "Aster: An attentional scene text recognizer with flexible rectification." IEEE transactions on pattern analysis and machine intelligence 41.9 (2018): 2035-2048.

  12. Li, Hui, et al. "Show, attend and read: A simple and strong baseline for irregular text recognition." Proceedings of the AAAI Conference on Artificial Intelligence. Vol. 33. No. 01. 2019.

  13. Lu, Ning, et al. "Master: Multi-aspect non-local network for scene text recognition." Pattern Recognition 117 (2021): 107980.

  14. Lee, Junyeop, et al. "On recognizing texts of arbitrary shapes with 2D self-attention." Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition Workshops. 2020.

  15. Fang, Shancheng, et al. "Read like humans: autonomous, bidirectional and iterative language modeling for scene text recognition." Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2021.

  16. Wang, Yuxin, et al. "From two to one: A new scene text recognizer with visual language modeling network." Proceedings of the IEEE/CVF International Conference on Computer Vision. 2021.

  17. Liu, Yuliang, et al. "Abcnet: Real-time scene text spotting with adaptive bezier-curve network." proceedings of the IEEE/CVF conference on computer vision and pattern recognition. 2020.

  18. Liao, Minghui, et al. "Mask textspotter v3: Segmentation proposal network for robust scene text spotting." European Conference on Computer Vision. Springer, Cham, 2020.

  19. Liu, Xuebo, et al. "Fots: Fast oriented text spotting with a unified network." Proceedings of the IEEE conference on computer vision and pattern recognition. 2018.

  20.  
 

复杂环境下ocr与印章识别技术理解及研发趋势的更多相关文章

  1. AI时代的OCR识别技术浅析

    人工智能这个词可谓是耳熟能详,近几年人工智能热潮再次席卷而来,引起轰动的要数google的AlphaGo,相继打败了围棋界的韩国选手李世石以及世界冠军柯洁,见证了人工智能发展的里程碑式的变革,人工智能 ...

  2. 汽车VIN码,车架号,移动端,服务器端OCR识别 技术公司

    很多人在购买车辆的时候,只关注性能.外观.内饰等,其实真正的内行是首先看车辆的VIN码,也叫车架号码. VIN码(车架号码)是一辆车的唯一身份证明,一般在车辆的挡风玻璃处,有的在车辆防火墙上,或B柱铭 ...

  3. 汽车Vin码识别——可以嵌入到手机里的新OCR识别技术

              汽车Vin码识别(车架号识别),顾名思义,就是识别汽车的Vin码(车架号),汽车Vin码识别(车架号识别)利用的是OCR识别技术,支持视频流获取图像,自动触发识别,另外汽车Vin码 ...

  4. .Net环境下的缓存技术介绍 (转)

    .Net环境下的缓存技术介绍 (转) 摘要:介绍缓存的基本概念和常用的缓存技术,给出了各种技术的实现机制的简单介绍和适用范围说明,以及设计缓存方案应该考虑的问题(共17页) 1         概念 ...

  5. .Net环境下的缓存技术介绍

    .Net环境下的缓存技术介绍 摘要: 介绍缓存的基本概念和常用的缓存技术,给出了各种技术的实现机制的简单介绍和适用范围说明,以及设计缓存方案应该考虑的问题(共17页) 1         概念 1.1 ...

  6. 理解 Linux 网络栈(3):QEMU/KVM + VxLAN 环境下的 Segmentation Offloading 技术(发送端)

    本系列文章总结 Linux 网络栈,包括: (1)Linux 网络协议栈总结 (2)非虚拟化Linux环境中的网络分段卸载技术 GSO/TSO/UFO/LRO/GRO (3)QEMU/KVM + Vx ...

  7. 二维码识别:Halcon与C++中多字节环境下的字节编码格式设置和转换

    Halcon环境下可通过设置set_system(‘filename_encoding’, ‘utf8’),可以将二维码的识别结果解析出汉字. VS环境下则需要将utf8转换成gbk格式.代码如下: ...

  8. 移动端车牌识别——可以嵌入智能手机系统里的新OCR识别技术

    移动端车牌识别技术,是在OCR光学字符识别技术的基础上研发的用来识别汽车号牌特征信息的图像识别技术.在国内,该项技术由北京易泊时代携手清华大学成功地将"国家863计划"项目成果-- ...

  9. zz自动驾驶复杂环境下高精度定位技术

    今天为大家分享下,自动驾驶在复杂环境下的高精度定位技术. 定位/导航负责实时提供载体的运动信息,包括载体的:位置.速度.姿态.加速度.角速度等信息. 自动驾驶对定位系统的基本要求: 1. 高精度:达到 ...

  10. 【技术】JavaSE环境下JPA实体类自动注册

    在没有容器支持的环境下,JPA的实体类(Entity)一般要在persistence.xml中逐个注册,类似下面这样: <?xml version="1.0" encodin ...

随机推荐

  1. 如何正确遵守 Python 代码规范

    前言 无规矩不成方圆,代码亦是如此,本篇文章将会介绍一些自己做项目时遵守的较为常用的 Python 代码规范. 命名 大小写 模块名写法: module_name 包名写法: package_name ...

  2. Web安全Day1 - SQL注入、漏洞类型

    Web安全Day1 - SQL注入.漏洞类型 1. SQL注入 1.1 漏洞简介 1.2 漏洞原理 1.3 漏洞危害 2. SQL漏洞类型 2.1 区分数字和字符串 2.2 内联SQL注入 2.3 报 ...

  3. <四>理解空间配置器allocator, 优化STL 中的Vector

    .在上一节我们实现的 MyVector存在哪些问题? 问题1 现在有Student类 class Student{ public: Student(){cout<<"构造Stud ...

  4. Training: ASCII

    题目链接:http://www.wechall.net/challenge/training/encodings/ascii/index.php 让我们使用标准的美国信息交换编码格式解下面的ASCLL ...

  5. go get 报错:dial tcp 142.251.43.17:443: i/o timeout

    自动下载 go env -w GO111MODULE=on 设置环境为国内代理 go env -w GOPROXY=https://goproxy.cn,direct 注:go 版本需要支持 mod

  6. 一文带你了解 Spring 的@Enablexxx 注解

    layout: post categories: Java title: 一文带你了解 Spring 的@Enablexxx 注解 tagline: by 子悠 tags: - 子悠 前面的文章给大家 ...

  7. MySQL存储 pymysql模块

    目录 pymysql模块 基本使用 cursor=pymysql.cursors.DictCursor 获取数据 fetchall 移动光标 scroll 增删改二次确认 commit autocom ...

  8. 【openEuler系列】部署文件共享服务Samba

    个人名片: 对人间的热爱与歌颂,可抵岁月冗长 Github‍:念舒_C.ying CSDN主页️:念舒_C.ying 个人博客 :念舒_C.ying 目录 1 配置环境 2 配置软件安装源 3 安装文 ...

  9. pytest常用参数汇总

    1.  -s    表示输出调试信息,包括print打印信息 D:\demo>pytest -s ./pytest_1 ===================================== ...

  10. Ubuntu:Docker启动与停止

    安装完成Docker后,默认已经启动了docker服务,如需手动控制docker服务的启停,可执行如下命令 启动docker sudo service docker start 停止docker su ...