导读:本文将介绍达摩院 OCR 整体布局,以及ModelScope上开源的一些重点模型。分享内容主要分为几个部分:
- OCR基础科普
- 通用场景OCR
- 手写OCR
- 表格OCR
- OCR预训练技术
▌OCR基础科普
1.文字意义
文字在我们日常生活中随处可见,它是重要的信息载体,也是语言的载体。无论在衣食住行,还是工作学习中,都是可以看到文字。文字不仅可以让我们了解到图片的内容,还可以帮我们记录一些很重要的信息。因此,文字在我们的日常生活中扮演着很重要的角色。如果没有了文字,我们是很难理解世界的。
无论是一些具体的图像还是视频,例如下图中可以看到建筑物,如果把它前面石匾上的字遮住,就无法快速知道这是什么建筑或者什么类型的建筑物。再譬如西湖旁边拍的一个路牌,如果遮住文字区域,我们也很难知道箭头代表着哪个方向的路。最近看世界杯,如果碰到了不熟悉的队伍,若号牌被遮住,我们也不知道哪个球员进的球。博物馆里面的一个甲骨文的碑刻,若没有文字我们将很难理解历史。因此文字是理解世界、记录历史的一种重要符号。
2.OCR类型
OCR的子类比较多,这里我们将其粗略的分为三类:DAR、STR、HCR。
DAR是文档图像分析与识别,也是当下的一个热门研究方向。文档在我们日常生活中较为常见如A4打印的文档、票据等都属于这个范畴。文档里有比较丰富的一些图文的元素,除了文字外,还可以有表格、柱状图、饼状图、印章等。
STR代表场景文字检测与识别。它通常是指我们看到的自然场景当中的文字,例如街景,实拍的一些商品等。这个方向为无人驾驶、智慧交通,以及实拍商品检索等方面提供了帮助。
HCR即在线文字识别,如常见的手写的输入法,银行的手写的一些签名,都可以认为是 HCR 的范畴。这个领域在深度学习出来之前就已经有了一定的发展,而且识别精度较高,在实际的商用过程中较为常见。例如我们很早就会用搜狗输入法,这个技术在传统的方法方面已经能做到比较高的水平了,到了深度学习阶段精度有了进一步的提高。
3.泛OCR研究问题和典型的处理流程
OCR是贯穿图像文本到语义理解的一种 AI 技术。与ASR类似,其核心都是语义理解,但相比之下,OCR的难点在于要理解的语义是二维的。
下面罗列了一些典型的技术。
第一步需要对图片做预处理,比较典型方法有预分类、图像增强、图像校正等。
第二步是版面分析。版面分析对于文档图像文字识别来说是非常重要的,如文本段落、文本块,页眉、页脚、表格、标题等,这些都是版面分析中常会涉及到的元素。另外有一些很重要的区域,我们需要对它单独进行分析,这个也属于版面分析,比如手写签名、logo、水印等。
第三步是比较核心的内容,把版面分析得到的区块进行细致的数字化,主要包括文字检测、文字识别,另外还有公式、图表的检测和分类等。
最后是语义处理,这也是近两年的热门研究。这个模块以前通常称为OCR的后处理阶段,是离用户最近的地方。涉及结构化的理解、信息抽取、表格识别等。达摩院在这些方面都有团队在做一些研究,并陆续开放相关的模型。
4.ModelScope中OCR模型
达摩院在工业界和学术界上开源出了一系列的模型,这些模型贯穿了从基础的预训练模型,到核心处理模型,再到行业应用模型。下图中灰色部分表示即将在 ModelScope 上开源出来的模型。
在文字检测开源的模型有行粒度文字检测、单词粒度文字检测。文字识别模型已经开源了通用场景文字识别、印刷文字识别、手写文字识别。在结构理解方面目前开源了表格检测和还原。在行业应用方面,选取了一些比较典型的模型开放出来。如车牌检测分类识别、自然场景文字检测识别等。
达摩院OCR团队会在modelscope上全栈布局,并将最新的研究成果公开,最终能够促进行业落地。希望这些开源的模型,无论在学术界还是工业界,为大家提供帮助。
▌DIY通用场景OCR
接下来介绍如何利用在ModelScope上面公开的模型定制一些OCR pipeline。
首先介绍通用场景的pipeline。我们的通用场景主要包括三种场景,网络图、文档图、和街景图。利用这三大类数据集,训练了通用的文字检测和识别。
如何定制通用的 OCR 的pipeline。首先在model scope 找到通用行检测和行识别模型,下载对应的开源模型。另外现在平台可以兼容不同框架下的模型。接下来启动Notebook 编程界面(包括CPU 或GPU镜像)就可以进行 DIY 编程。
具体实现如下,首先加载了两个模型(检测模型和识别模型),并串联主函数。第二步是文字检测流程,即从检测的结果中提取出多边形区域结果输出。第三步文字识别流程,遍历多边形检测区域,对每一个区域进行剪裁,处理成文字行,调用文字行的识别模型。上述就是一个文字检测和识别的串联流程。
同时也可以通过在线体验(https://modelscope.cn/studios/damo/cv_ocr-text-spotting/summary),通过上传一张图片,选择相应场景,输出文字检测的区域及文字行识别结果。
对于上述内容,这里简单介绍一下相关的实现原理。对于文字识别网络构建,其中我们采用ConvTransformer 替换了以前的LSTM 特征提取模块,并且在实践中验证了这种模式的效果要优于之前的模型。整个模型流程大致为:先输入一张图片,进行一些视觉的 embedding提取,这里可以选用常见的一些骨干网络,如resNet等;对提取出的卷积 patch 进行一些处理,输入到 ConvTransformer模块,最后解码出来做CTC 对齐。(https://www.modelscope.cn/models/damo/cv_convnextTiny_ocr-recognition-general_damo/summary)