如何用浏览器 OCR 从扫描 PDF 中提取可编辑文本
从扫描版 PDF 或页面照片中提取文字,得到可以编辑的纯文本,识别过程就在您自己的浏览器中运行。
它最先尝试的其实不是 OCR
很多看起来像扫描件的 PDF 其实并不是扫描件。从 Word 导出的文件,或者已经被其他软件处理过的扫描件,图片下面都藏着一层看不见的文字层。读取这层文字,得到的就是构成该文档的确切字符,完全没有识别错误,而且只需要大约一秒钟。
所以如果您交给它一份语言仍设为英语的 PDF,工具会先读取文字层。如果那里能找到足够多的文字,它会立刻返回结果,根本不会启动 OCR 引擎。您会看到它几乎瞬间完成,这就是判断依据。换成任何其他语言,它都会跳过这条捷径,直接进入识别流程,所以如果您手上是英文 PDF,不要改动语言设置,让它去尝试这条快速路径。
真正的扫描件是怎么被识别的
如果找不到文字,每一页都会以每英寸 144 像素的分辨率渲染成图片,交给在您浏览器中以 WebAssembly 运行的 Tesseract 处理。图片会先经过清理:工具会测量页面上最亮和最暗的像素,拉伸两者之间的对比度,并把每个像素强制变成黑色或白色,这正是识别引擎需要看到的效果。
如果第一遍几乎识别不出什么内容,系统会自动再运行两遍。第二遍会将图片反色,这能挽救深色背景上的白色文字,类似深色模式应用截图的效果。第三遍则直接使用未经处理的原始图片,依据是清理步骤本身才是问题所在。哪一遍识别出的文字最多,就采用哪一遍的结果。这些您都无法选择,这也是为什么有些看起来毫无希望的页面,有时在第三次尝试后反而能读出来。
您能得到什么
结果会显示在页面上的一个文本框里,每页之间有一条标记线,方便您分辨每页在哪里结束。您可以在那里复制文字,或者将其下载为 .txt 文件。输出内容仅此而已。这个工具不会给您一份在原扫描件上叠加了隐藏文字层的可搜索 PDF,也不会生成 Word 文件,所以如果您需要的是一份可以搜索的 PDF,这个工具能给您文字,但给不了那种格式。
版式同样保不住。文字会以一行行的形式出现。双栏页面往往会出现两栏内容交错混在一起的情况,表格则会失去单元格,变成一串数字。凡是原本结构比较复杂的内容,都要预留时间重新整理结构。
哪些因素会影响识别准确度
识别质量几乎完全取决于您提供的图片:
- 分辨率过低的原始扫描件。以 150 DPI 扫描的页面,笔画会又细又断,再怎么处理也无法把缺失的像素重新造出来。
- 光照不均。对比度拉伸是把整页作为一个整体来测量,而不是逐个区域测量,所以如果照片一侧有阴影,那一侧可能会完全变成一片纯黑。
- 倾斜。哪怕只是手机拿斜了造成的几度旋转,也会影响准确度,而这里没有任何功能会替您把页面摆正。开始之前,请先把它转正。
- 字号过小、行距过紧,以及装饰性或手写体字体。脚注和密密麻麻的法律小字,向来是任何页面里最糟糕的部分。
- 手写字迹。Tesseract 是基于印刷体字符训练的,遇到连笔字迹时会一本正经地输出一堆没有意义的内容。
如果扫描件是您自己制作的,最有用的做法就是拍得平整、端正、尺寸更大。这样后面的每一步都会更轻松。
唯一会离开您设备的那个按钮
识别过程在本地完成。您的 PDF 在标签页中读取,引擎及其语言数据会在首次使用时从公共 CDN 下载,文档的任何一页都不会被发送到任何地方。这个页面有一个例外,值得明确说出来:结果旁边的翻译按钮,会把提取出的文字通过互联网发送给一个外部翻译服务。文件本身绝不会发送,但识别出的文字会。如果文档是保密的,请不要使用这个按钮。
什么时候桌面工具是更好的选择
像 OCRmyPDF 这样的工具,会把识别出的文字作为一层隐藏图层写回原始 PDF,这样文件看起来还是原来的扫描件,却已经可以搜索了,这通常正是归档真正需要的效果。桌面软件还会在识别前先校正倾斜、去除噪点,重建表格,并且可以无需人工看管地处理一整个包含数百个文件的文件夹。在内容密集、质量差和多语言的页面上,商业引擎仍然领先。当您只是想立刻拿到一份扫描件里的文字,又不想为了知道内容而把它上传出去时,就用浏览器里的这个工具。