OCRmyPDF
扫码查看

为扫描版PDF中的图像转换为文本层使其可以搜索

OCRmyPDF

综合介绍

OCRmyPDF 是一个开源的命令行工具,它的核心功能是为只包含图像的扫描版PDF文件添加一个不可见的文本层,从而使这些文件变得可以搜索和复制文本。该工具使用 Tesseract OCR 引擎来识别图像中的文字,支持超过100种语言。除了添加文本层,OCRmyPDF 还可以对PDF进行优化处理,如校正歪斜的页面(deskew)、修正页面方向、优化图像以减小文件体积,并最终生成符合PDF/A长期归档标准的格式。它被设计为可以跨平台在Linux、macOS和Windows上运行,并且能够通过多核心处理器来加速处理大型文件,使其成为个人和企业实现无纸化办公和文档管理的实用工具。

功能列表

  • 添加OCR文本层: 将Tesseract OCR引擎识别的文本精准地放置在图像下方,生成可搜索、可复制内容的PDF文件。
  • 保持原始质量: 在处理过程中,保留原始图像的精确分辨率,不对内容进行破坏性修改。
  • 文件优化: 能够优化PDF中的图像,在很多情况下生成比原始文件更小的PDF,同时不牺牲可读性。
  • 图像预处理: 在进行OCR之前,可以自动校正歪斜的页面和旋转角度不正确的页面,提高识别准确率。
  • 多语言支持: 依赖Tesseract的语言包,可以识别超过100种语言,并且支持在单个文档中识别多种语言。
  • 格式标准化: 默认生成PDF/A-2b文件,这是一种为长期电子文档归档设计的国际标准格式,确保文件未来可以被正常读取。
  • 批量处理: 支持对单个文件、整个目录树或被监控的“热文件夹”进行自动化处理。
  • 跨平台运行: 支持在Linux、macOS和Windows(通过WSL或Docker)等多种操作系统上使用。
  • 保护隐私: 作为一个本地运行的命令行工具,你的所有文件都在本地处理,不会上传到任何服务器。

使用帮助

OCRmyPDF 是一个功能强大的命令行工具,安装和使用都需要在终端(Terminal)或命令提示符(Command Prompt)中完成。

安装流程

OCRmyPDF 的运行依赖两个核心外部程序:Tesseract OCR 和 Ghostscript。在安装OCRmyPDF之前,通常需要先确保这两个依赖已经安装在你的系统上。

在 Linux 上安装 (以 Debian/Ubuntu 为例)对于大多数Linux发行版,可以直接使用包管理器安装:

# 安装 OCRmyPDF 及其所有依赖
sudo apt update
sudo apt install ocrmypdf

你可能还需要安装Tesseract的语言包。例如,安装简体中文和英文语言包:

sudo apt install tesseract-ocr-chi-sim tesseract-ocr-eng

在 macOS 上安装推荐使用 Homebrew 进行安装:

# 安装 Homebrew (如果尚未安装)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# 安装 ocrmypdf
brew install ocrmypdf
# 安装额外的语言包
brew install tesseract-lang

在 Windows 上安装在Windows上直接安装相对复杂,推荐使用以下两种方式之一:

  1. Windows Subsystem for Linux (WSL): 启用WSL并安装一个Linux发行版(如Ubuntu),然后按照上述Linux的步骤进行安装。这是最推荐的方式。
  2. 使用 Anaconda/Miniconda: 对于希望在原生Windows环境中使用的用户,可以通过Conda包管理器来简化安装流程,它可以帮助处理复杂的依赖关系。a. 打开 Anaconda Prompt。b. 创建一个新的Python环境(推荐),以避免与系统其他Python库冲突:bash conda create --name ocrmypdf python=3.10 c. 激活新创建的环境:bash conda activate ocrmypdf d. 在此环境中安装 ocrmypdf。虽然可以直接 pip install,但仍需手动安装Tesseract和Ghostscript并配置好系统路径,过程较为繁琐。

基本操作

所有操作都在命令行中完成。基本命令格式为:ocrmypdf [选项] <输入文件.pdf> <输出文件.pdf>

  1. 对单个文件进行OCR这是最基础的用法。程序会读取 input.pdf,处理后生成一个名为 output.pdf 的可搜索PDF文件。
    ocrmypdf input.pdf output.pdf
    
  2. 原地修改文件如果你希望在处理成功后直接覆盖原文件,可以将输入和输出文件名设置成一样。只有在整个过程无误的情况下,原文件才会被覆盖。
    ocrmypdf myfile.pdf myfile.pdf
    
  3. 指定识别语言使用 -l 或 --language 参数指定语言。对于多语言文档,可以使用 + 连接。语言代码使用Tesseract的标准(通常是ISO 639-2/3码)。
    # 识别法语
    ocrmypdf -l fra document.pdf searchable-doc.pdf
    # 同时识别英文和简体中文
    ocrmypdf -l eng+chi_sim document.pdf searchable-doc.pdf
    

