oss

OCRmyPDF 让扫描页多一种读法

8 条来源 7 条一手来源 已翻译 2026年10月23号

正在加载阅读与收藏统计…
正文

设想打开一张扫描发票:供应商名称清清楚楚,搜索时却一无所获。PDF 留住了纸面上的字迹,计算机却没有可供查找的字符。开源命令行程序 OCRmyPDF 会补上另一种表达形式:一层与可见页面对齐的隐形文本。[1] 分别追踪页面和文本各自经历的处理,程序的架构也就清楚了。

区分这两种表达形式,正是项目最初的出发点之一。项目 README 提到,早先的一些工具会把识别出的文字放错位置、改变图像分辨率,或者生成过于庞大的文件。[1] 除了识别准确,处理后的文档也得便于使用。

一套 Scribe 图书扫描工作台,配有倾斜书托、色彩标靶、显示器和操作员座椅。
Jason Scott 于 2011 年 8 月 12 日拍摄的 Scribe 图书扫描仪。采集设备生成页面图像,交由光学字符识别(OCR)流程解读。照片记录的是扫描硬件,未展示 OCRmyPDF 的安装环境。采用 CC BY 2.0 许可;本文使用时调整了图片尺寸。[8]

一页文档,两种表达

PDF 的一页内容可以由多张图像、印刷文字和矢量对象拼合而成,未必是一张完整的照片。把其中的图像提取出来再拼回去,有时会丢失原有位置关系,或遗漏其他内容。OCRmyPDF 会先将整页渲染成像素图像,供识别使用;随后,在所选处理方式允许的情况下,把识别得到的文本层与原始页面合并。[2]

这张临时栅格图像供 Tesseract 识别使用,并不会自动成为最终交付给读者的页面。可以把它看作专门为识别引擎准备的工作副本。最终的 PDF 可保留原有的可见内容,并用独立的文本层保存引擎的识别结果。

本文依据的是标注为 17.13.0 的稳定版文档,查阅日期为 2026 年 10 月 23 日。发行版软件包有时会落后于上游发布版本,因此,对照示例和本机安装的程序时,需用 ocrmypdf --version 确认版本。[6] 下文使用的 --mode 参数名称是在版本 17 中引入的,旧选项仍可作为别名使用。[3]

已有文本决定处理方式

默认情况下,OCRmyPDF 发现已有文本就会停止处理。文档中已经有字符时,需要先决定保留哪些内容。[3]

使用 --mode skip 时,含有文本的页面会同时跳过 OCR 和图像预处理。这适合混合了扫描页与文字处理软件导出页面的一组文档。但跳过与否是按整页决定的:即使页首标题可以搜索,也不能据此认定标题下方附带的扫描图像同样可以搜索。[3]

使用 --mode redo 时,OCRmyPDF 会移除隐形的 OCR 文本,在供识别使用的图像中遮蔽可见文字,再到图像区域寻找其他文字。原有的可见文本会保留下来。有些旧 OCR 文本先以可见文字的形式绘制,随后又被图像覆盖;程序无法可靠地区分这类文本和其他可见文本。[3]

使用 --mode force 时,可打印的内容会先被栅格化,再重新识别。矢量文字随之变成像素。即使页面看起来依旧熟悉,选择这个选项也意味着接受内容表达形式的改变。[3]

回到开头那张设想中的发票,这些选项各有适用之处:它是未经处理的扫描件、早先 OCR 效果较差的扫描件,还是已有文本值得保留的混合页面?判断仍要从检查文档开始,选项名称听起来更强,并不能代替这一步。

清理后的图像用在哪里

页面与识别文本的区分,也能解释两个看起来十分相近的选项。--clean 使用 unpaper 清理送去识别的图像,清理后的图像只供识别使用;--clean-final 则还会把清理后的图像放入输出文件。操作指南要求用户检查处理结果,因为清理有时会删去应当保留的内容,或引入图像伪影。[4]

发票边缘若有一枚浅淡的印章,在识别副本中淡化它,与从交付的文档中删掉它,后果各不相同。按我对这些选项的理解,选择清理方式,要看需要改善的是识别副本还是最终页面。识别图像更整洁,本身不足以成为替换可见记录的理由。

