无需上传, 100% 本地处理, 无需账户

文章

提高OCR准确率:在识别文字之前先修正图像

OCR的效果取决于输入图像的质量。倾斜、低对比度、噪点多的扫描件,无论引擎多好都会输出混乱的文字。以下是真正能改善结果的措施,按操作顺序排列,全部在浏览器中本地运行。

OCR为何在处理真实扫描件时会出错

Tesseract等OCR引擎是在干净、水平、高对比度的文字上训练的。它将页面分割成行,行分割成词,词分割成字符形状,然后将每个形状与训练模型进行匹配。现实中的扫描件会破坏这些假设:页面倾斜几度、光照不均匀、分辨率低,扫描仪底板边缘或对面页面还会产生暗色噪点。这些问题都会导致行和字符分割步骤出现错误判断,错误的分割会引发一连串的字符识别错误。解决方案很少是更换引擎,而是要预处理图像,使其符合引擎的假设。实践证明,预处理对准确率的影响远大于OCR引擎的选择。

OCR预处理流程图:扫描件在到达识别引擎之前,依次经过方向校正、倾斜校正、裁剪和灰度化处理步骤。

从分辨率入手:目标是300 DPI

对于普通正文,Tesseract在约300 DPI时效果最好。低于约200 DPI时,每个字形的笔画会与相邻字形模糊混合,准确率急剧下降。如果您能控制扫描过程,请先将扫描仪设置为300 DPI,这是影响最大的单一选择。如果您只有低分辨率图像,放大也无法凭空创造出未曾捕获的细节,但适度放大仍有助于引擎通过提供更多像素来分离相接触的字符。非常小的印刷文字可受益于400至600 DPI;超过这个范围只会增大文件而不会提高准确率。如果源文件是PDF,请先将每页光栅化为目标DPI的图像,再对该图像进行OCR。

纠正方向

如果页面旋转了90、180或270度,引擎会横向或倒置阅读,返回无意义的结果。Tesseract有一个方向和文字检测(OSD)步骤,可以推测旋转角度,但在文字稀少、表格或以图像为主的页面上不可靠。自行将页面旋转至正确方向可以消除这种不确定性。此步骤没有损耗且即时完成:旋转90度的倍数只是将现有像素重新映射到新位置,没有质量损失,也不需要重采样。在纠偏之前先完成此步骤,因为纠偏假设文字已基本水平。

纠偏:校正细微倾斜

即使是2到3度的倾斜(这种情况常发生在页面稍微偏斜地送入扫描仪时),也会影响OCR:水平行查找步骤会将一行文字分成两行,或将两行合并为一行。纠偏会测量文字行的主要角度(通常使用投影剖面或Hough变换分析),并将页面旋转回水平位置。与90度旋转不同,纠偏是一种小角度的任意旋转,因此需要对像素重采样,会产生轻微模糊。这种取舍几乎总是值得的,因为水平的文字行可以被干净地分割,准确率的提升远远超过轻微的模糊影响。在修正方向之后、裁剪之前进行纠偏。

倾斜校正前后对比:左侧为倾斜数度的文字页面,右侧为校正至水平的页面,使文字行保持水平。

裁剪至文字区域并去除噪点

任何不是您所需文字的内容都是引擎可能误读的噪点:扫描仪底板的深色边框、对面页面的部分内容、订书钉角落、手指或打孔。将图像裁剪到只保留文字块可以消除这些误识别对象,同时提高准确率并加快识别速度,因为引擎需要分析的区域更小了。对于多列文档,裁剪(或一次只对一列运行OCR)还可以防止引擎跨越页面中缝横向阅读,将两列混成一行乱码。在纠偏之后进行裁剪,这样内容就能方正地置于框架中。

对比度、灰度与二值化的实际工作原理

OCR最终在二值图像上运行:每个像素被判断为墨水或纸张。Tesseract在内部使用Otsu方法完成这项工作,该方法从图像直方图中选取单一全局阈值。当页面光照均匀、对比度良好时,这种方法效果很好;当阴影或彩色背景使某个角落比阈值预期的更暗时,就会出现问题。可靠的改进方法是转换为灰度图,避免色偏干扰阈值,以及均匀化光照,使整个页面处于阈值的同一侧。适度提高对比度有助于处理淡色文字。通常会适得其反的是强制手动二值化:如果您用错误的截止值将图像自行转换为纯黑白,会抹去引擎自身步骤本可保留的淡色笔画。让引擎来完成二值化,给它一张均匀的灰度图像作为输入。Sunasty提供PDF的灰度转换;对于精细的对比度调整,桌面编辑器仍然更合适,但扫描时的均匀光照比任何滑块都更重要。

选择正确的语言并核对输出结果

Tesseract为每种语言和文字加载单独的训练数据文件。对法语或希腊语文字运行英语模型会产生本可避免的错误,特别是在带重音符号或非拉丁字符上,因此请选择与文档匹配的语言。最后,请将OCR输出视为草稿,而非最终答案:引擎无法判断名字的拼写是否正确,或者0是否本应是O。请仔细校对数字、专有名词以及任何法律或财务上重要的内容。对于表格和多列布局,请预期需要手动修复结构,因为OCR返回的是识别出的文字流,而非重建的版面。

本文涉及的工具

常见问题

放大模糊的扫描件能改善OCR效果吗?

单独使用效果不大。放大无法恢复扫描时未曾捕获的细节,因此100 DPI的模糊图像仍然模糊。适度放大可以通过提供更多像素来帮助引擎分离相接触的字符,但以300 DPI重新扫描的效果远比任何程度的放大更好。

我应该先自己将图像转换为纯黑白吗?

通常不需要。Tesseract在内部使用Otsu方法进行二值化,用错误截止值进行手动强制二值化会抹去引擎本可保留的淡色笔画。请改为转换为灰度并均匀化光照,然后让引擎选择自己的阈值。

我的文字是横向的。OCR会自动旋转吗?

有时会。Tesseract有一个方向检测步骤,但在表格、文字稀少或图像较多的页面上不可靠。自行将页面旋转90、180或270度是无损操作,且消除了不确定性,因此是更稳妥的选择。

这些操作会上传我的文档吗?

不会。旋转、纠偏、裁剪、转换为灰度以及OCR本身,全部在您的浏览器中运行。OCR使用Tesseract的WebAssembly版本,训练好的语言数据会下载一次并缓存。您的文件永远不会离开设备。

来源