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上直接安装相对复杂,推荐使用以下两种方式之一:
- Windows Subsystem for Linux (WSL): 启用WSL并安装一个Linux发行版(如Ubuntu),然后按照上述Linux的步骤进行安装。这是最推荐的方式。
- 使用 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>
- 对单个文件进行OCR这是最基础的用法。程序会读取
input.pdf
,处理后生成一个名为output.pdf
的可搜索PDF文件。ocrmypdf input.pdf output.pdf
- 原地修改文件如果你希望在处理成功后直接覆盖原文件,可以将输入和输出文件名设置成一样。只有在整个过程无误的情况下,原文件才会被覆盖。
ocrmypdf myfile.pdf myfile.pdf
- 指定识别语言使用
-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
特色功能操作
- 校正歪斜页面 (Deskew)如果扫描件是歪斜的,可以使用
--deskew
参数让程序在OCR前先尝试将其摆正。ocrmypdf --deskew crooked-scan.pdf straight-scan.pdf
- 强制进行OCR有些PDF文件虽然本身包含文本,但可能是从Word等文档直接导出,排版混乱或缺少字体信息,导致无法正常复制。默认情况下,OCRmyPDF会跳过这些看似有文本的PDF。使用
--force-ocr
参数可以强制对图像层进行重新识别。ocrmypdf --force-ocr word-export.pdf cleaned-export.pdf
- 优化文件大小使用
--optimize
或-o
参数可以控制优化级别。级别从0到3,数字越大,优化力度越大(处理时间也更长),文件可能变得更小。# 使用级别2的优化 ocrmypdf -o 2 large-file.pdf smaller-file.pdf
- 图像处理与清理使用
--clean
参数可以在OCR前对图像进行清理,去除一些背景噪点,可能有助于提升识别率。ocrmypdf --clean messy-scan.pdf clean-scan.pdf
- 查看帮助信息要了解所有可用的命令和选项,可以随时查看内置的帮助文档。
ocrmypdf --help
应用场景
- 无纸化办公将公司收到的纸质文件(如合同、发票、报告)扫描成PDF后,使用OCRmyPDF进行处理。处理后的文件可以全文搜索,员工能快速在大量存档文件中找到包含特定关键词的文档,极大地提高了资料检索效率。
- 个人知识管理学者、研究人员或学生可以将购买的书籍或下载的论文扫描件进行OCR处理。这样一来,所有的文献资料都变成了可搜索的知识库,在撰写报告或论文时,可以方便地查找和引用特定内容。
- 数据归档与存储政府机构、图书馆或档案馆需要将大量的历史文献、案卷等资料进行数字化长期保存。OCRmyPDF能够生成符合PDF/A标准的归档文件,确保这些数字资产在数十年后依然可以被访问和使用,同时其文本内容也能被索引和检索。
- 自动化工作流结合脚本或自动化工具,可以设置一个“监控文件夹”。任何被放入该文件夹的扫描PDF都会被自动触发OCRmyPDF进行处理,处理完成后的可搜索文件被移动到指定的存档位置,实现无人干预的文档处理流程。
QA
- 处理PDF时,我的数据是否安全?绝对安全。OCRmyPDF是一个完全在本地电脑上运行的程序,你的文件不会被上传到任何云端或网络服务器。整个处理过程都在你自己的机器上完成,因此隐私和数据安全得到了保障。
- 为什么处理某些PDF时速度很慢?处理速度取决于多个因素:PDF的页数、图像的分辨率和复杂度、以及你启用的功能。例如,使用
--deskew
、--clean
或高级别的优化-o 3
都会增加处理时间。此外,如果文件很大,多核心CPU会显著提升处理速度。 - 识别结果不准确或出现乱码怎么办?首先,请确保为文档选择了正确的语言包,使用
-l
参数指定。其次,扫描质量对识别率有巨大影响,尽量使用更高分辨率(推荐300 DPI)和更清晰的扫描件。如果页面歪斜,可以尝试加入--deskew
参数进行校正。 - 我有一个从Word导出的PDF,无法复制文字,OCRmyPDF能处理吗?可以。这种情况通常是因为PDF虽然包含文本对象,但缺少正确的编码或字体信息。默认情况下OCRmyPDF会跳过它,但你可以使用
--force-ocr
参数来强制对这个PDF文件进行栅格化和OCR处理,从而生成一个全新的、文本正常的PDF。 - 是否可以处理受密码保护的PDF?可以。如果PDF有打开密码,你可以使用
--password
参数提供密码,以便OCRmyPDF解密并处理文件。例如:ocrmypdf --password "MY_SECRET" encrypted.pdf output.pdf
。但它无法处理具有复制、打印等限制权限的加密PDF。