【云驻共创】华为云AI实战营:OCR

Mr红凯 发表于 2021/11/28 21:00:32 2021/11/28
【摘要】 我们将学习深度学习中的OCR(Optical Character Recognition)光学字符识别技术。OCR作为计算机视觉中较早使用深度学习技术的领域,有很多优秀的模型出现,所以通过此案例我们来学习深度学习下的OCR技术。普遍的深度学习下的OCR技术将文字识别过程分为:文本区域检测以及字符识别。本案例中介绍的模型CRNN就是一种字符识别模型,它将文字图片中的文字识别出来。

前言:

AI正在改变我们的生活,正在改变我们身边的各行各业,但是这条通往智能世界的路并不平坦,其中一个巨大鸿沟就是AI人才的稀缺。在中国庞大的IT从业群体,AI开发者缺口达百万级

AI将成为全民普及性的技能,所以今天华为云EI为大家带来《2020华为云AI实战营》免费课程,大幅降低AI学习门槛,帮助庞大的软件开发者群体快速掌握AI技能,把AI用起来。

课程主要内容包括图像分类、物体检测、图像分割、人脸识别、OCR、视频分析、自然语言处理和语音识别这八大热门AI领域的基础知识、经典数据集和经典算法的介绍,每章课程都是实战案例,模型训练、测试、评估全流程覆盖,配合代码讲解和课后作业,帮助您掌握八大热门AI领域的模型开发能力。


2020年华为云AI实战营 第五章 OCR

一、 OCR介绍

概述:

  OCR 是英文Optical Character Recognition的缩写,意思是光学字符识别,也可简单地称为文字识别,是文字自动输入的一种方法。它通过 扫描 和摄像等光学输入方式获取纸张上的文字图像信息,利用各种 模式 识别算法分析文字形态特征 可以将票据、报刊、书籍、文稿及其它印刷品转化为图像信息,再利用文字识别技术将图像信息转化为可以使用的计算机输入技术。可应用于银行票据、大量文字资料、档案卷宗、文案的录入和处理领域。适合于银行、税务等行业大量票据表格的自动扫描识别及长期存储。


OCR流程

对文本资料进行扫描,然后对图像文件进行分析处理,获取文字及版面信息的过程。影响识别准确率的技术瓶颈是文字检测和文本识别,而这两部分也是OCR技术的重中之重。

从整体上来说,OCR一般分为两个大步骤:图像处理以及文字识别。


机器学习

图像预处理:去噪、灰度化、图像增强等

文本检测:滑动窗口算法遍历整张图片

字符分类:划分单个字符,识别单字


• 深度学习方法

文字区域检测:将图片中出现的文本位置检测出来,可能存在不同语言,不同文字大小,不同角度倾斜,不同程度遮挡等情况。

CTPN-EAST-PixelLink

• CTPN

https://arxiv.org/abs/1609.03605 算法具体细节可以参考论文

CTPN网络结合了CNN与LSTM深度网络,通过固定宽度的anchor提取proposal,能有效的检测出复杂场景的横向分布的文字区域,不定长度文本识别效果较好,是目前使用广泛的文字检测算法。

OCR(光学字符识别)是CV一个重要的研究领域,OCR分成文本检测和文本识别两个步骤,其中文本准确检测的困难性又是OCR中最难的一环,CTPN则是文本检测中的一个里程碑的模型。

• EAST

https://arxiv.org/abs/1704.03155算法具体细节可以参考论文

EAST网络分为三部分:特征提取,特征融合和输出层,实现了端到端的文本区域检测,通过FCN网络生成图片文本参数,然后通过NMS筛选,得出检测结果。


• PixelLink

https://arxiv.org/abs/1801.01315算法具体细节可以参考论文

PixelLink算法采用了实例分割的方法完成文本区域检测,通过将统一实例中的像素链接,通过链接区域分割出文本实例,然后从分割结果中提取文本边界框,进行回归计算。



• 深度学习方法(CRNN+CTC)

字符识别算法:将文本区域的字符识别出来。通过深度神经网络对目标区域进行特征提取,然后对固定特征进行提取和比对,得出识别结果。

CRNN+CTC https://arxiv.org/abs/1507.05717算法具体细节可以参考论文

CRNN卷积循环神经网络,将特征提取,序列建模以及转录整合到统一的模型框架中。CRNN网络分为:卷积层、循环层和转录层三部分,CTC为无词典的转录方式,不会被局限在预定义词汇范围中。



OCR相关的开源资源

Tesseract:2006年开源的光学字符识别引擎,因为开源使用以及精准的检测效果,Tesseract的使用十分普遍。


MNIST手写数字数据集:MNIST数据集包括了大量的手写数字图片,包括6万张训练数据集和1万张测试数据集,是广泛使用的开源数据集之一,很多深度学习任务的入门练习数据集。


COCO-text:包含日常生活里复杂场景中的文字,数据集提供了边界框的位置,区分了打印文字和手写文字,清晰和模糊的文字,文字的内容等标注信息,数据集包括了超过173,589标注了的文本区域,超过63,686张图片。


CTW中文街景数据集数据集中包含了32285张图片,共计1018402个汉字,3850个汉字类别。标注信息包括了文字行的边界框文字单字的边界框是否遮挡,扭曲是打印文字或者手写文字等。


OCR面临的挑战

• 汉字字符识别:汉字字符的识别难度相比较英文字符要更大,字符的识别过程可以近似为分类,引文字符的分类数远小于汉字单字的数量,所以分类的难度更高。除此之外,多语言混合也是字符分类任务中的挑战,字符识别更加复杂。


