分享到微博 分享到人人 分享到LinkedIn 分享到Email
快速找到手写笔记?你要的就是它!
微软亚洲研究院
2016年4月5日

如今的现代社会,电脑键盘和输入法的组合快速取代了手写环境,大家早已习惯了以键盘为笔、屏幕为纸,在电脑上挥洒创作的生活。但电脑并不是随处可得,在大多数情况下我们仍需要使用手写笔记的方式随时记录下我们的灵感。其实,无论是用电脑记录还是手写笔记都各有优劣,并在很长一段时间内都会是互补的关系。

当然,电子化何时能够取代纸笔不是我们今天需要讨论的问题,我们今天讨论的是,如何用软硬件相结合的方式,优化人们的工作体验。很显然,如果你是纸质书写爱好者的话,你必然会发现当你想要检索自己曾经的手写笔记,或快速找到某一天偶然写在纸上的灵感是十分困难的,这种时候,光靠人类的记忆力绝对不够。

那么,有没有一种方式能够让人们快速检索出他们的手写笔记呢?对于这个问题,微软亚洲研究院的研究员和工程师们早就替你想好了,并已将这项手写笔记检索功能成功置入OneNote啦!现在打开最新版本的OneNote就能体验!(目前该项技术仅支持英文)

这项功能的使用方法非常简单。当你结束一场会议或是一堂课之后,你的笔记本想必记满了与之相关的笔记,这时候你只需要将手机摄像头对准笔记本或白板等轻轻一拍并上传至OneNote,下次你再想寻找与这门课或者会议相关的内容时,只需在OneNote的搜索框内输入关键词,系统就会快速、自动地检索出带有相关信息的笔记内容。当然,如果你的手写笔记连你自己都完全不认识的话,那该技术能识别的正确率大概和你一样吧。╮(╯﹏╰)╭

你知道的和你不知道的OCR

这项看起来神奇又简单的功能背后的核心技术便是手写识别OCR(Handwriting OCR),当然你们可能会说了:“慢着,你先告诉我OCR是什么!”

OCR的英文全称是Optical Character Recognition,即光学字符识别,其本质就是将图像中的文字转化为电脑能够处理的信息。这个技术早在20世纪50年代的时候就开始使用了,IBM当时用OCR技术实现了各类印刷文档的数字化,当时OCR设备庞大且复杂,并且对扫描印刷文档的背景和字体等要求极高。到了80年代,平板扫描仪的诞生则让OCR技术进入了商用阶段,虽然硬件设备变得轻便灵巧了,但对图片的成像质量要求仍然很高。如上所说,OCR将图像中的文字转化为电脑可处理的信息,而图像中的文字除了印刷字之外,还可能有手写字,这就需要手写字识别技术。手写字识别技术已被广泛用于邮件分拣、支票识别、手写表格数字化等领域,但图像抓取主要以专业的扫描设备为主。

进入二十一世纪,在带有摄像头的智能手机诞生之后,人们的生活方式发生了很大改变。如今,大家已经习惯了用手机拍照的方式记录信息,因而产生 的图片文件数量剧增。而这一类图片中出现的文字多为自然场景下出现的文字,对于此类文字的识别也大大难于扫描仪时代行列规整和背景干净的文字信息。此外, 由于云计算及无线网络的发展,前端用摄像头进行捕捉,后端利用云计算对图片进行处理,两者结合,让OCR应用充满了想象空间。

Microsoft Translator的图片文字翻译功能

如今,在微软的很多产品和服务中你都能看到OCR的影子。微软推出的手机应用Microsoft Translator就能利用该项技术实时翻译出图片中的文字,无论是看不懂的外文菜单还是复杂的外文使用说明书,只需用手机一照,就能看到对应的翻译。而Office Lens应用更是将使用场景与人们的工作密切结合,它能识别出你拍下来的照片中的印刷文字,并保存到OneNote或Word中,便于编辑、整理和搜索。

从印刷字体到手写字体

从Office Lens的印刷文字识别到如今的手写文字识别,这两者的技术差别可以说很大,也可以说是很小。

当一张图片上传到后台,系统首先检测这张图片里是否有文字,即文本检测(text detection)。但用手机拍摄下来的图片具有极大的多样性和明显的不确定性。例如,图像的非文字背景千变万化,文字中包含多种语言, 每种语言含有多种字母,每个字母又可以有不同的大小、字体、颜色、亮度、对比度等;文字通常以文本行的形式存在,但文本行可能有不同的排列和对齐方式,横 向、竖向、弯曲都有可能;因拍摄图像的随意性,图像中的文字区域还可能会产生变形(透视和仿射变换)、残缺、模糊断裂等现象; 此外,手写文字相较于印刷文字书写风格更为随意,进一步增大了文字检测的难度。因此,文本检测至今仍是一个开放性问题,值得研究人员去不断探讨来提高它的准确性。

