浅析点对点(End-to-End)的场景文字识别(图片文字)
一、背景
随着智能手机的广泛普及和移动互联网的迅速发展,通过手机等移动终端的摄像头获取、检索和分享资讯已经逐步成为一种生活方式。基于摄像头的 (Camera-based)的应用更加强调对拍摄场景的理解。通常,在文字和其他物体并存的场景,用户往往首先更关注场景中的文字信息,因而如何能够正 确识别场景中的文字,对用户拍摄意图会有更深入的理解。一般意义上,基于图像的文字识别包括基于扫描文字的光学字符识别(Optical Character Recognition, OCR) 和广泛用于网站注册验证的CAPTCHA (Completely Automated Public Turing Test to Tell Computers and Humans Apart,全自动区分计算机和人类的图灵测试)。相比较而言,基于扫描仪的OCR最简单,CAPTCHA最难,场景文字识别则介于这两者之间,如图1所示[1]。
图1基于图像的文字识别
场景文字与扫描文字的最大区别在于其背景往往比较复杂,而且对设备(如移动设备或计算机)来说,文字位置是不确定的。其次,光照对文字的影响也是非常大的。最后相比传统OCR处理的情况,很多场景文字更加多样化,具有较大的内类变化。
二、两种识别方案
一种自然而然的想法,是首先检测并定位到文字区域(文字检测),然后再将检测到的文字块送到现有的OCR中进行识别(文字识别),但是上述场景文字存在的难题均对这种方案形成了挑战。从本质上讲,这种方案将文字检测和识别完全割裂开,严重依赖文字检测和分割性能。
近年来,一种截然不同的点对点文字定位和识别系统逐渐开始引起学术界和工业界的关注。该系统从物体识别角度出发,同时进行文字检测和识别,在场景文字识别中取得了较好的效果。本文就以英文识别为例,简要介绍一下点对点的文字检测与识别系统。
三、点对点场景文字识别系统
通常点对点系统通常包括:a)字符检测;b)同时单词检测和识别。
1.字符检测
字符识别主要是判断某个图像块(image patch)是否是字符。图像块的选取既可以用滑动窗口(Sliding Window)进行多尺度扫描,也可以通过连通域分析(Connected Component Analysis, CCA)得到。基于滑动窗口的方法,最经典的应用来自于人脸检测,但其最大的问题在于:一方面会产生很多的候选区域,另一方面容易产生字符间和字符内的混 淆。如图2所示[2]。在两个O之间的滑动窗口容易被误认成为X,而框了一半的B容易被误认为E.
图2字符间和字符内混淆
而基于CCA的方法虽然复杂度较低,但很容易受到背景的干扰,且对模糊图像无能为力。如文献[3]就采用基于极性区域的连通域来形成文字候选区。
通常对图像块的特征描述往往采用的Histograms of Oriented Gradients (HOG) ,分类器可以使用支持向量机(Support Vector Machine, SVM),近邻(Nearest Neighbor, NN), Adaboost等。
2.单词同时检测和识别
由于字符检测一般利用的是bottom-up的信息,故而检测得到字符候选区域包含一定的false positive。为此,单词同时检测和识别模块,往往需要借助top-down信息(如词典信息)[2,3,4]。
在文献[2],针对字符检测结果,采用了条件随机场(Conditional Random Field, CRF)来模拟字符识别的置信度,字符间的关系(位置和语义上)。CRF的能量函数定义如下式所示。
其中第一项表达了单个候选区的置信度,而第二项则描述了两个候选区之间的关系,包括了几何位置上的重叠关系和在词典(Lexicon)中两个字母出现的概率情况。
图3 单词同时检测和识别
通过CRF,图3中的单词就可以准确地被识别成door,而非doxr。除了CRF,Wang等[4]还借用了Pictorial Structures等来完成单词的检测和识别。
四、方案效果对比
为了对比第二节中两种方案,表1给出了上述提及的三种点对点系统和传统OCR系统(商用软件ABBYY, www.abbyy.com)识别效果对比。使用的两个数据集为街景文字文字数据库(Street View Text)[1]和ICDAR数据库(http://algoval.essex.ac.uk/icdar/RobustWord.html),如图4所示。
图4 SVT(左)和ICDAR(右)数据库样例
显然,点对点的系统均优于传统OCR的识别。
五、一点思考
目前点对点的系统大部分还是针对英文的识别,主要是因为英文的类别相对来说还是比较小的(62类,26个大小写英文字母和10个数字),而对于类别数目较大的中文一直是我们思考的问题。
参考文献
[1]. K. Wang and S. Belongie. Word spotting in the wild. In Proc. ECCV, 2010.
[2]. A. Mishra and K. Alahari. Top-Down and Bottom-Up Cues for Scene Text Recognition. In Proc. CVPR, 2012.
[3]. L. Neumann and J. Matas. Real-Time Scene Location and Recognition. In Proc. CVPR, 2012.
[4]. K. Wang, B. Babenko, and S. Belongie. End-to-end scene text recognition. In Proc. ICCV, 2011.
浅析点对点(End-to-End)的场景文字识别(图片文字)的更多相关文章
- OCR场景文本识别:文字检测+文字识别
一. 应用背景 OCR(Optical Character Recognition)文字识别技术的应用领域主要包括:证件识别.车牌识别.智慧医疗.pdf文档转换为Word.拍照识别.截图识别.网络图片 ...
- python识别图片文字
因为学校要求要刷一门叫<包装世界>的网课,而课程里有200多道选择题,而且只能在手机完成,网页版无法做题,而看视频是不可能看视频的,这辈子都不可能看...所以写了几行代码来进行百度搜答案. ...
- python3 识别图片文字
1.下载相关组件 安装:pip install Pillow 或下载:https://pypi.org/project/Pillow/5.2.0/ ,https://pypi.org/project ...
- python 识别图片文字
今天群里有兄弟问如何把图片的文字给识别出来 对于python来说这不是小菜一碟吗,于是乎让pupilheart狠狠的吹了一波(哈哈,竟然没懂),下面将整个实现过程给大家实现下: 方法一:自己搞定ORC ...
- C#调用OCR组件识别图片文字
图片识别的技术到几天已经很成熟了,只是相关的资料很少,为了方便在此汇总一下(C#实现),方便需要的朋友查阅,也给自己做个记号. 图片识别的用途:很多人用它去破解网站的验证码,用于达到自动刷票或者是批量 ...
- OCR文字识别笔记总结
OCR的全称是Optical Character Recognition,光学字符识别技术.目前应用于各个领域方向,甚至这些应用就在我们的身边,比如身份证的识别,交通路牌的识别,车牌的自动识别等等.本 ...
- C# 10分钟完成百度图片提取文字(文字识别)——入门篇
现在图片文字识别已经很成熟了,比如qq长按图片,点击图片识别就可以识别图片的文字,将不认识的.文字数量大的.或者不能赋值的值进行二次可复制功能. 我们现在就基于百度Ai开放平台进行个人文字识别,dem ...
- 图片文字识别aip的一个小Demo
目前接触到了一个新的内容,识别图片上的文字,以下是这个Demo 首先需要在需要在百度云-管理中心创建应用 地址:http://console.bce.baidu.com/ai/#/ai/ocr/app ...
- 百度Ocr文字识别
简述 最近开发一个项目需要用到Ocr文字识别技术来识别手写文字,在评估过程中体验了百度的文字识别和腾讯的文字识别.查找官方开发文档,发现它们都有印刷体和手写体两种符合项目需求的识别模式,但是腾讯的手写 ...
随机推荐
- Android 代码混淆
什么是代码混淆 Java 是一种跨平台的.解释型语言,Java 源代码编译成中间”字节码”存储于 class 文件中.由于跨平台的需要,Java 字节码中包括了很多源代码信息,如变量名.方法名,并且通 ...
- Android中Drawable分类汇总(上)
Android把可绘制的对象抽象为Drawable,不同的图形图像资源就代表着不同的drawable类型.Android FrameWork提供了一些具体的Drawable实现,通常在代码中都不会直接 ...
- Python 获取时间戳
Python 获取时间通过 time 模块 如下代码,是通过获取当前的时间,按照格式输出 Python默认获取当前的时间返回的都是时间的元组,下面是元组的,字符串时间的一个转换输出 # -*- cod ...
- HDU 4041 Eliminate Witches! (模拟题 ACM ICPC 2011亚洲北京赛区网络赛)
HDU 4041 Eliminate Witches! (模拟题 ACM ICPC 2011 亚洲北京赛区网络赛题目) Eliminate Witches! Time Limit: 2000/1000 ...
- POJ 2635 The Embarrassed Cryptographer 高精度
题目地址: http://poj.org/problem?id=2635 题意:给出一个n和L,一直n一定可以分解成两个素数相乘. 让你判断,如果这两个素数都大于等于L,则输出GOOD,否则输出最小的 ...
- Ruby on Rails 實戰聖經阅读(三)
由于是1.8.x:圣经的1.9.3差太多,所以另外按1.8.X来创建hello world 第一個Hello World!! 1. 创建项目rails -d mysql first 2.创建控制器 ...
- sharepoint具体错误提示
sharepoint页面发生错误时,默认不会显示具体错误信息,只显示“未知错误”提示.需要修改配置站点的webconfig文件,才能显示出具体错误提示.具体方法如下: 将safeMode中的CallS ...
- python for else
http://blog.sina.com.cn/s/blog_5357c0af01013mwn.html raw_input() 与 input() __ Python http://www.cnbl ...
- qt下的跨目录多工程编译
原地址:http://blog.csdn.net/fjb2080/article/details/7386292 转自:http://blog.csdn.net/high_high/article/d ...
- xxx==null和xxx.equals(null)的区别
如果xxx不是null的话,xxx==null将返回false,如果xxx是null的话,xxx将返回ture 而对xxx.equals(null)而言,他将永远返回false,因为如果xxx不是nu ...