• 手写字符识别:印刷字体遵循固定的规则,而手写字符的识别相比较就更加复杂,每个人的书写习同,识别难度大大增加。


小结:

这次学习中我们进行了传统机器学习下的OCR和深度学习的OCR对比,了解了OCR的实现步骤以及算法。



二、 CTPN算法完成文字位置检测

CTPN是在ECCV 2016提出的一种文字检测算法。CTPN结合CNN与LSTM深度网络,能有效的检测出复杂场景的横向分布的文字。


(1) CTPN第一步和通用的目标检测网络一样,先用一个backbone,这里用的是VGG16来提取空间特征,取VGG的conv5层的输出,输出维度为B × W × H × C(批次batchsize×宽×高×通道数)。这里要注意因为是第五层卷积输出,所以下采样倍数为16,也就是输出的feature map中的每个特征点对应原图16个像素。


(2) 接下来我们会对feature map做一个编码,在feature map上使用3×3的滑窗来提取空间特征(也就是卷积),经过滑窗后得到的feature map大小依旧是B × W × H × C,但这里的每一个像素点都融合了周围3 × 3的信息(在论文中作者使用caffe中的im2col实现的滑窗操作,将B × W × H × C大小的feature map转换为B × W × H × 9C,本文遵从tf版本)


(3) 接着将feature map reshape成(NH) × W × C输入双向LSTM(bi-direcional LSTM)提取每一行的序列特征。最后双向LSTM输出(NH) × W × 256,然后重新reshape回N × 256 × H × W


(4) 将输出经过一个卷积层(图中的FC),变成N × H × W × 512N × H × W × 512 最后会经过一个类似RPN的网络,分成三个预测支路:如上图所示,其中一个分支输出N × H × W × 2k,这里的k指的是每个像素对应k个anchor,这里的2K指的是对某一个anchor的预测;第二个分支输出N × H × W × 2k,这里的2K指的是2K个前景背景得分,记做。最后一个分支输出N × H × W × k,这里是K个side-refinement,预测某个anchor预测。


(6) 经过上面步骤,可以得到密密麻麻的text proposal,这里使用nms来过滤掉多余的文本框。


(7)假如理想的话(文本水平),会将上述得到的一个文本小框使用文本线构造方法合成一个完整文本行,如果还有些倾斜,会做一个矫正的操作。


动手实践

点击鼠标右键,在新标签页中打开此链接https://nbviewer.jupyter.orgl,打开新的网页再依次右键复制下面的实践案例地址、粘贴到新打开网页的搜索框中,按回车进行访问

CTPN算法完成文字位置检测实践案例地址: https://github.com/huaweicloud/ModelArts-Lab/blob/master/notebook/DL_ocr_ctpn_text_detection/CTPN.ipynb


华为云OCR服务调用指南

  第一步: 准备工作

    python + pycharm

  第二步: 申请服务

  第三步: 下载SDK

  第四步: 配置SDK

    OCRDemo.py

    /v1.0/ocr/generla-text

  第五步:运行案例


小结:

在本次学习中,我们了解了CTPN的结构原理,在ModelArts的开发环境中进行了CTPN算法的训练和推理,完成了文本区域检测任务。


三、CRNN算法完成字符识别

CRNN

•   卷积循环神经网络

•   卷积层 特征提取

•   循环层 深度双向LSTM

•   转录层 将RNN输出做softmax



完整的端到端OCR流程

  了解了文本区域以及字符识别后,下面详细讲解完整的端到端OCR流程:

   (1)准备一张含有文字的原图;

   (2)对原图进行文字位置的检测,检测结果可能是水平矩形框,也可能是倾斜矩形框;

   (3)从原图中把文字框对应的图片切下来,并旋转正,得到水平的文字块切片图;

   (4)对每个文字块切片图依次进行字符识别,每个切片图的识别结果汇总起来,就得到原图的文字识别结果。

   因此完整的端到端OCR流程是:输入原图 -> 文字检测 ->文字块切片 -> 字符识别 -> 识别结果汇总。

动手实践:

点击鼠标右键,在新标签页中打开此链接https://nbviewer.jupyter.orgl,打开新的网页再依次右键复制下面的实践案例地址、粘贴到新打开网页的搜索框中,按回车进行访问

CRNN算法完成字符识别实践案例地址: https://github.com/huaweicloud/ModelArts-Lab/blob/master/notebook/DL_ocr_crnn_sequence_recognition/CRNN.ipynb



总结:

我们将学习深度学习中的OCR(Optical Character Recognition)光学字符识别技术。OCR作为计算机视觉中较早使用深度学习技术的领域,有很多优秀的模型出现,所以通过此案例我们来学习深度学习下的OCR技术。普遍的深度学习下的OCR技术将文字识别过程分为:文本区域检测以及字符识别。本案例中介绍的模型CRNN就是一种字符识别模型,它将文字图片中的文字识别出来。

OCR的意思是文字识别,是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,然后用字符识别方法将形状翻译成计算机文字的过程,用自己的理解来说就是对文本资料进行扫描,然后对图像文件进行分析处理,获取文字及版面信息的过程。其发展时间较长,企业使用普遍。OCR识别文字前,要对原始图片进行预处理,以便后续的特征提取和学习。这个过程通常包含:灰度化、二值化、降噪、倾斜矫正、文字切分等子步骤。



注:本文整理自华为云社区内容共创活动之华为云AI实战营: O CR

查看活动详情:https://bbs.huaweicloud.com/blogs/308924


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。