OCR 概述

OCR技术作为机器视觉领域一个非常重要的研究反向,涉及的应用领域多种多样。现今,各应用领域已经出现了非常多的产品,包括卡片证件类识别、票据类识别、文字信息结构化视频类识别、自然场景下的文字识别等。本文主要从数据、算法两个方面概述目前OCR较为成熟的解决方案。

数据

深度学习算法是非常依赖于数据数量与质量的,OCR也不例外。一般OCR任务中不仅需要识别具体的文字内容,还要识别文字具体所在位置,甚至结构化组织识别信息,所以图像数据中的监督信息就包括文字位置坐标和相应文本内容。标注数据的来源一般分为两类:人工标注和程序(模型)自动生成。

人工标注

一般人工标注的成本比较大,首先需要搭建合适的标注平台,好在github上有几个开源的关于目标检测任务的标注平台供选择(参见 十个最常用深度学习图像/视频数据标注工具 或者 深度学习图像标注工具汇总)。其次,构建专业的标注团队,尤其是涉及垂直领域的任务。另外还要设计数据质量监控机制,如标注数据交叉验证等。

数据生成

数据自动生成的数据量大,成本小,唯一需要担心的就是生成的数据分布与真实数据分布有显著差异。针对文本检测和文本识别,目前的数据生成方案基本都是模拟真实背景,同时平滑地嵌入文本内容。

  • Synthetic Data for Text Localisation in Natural Images 提出了一种文字检测数据生成的方案。通过计算背景图片的语义与深度信息,筛选出合适的候选区域,之后随即选择文字字体、颜色、大小、特效,将其放置到对应的区域中,并通过矩阵变化得到最后含有文本的图像。源码

  • 识别数据的生成往往都极度依赖业务场景,主要分为三个步骤:

    1. 根据具体场景收集目标字体,如楷体、宋体、雅黑等;
    2. 搜集相关的背景图片、文本语料;
    3. 随机选取以及组合各种图像増广技巧(透视变换、对比度、随机噪声),生成比较广泛的、尽量贴合实际场景的数据,以缩小生成数据与实际场景数据之间的差异。

那么标注或生成多少数据量合适呢?当然,高质量数据肯定是越多越好的,如果非要给一个下限,一般文本检测任务图片数据量在万张级别,文本识别任务在百万张级别。

算法

整体OCR识别算法一般是分为两个部分:文本检测和文本识别。

文本检测

文本检测与目标检测算法的发展是息息相关的。目前主流的目标检测算法分为两类:

  • Two-stage方法。该方法包含一个预处理阶段,负责生成候选区域并提取对应的图像特征,然后在第二阶段进行分类与精确位置修正。代表算法包括R-CNN、Fast R-CNN、Faster R-CNN、RFCN、 Mask R-CNN等。
  • One-stage方案。该方法简化了Two-stage方法,略过了生成候选区域阶段,直接预测目标类别与位置。代表算法包括YOLO、SSD、YOLO9000、YOLOv3等。

通用的目标检测算法对文本一般检测都不精准,原因主要包括大多数文本没有闭合边缘、文本行方向任意、文本排列不规则等,需要结合文本的结构与分布特点优化检测模块,其中包括CTPNSegLinkRotation RPNTextboxes等。

文本识别

文本识别模型一般分为特征提取器(编码器)和解码器。

  • 特征提取器通常由CNN和RNN组成,一种典型的结构就是利用基础CNN分类网络结构(VGG16、ResNet、DenseNet)提取图像特征,利用双向RNN来获取序列特征,有时也会引入Attention机制。
  • 变长序列解码器主要包括CTC(Connectionist Temporal Classification)、EP(Edit Probability)和直接RNN解码。还有一种利用seq2seq结构的解码方式,一般使用不多。

总结

目前针对不同识别场景的都有相应的算法调优方案,模型拟合能力方面已经有了长足进步。相较于算法,如何获取高质量数据很大程度上影响着整个OCR项目成败,打通整个数据链路会是深度学习项目的关键,也会成为企业的核心竞争力。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容