压缩还需另作选择

识别结束后,还有独立的优化阶段。--optimize 1 选用优化器的无损设置;级别 2 和 3 允许有损处理,其中级别 3 会将图像质量降得更低。--optimize 0 关闭大部分优化,但仍会发生某些无损压缩调整。[5]

输出格式也需要选择。--output-type pdf 指定输出普通 PDF;PDF/A 旨在让文档长期保持可读,并限制有碍这一目标的功能。[2] 转换为 PDF/A 时,有时还会进一步处理图像,因此,仅看优化器的设置,无法涵盖文件经历的全部转换。[5]

输出文件新增了识别文本及其相关资源,体积也有增大的情形。[5] 因而,文件大小很难代表处理是否成功。对于保留原始扫描件的馆藏,更有用的比较是:衍生文件是否保住了所需细节,预期的文字是否可以检索。这两点都需要实际检查,字节数更少并不能给出答案。

从页面与文本两面检查结果

OCRmyPDF 可以用 --sidecar 写出配套文本文件,但其中只包含本次运行识别出的文本。输入文件原有的文本,以及未参与识别的页面,都会被省略。操作指南建议用 pdftotext 提取最终 PDF 中汇合后的文本。[4] 因此,检查混合文档时,只看这份配套文本文件,未必能看全内容。

对于规模较小、有人手复核结果的档案库,我会先挑几份有代表性的文档:清晰的扫描件、字迹浅淡的页面、分栏页面,以及混合页面。保留原件,再比较输出文件的外观,搜索已知短语,并复制跨行、跨栏的段落。这些检查各有作用;搜索成功,阅读顺序仍未必合理。

从可搜索文本到无障碍文档,还隔着后续工作。OCRmyPDF 的介绍文档指出,识别过程本身不会补上文档的标题和段落结构。[2] 一份来自外部机构的指南进一步列出了完整流程:印度最高法院电子委员会在 2022 年的无障碍文档制作规程中,将 OCRmyPDF 列入可用工具;在扫描文档的无障碍修复示例中,又分别列出文字识别、添加标签、调整阅读顺序和无障碍检查等步骤。[7]

把这两种表达分开来看,最有助于判断输出结果。扫描图像保留了人可以查看的内容,识别文本层则让软件多了一种访问这些内容的方式。OCRmyPDF 协调二者之间的关系。搜索找到的文字是否与页面上的字迹相符,读者依然应当得到确认。

来源

  1. OCRmyPDF 官方仓库 README——项目用途、最初动机与文档保留目标。
  2. OCRmyPDF 17.13.0 文档,介绍(Introduction)——PDF 页面组成、识别图像、文本层合并、PDF/A 及文档结构方面的限制。
  3. OCRmyPDF 17.13.0 文档,高级功能(Advanced features)——默认处理方式与 skip、redo、force 模式;版本 17 的模式名称及旧选项别名。
  4. OCRmyPDF 17.13.0 文档,操作指南(Cookbook)——清理后图像的用途、配套文本文件省略的内容,以及从最终 PDF 中提取文本。
  5. OCRmyPDF 17.13.0 文档,PDF 优化(PDF optimization)——优化级别、始终会发生的无损压缩调整、格式转换注意事项,以及文件体积增大的原因。
  6. OCRmyPDF 17.13.0 文档,安装 OCRmyPDF(Installing OCRmyPDF)——发行版软件包的版本滞后与已安装版本的检查方法。
  7. 印度最高法院电子委员会,无障碍法院文档制作标准操作规程(2022),附件 2,印刷页码第 13–14 页——介绍 OCRmyPDF 及更完整的无障碍修复流程的独立指南。
  8. Jason Scott,《Scribe 图书扫描仪》(Scribe Book Scanner),2011 年 8 月 12 日,维基共享资源——照片、来源与 CC BY 2.0 许可。
Previous OpenCPN 让笔记本电脑融入海图桌 Next InvenioRDM 让数据集成为可引用的研究记录

Recommended In oss

Matched by subject and format