光学字符识别(optical character recognition, OCR)
/ OP-tih-kul KAIR-ik-ter rek-ug-NISH-un (O-C-R) /
光学字符识别把文字的图片变成真正的文本——也就是计算机能搜索、复制和编辑的那种文本。在摄像头看来,一页印刷品不过是一片深浅相间的图案;OCR读出这片图案,把字母和单词还原出来。正是它,让你拍下一张收据、数字就变得可编辑,拍下一份外文菜单就能翻译,或是把一本扫描的百年旧书变得每个字都可搜索。它在墨水的世界与字符的世界之间,架起一座桥。
一个典型的系统分几个阶段工作:找出含有文字的区域,把它们摆正、清理干净,切分成行和字符,把每个形状识别成一个字母或符号,而且上层往往还有一个语言模型来纠正可能的错误(是「the」而不是「tlie」)。干净、印刷、高对比度的文字——一份打字文档、一块车牌——如今已被解决得极好,常常近乎完美。正是这份可靠,让OCR悄无声息地运行在翻译应用、文档扫描、邮件分拣,以及朗读文字的无障碍工具之中。
随着文字变得越来越乱,难度陡然攀升。手写体——尤其是连笔或潦草的——比印刷体难得多。瓶子上弯曲的文字、褪色或污损的文档、密集的表格、罕见的字体、昏暗的光线和运动模糊,都会让错误激增。而且识别出字符只完成了一半的仗:在一页复杂的杂志或多栏的表格上重建版面与阅读顺序,本身就是个难题。那些拥有数千个字符、或词与词之间没有空格的语言,又添了一重挑战。请把任何OCR的输出都当作一份「有待核对的草稿」,而非「保证无误的誊本」。
拍下一张印刷的名片,OCR把姓名、电话、邮箱作为可编辑的文本返回,可以直接存成联系人——通常完美无瑕。而拍下一张手写的购物清单,它也许能把「milk」读对,却把「eggs」认成「e995」,还漏掉一个跑到撕裂边缘外的词。
对干净的印刷体近乎完美,对手写和杂乱则容易出错——这道差距就是全部的故事。
对干净印刷文本的OCR大体上是个已解决的问题;而对手写、弯曲或损坏文字以及复杂版面的OCR,则不是。识别字符,与重建阅读顺序也是两码事——一页字字读对的多栏页面,仍可能输出得乱七八糟。