特色功能操作

  1. 校正歪斜页面 (Deskew)如果扫描件是歪斜的,可以使用 --deskew 参数让程序在OCR前先尝试将其摆正。
    ocrmypdf --deskew crooked-scan.pdf straight-scan.pdf
    
  2. 强制进行OCR有些PDF文件虽然本身包含文本,但可能是从Word等文档直接导出,排版混乱或缺少字体信息,导致无法正常复制。默认情况下,OCRmyPDF会跳过这些看似有文本的PDF。使用 --force-ocr 参数可以强制对图像层进行重新识别。
    ocrmypdf --force-ocr word-export.pdf cleaned-export.pdf
    
  3. 优化文件大小使用 --optimize 或 -o 参数可以控制优化级别。级别从0到3,数字越大,优化力度越大(处理时间也更长),文件可能变得更小。
    # 使用级别2的优化
    ocrmypdf -o 2 large-file.pdf smaller-file.pdf
    
  4. 图像处理与清理使用 --clean 参数可以在OCR前对图像进行清理,去除一些背景噪点,可能有助于提升识别率。
    ocrmypdf --clean messy-scan.pdf clean-scan.pdf
    
  5. 查看帮助信息要了解所有可用的命令和选项,可以随时查看内置的帮助文档。
    ocrmypdf --help
    

应用场景

  1. 无纸化办公将公司收到的纸质文件(如合同、发票、报告)扫描成PDF后,使用OCRmyPDF进行处理。处理后的文件可以全文搜索,员工能快速在大量存档文件中找到包含特定关键词的文档,极大地提高了资料检索效率。
  2. 个人知识管理学者、研究人员或学生可以将购买的书籍或下载的论文扫描件进行OCR处理。这样一来,所有的文献资料都变成了可搜索的知识库,在撰写报告或论文时,可以方便地查找和引用特定内容。
  3. 数据归档与存储政府机构、图书馆或档案馆需要将大量的历史文献、案卷等资料进行数字化长期保存。OCRmyPDF能够生成符合PDF/A标准的归档文件,确保这些数字资产在数十年后依然可以被访问和使用,同时其文本内容也能被索引和检索。
  4. 自动化工作流结合脚本或自动化工具,可以设置一个“监控文件夹”。任何被放入该文件夹的扫描PDF都会被自动触发OCRmyPDF进行处理,处理完成后的可搜索文件被移动到指定的存档位置,实现无人干预的文档处理流程。

QA

  1. 处理PDF时,我的数据是否安全?绝对安全。OCRmyPDF是一个完全在本地电脑上运行的程序,你的文件不会被上传到任何云端或网络服务器。整个处理过程都在你自己的机器上完成,因此隐私和数据安全得到了保障。
  2. 为什么处理某些PDF时速度很慢?处理速度取决于多个因素:PDF的页数、图像的分辨率和复杂度、以及你启用的功能。例如,使用 --deskew--clean 或高级别的优化 -o 3 都会增加处理时间。此外,如果文件很大,多核心CPU会显著提升处理速度。
  3. 识别结果不准确或出现乱码怎么办?首先,请确保为文档选择了正确的语言包,使用 -l 参数指定。其次,扫描质量对识别率有巨大影响,尽量使用更高分辨率(推荐300 DPI)和更清晰的扫描件。如果页面歪斜,可以尝试加入 --deskew 参数进行校正。
  4. 我有一个从Word导出的PDF,无法复制文字,OCRmyPDF能处理吗?可以。这种情况通常是因为PDF虽然包含文本对象,但缺少正确的编码或字体信息。默认情况下OCRmyPDF会跳过它,但你可以使用 --force-ocr 参数来强制对这个PDF文件进行栅格化和OCR处理,从而生成一个全新的、文本正常的PDF。
  5. 是否可以处理受密码保护的PDF?可以。如果PDF有打开密码,你可以使用 --password 参数提供密码,以便OCRmyPDF解密并处理文件。例如:ocrmypdf --password "MY_SECRET" encrypted.pdf output.pdf。但它无法处理具有复制、打印等限制权限的加密PDF。
微信微博Email复制链接