OCR学习笔记

1 什么是OCR?

OCR (Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程;即,针对印刷体字符,采用光学的方式将纸质文档中的文字转换成为黑白点阵的图像文件,并通过识别软件将图像中的文字转换成文本格式,供文字处理软件进一步编辑加工的技术。如何除错或利用辅助信息提高识别正确率,是OCR最重要的课题,ICR(Intelligent Character Recognition)的名词也因此而产生。衡量一个OCR系统性能好坏的主要指标有:拒识率、误识率、识别速度、用户界面的友好性,产品的稳定性,易用性及可行性等。

2 OCR的软件:

  1. ABBYY的Finereader
  2. tesseract

    Tesseract是Ray Smith于1985到1995年间在惠普布里斯托实验室开发的一个OCR引擎,曾经在1995 UNLV精确度测试中名列前茅。但1996年后基本停止了开发。2006年,Google邀请Smith加盟,重启该项目。目前项目的许可证是Apache 2.0。该项目目前支持Windows、Linux和Mac OS等主流平台。但作为一个引擎,它只提供命令行工具。

    执行识别图像的命令格式为: 
    tesseract    [-l lang] [configfile [[+|-]varfile]...] 
    其中tesseract是命令;是待识别的图片,例如图片 eurotext.tif;是输出文本文件的名称,默认生成的是你所给定的输出文件名称,加上.txt扩展名;[-l lang]可选的,指定识别图像中的语言。


  3. 百度OCR技术:
  4. 清华紫光OCR
    尚书七号
    Leadtools Ocr
    汉王
    赛酷OCR
    Expervision,Inc OCR
    丹青
  5. 微软的Azure

    微软的Azure也已经出来很多年了,重点是提供API!官网上有具体的调制配置参数。中国区是由世纪互联运营的。大家可以上官网(不是中国区的)上传图片体验一下微软的ocr识别。然后是语种,微软暂时只支持22种语言(如下)。看官网应该是免费提供API的。

    <img src="https://pic3.zhimg.com/50/v2-b887a892b9b86e9082d2f87306ffdc59_hd.jpg" data-rawwidth="576" data-rawheight="934" class="origin_image zh-lightbox-thumb" width="576" data-original="https://pic3.zhimg.com/v2-b887a892b9b86e9082d2f87306ffdc59_r.jpg"> OCR学习笔记_第1张图片
3  OCR的软件:算法

文字检测算法近几年发展迅速,可以分为水平文字检测(四个自由度,类似物体检测)和倾斜文字检测(文字框是不规则四边形,八个自由度),

水平文字检测个人认为比较好的算法是2016 ECCV乔宇老师团队的CTPN,

倾斜文字检测个人比较喜欢的方法是2017 CVPR的EAST和Seglink,感兴趣可以看论文继续了解。

文字识别近两年没有太大进展,有两种方法,一种是CNN+RNN+CTC,白翔老师团队的CRNN写的比较清楚,还有一种是CNN+RNN基于Attention的方法。

最近比较火的方向是文字检测和识别放到一个网络里joint train,沈春华老师团队2017 ICCV的Towards End-to-end Text Spotting with Convolutional Recurrent Neural Networks这篇文章已经在水平文字上把检测识别end to end做的比较work.


4 OCR基本知识:


General OCR一般包含两步: 1. detection-->找到包含文字的区域(proposal); 2. classification-->识别区域中的文字。

detection models, 近两年比较热门的object detection model:

faster-rcnn(arxiv.org/pdf/1506.0149) 和 yolo(pjreddie.com/media/file), 两个模型都是基于CNN给出proposed regions 同时对object region进行分类。 其中yolo比faster-rcnn的速度更快,但是在accuracy上有些损失。

classification models:

比较著名的是Ian goodfellow在13年提出的multi-digit number classification([1312.6082] Multi-digit Number Recognition from Street View Imagery using Deep Convolutional Neural Networks), 同样也是基于deep CNN. 该方法的不足在于要事先选定可预测的sequence的最大长度,较适用于门牌号码或者车牌号码(少量字符, 且每个字符之间可以看作是独立); 

另一类比较常用的方法是RNN/LSTM/GRU + CTC, 方法最早由Alex Graves在06年提出应用于语音识别。这个方法的好处在于可以产生任意长度的文字,并且模型的性质决定了它有能力学到文字于文字之间的联系(temporal relations/dependencies)。不足之处在于sequential natural决定了它的计算效率没有CNN高,并且还有潜在的gradients exploding/vanishing的问题。

以上说的这两类模型都不需要对文字预先分割(end-to-end)。

另一类不需要对文字预先分割的方法就是attention-mechanism,attention可以分为hard attention和soft attention. 其中hard attention能够直接给出hard location,通常是bounding box的位置 ( arxiv.org/pdf/1412.7755 ), 想法直观,缺点是不能直接暴力bp。soft attention通常是rnn/lstm/gru encoder-decoder model ( arxiv.org/abs/1603.0310 ), 可以暴力bp。还有一种比较特别的gradient-based attention( ics.uci.edu/~yyang8/res ) 也挺有意思。


你可能感兴趣的:(云计算/大数据/并行计算)