在微软亚洲研究院之前的文章中已经介绍过自然场景中印刷文本检测的解决方案。在该方案中,我们先采用颜色增强对比极值区域(color-enhanced contrasting extremal region)快速提取候选文字连通区域,再利用一套基于浅层神经网络的文字/非文字分类算法快速有效地将候选文字连通区域中的非文字区域滤除,最终得到一条一条的文本行。该方案同样可以用来解决自然场景图像中手写文字检测的问题。

事实上,我们只是在之前分类器的训练数据中添加了少 量的手写训练样本,并重新训练分类器,就使得我们的文字检测技术可以同时处理印刷字体和手写字体。但是在文字识别阶段,为了确保系统的效率及性能,我们还 是暂时选择将印刷字体和手写字体分开处理,并提出了一套简单有效的基于神经网络的印刷体/手写体分类算法来实现这个目的。

对被分类器分为印刷字体的文本行,我们直接采用微软传统的印刷字体识别引擎进行识别,而剩余被分为手写字体的文本行,则采用我们新开发的手写文字识别引擎进行识别。不过,在对提取出的手写字体文本行进行识别之前,我们还需要采用手写文档处理领域经典的文本行预处理技术来对文本行进行规整,从而降低文本行识别的难度。我们采用的文本行规整算法主要包含四个步骤:

1. 将非水平方向的文本行规整到水平方向;

2. 将倾斜的字体“掰正”;

3. 依据英文手写常用的四线格标准对文本行的上中下三部分进行相应的尺度规整;

4. 将每条文本行的高度都规整到固定高度。

被规整之后的文本行看起来就像将正体英文字母工整地写在水平等高的英文手写四线格上,当然此处四线格并不会被画出来。每一条这样的文本行都可以被抽象为左右方向的序列信号,因此可以利用滑动窗口法从文本行中提取出相应的特征序列。滑动窗口以相同的步长从文本行左侧滑到右侧,划过的每个位置都可以利用图像处理技术提取出相应的特征向量。

四线格效果图示意

针对上述序列信号,我们采用双向长短期记忆(Deep Bidirectional Long Short-Term Memory,简称为DBLSTM)递归神经网络(Recurrent Neural Network,简称为RNN)对其建模。该模型可以利用上下文信息有效预测序列信号的每个时刻被分为某英文字母或某标点符号的概率,因此被称为字母模型(character model)。我们选择用CTC(Connectionist Temporal Classification)训练方法训练DBLSTM模型。

为了处理大规模训练数据并加快训练速度,我们发明了一套极为有效的利用多机多GPU卡训练深度学习模型的算法, 让训练速度在增加GPU的条件下几乎实现了线性增长,并保证了训练模型的性能。此外,利用CTC训练后的DBLSTM模型输出结果的特性,我们可以利用简单的规则过滤掉前面文本检测算法误检的非文字文本行。我们用基于WFST (Weighted Finite State Transducer)的解码器识别文本行,且采用了统计语言模型提升识别率。此外,利用CTC训练后DBLSTM模型的特性,我们采用自适应的方法动态调整解码器剪枝阈值,大大加速了识别速度。

从点到面,将想法变为产品

通过以上步骤,一张图片中的文字便被简单高效地识别了出来。对于研究人员来说,如果只是做好上述某一技术或模块已很难,要将这些技术整合成一 个好的产品解决方案则要求更高。微软亚洲研究院首席研究员霍强博士介绍道,“想做好这一套手写识别的产品解决方案,既需要有文本检测、识别以及大数据机器 学习的研究人员,还需要有代码能力极强的工程师。微软亚洲研究院正好提供了这样一个平台,让每个人都能发挥所长,相互合作,做了不起的事情。”凭借着研究员和工程师们在各自领域的专业知识和高效合作,手写识别从想法到成功转化至产品的效率非常之高。谈及这一技术未来的走向,霍强博士信心满满,“我们很清楚第一版方案的不足之处,正在全力研发第二版产品解决方案,完成后将大大改善用户体验。”

在人工智能真正出现之前,我们不妨讨论一下计算机都能帮助我们做些什么。计算机天生擅长存储,计算以及一些简单的推理,而人类更擅长的是发明和创造。这就像手写笔记一样,你可以在你的笔记本上进行天马行空的创作和发挥,而之后就把这一切交给计算机,让它帮你记忆、存储,以及在你需要的时候可以轻松地检索出来。这也许就是我们目前最需要的增强智能——让计算机和人类做各自擅长的事情,人们因此可以更好地享受生活。