Linux系统中OCR工具

我们时常会遇到一些扫描见或者影印版的pdf,它们无法搜索、无法复制,就让人很困恼。本文介绍在Ubuntu/Debian 环境下,两种从PDF中提取文字的实用方案。分别是自带Tesseract原生方案和开源项目 “OCRmyPDF”。希望对你有所帮助。

Tesseract 方案

目前大部分OCR,底层都依赖Google开源的 [Tesseract OCR],

安装

1
2
3
4
5
6
7
8
9
10
# Ubuntu/Debian
sudo apt update
# 简体中文
sudo apt install tesseract-ocr-chi-sim tesseract-ocr-chi-tra

# 如果其它可以安装的语言,可以自行添加
sudo apt install tesseract-ocr-chi-tra \ # 繁体中文
tesseract-ocr-eng # 英文(通常已默认安装)


验证

1
2
tesseract --list-langs
# 应输出:chi_sim、chi_tra、eng 等

使用

我们大多时候都是仅仅只需要纯文本用来写文档啥的,不需要保留PDF排版或者索引。一般步骤是“PDF 转图 → OCR 识图 → 合并文本”。参考步骤如下:

1、高清PDF转png 300dpi

1
2

pdftoppm -r 300 "test.pdf" temp -png -q

效果如图:

打开图片,感觉内容识别效果还可以,但是英文识别效果一般

2、中文+英文OCR,合并文本

1
2
3
for f in temp-*.png; do
tesseract "$f" stdout -l chi_sim+eng --oem 3 2>/dev/null
done >> output.txt

参数说明:
-l chi_sim+eng:同时加载简体中文与英文训练数据,这是避免乱码的核心。
--oem 3:使用默认神经网络引擎
stdout:直接输出到终端,方便管道重定向。

输出结果保存在output.txt中,可以看到还是有些许的乱码。

虽说如此,但文字算是不要自己再敲了,拿过来直接写方案,也很方便。

3、清理临时图片(可选)

1
rm -f temp-*.png

OCRmyPDF

OCRmyPDF 是基于 Tesseract 的封装工具,它会在 PDF 的扫描图像背后附加一层隐形文字层,使文件外观完全不变,但支持复制、搜索与索引。它还能自动完成图像预处理、PDF/A 归档转换、元数据写入等任务。

开源项目地址:ocrmypdf

安装

1
sudo apt install ocrmypdf

使用

1、生成可搜索 PDF(推荐,不乱码、可复制搜索)

1
ocrmypdf "test.pdf" "test_OCR.pdf"

处理中文文档时必须指定语言:

1
2
3
4
ocrmypdf \
-l chi_sim+eng \
"test.pdf" \
"test_OCR.pdf"

2、只处理扫描页,保留原有文字页

1
2
3
4
5
6
7
8
9
10
11
ocrmypdf \
-l chi_sim+eng \
--deskew \
--clean \
--output-type pdf \
--sidecar output.txt \
--skip-text \
"test.pdf" \
"test_OCR.pdf"


3、全部OCR处理

1
2
3
4
5
6
7
8
9
ocrmypdf \
-l chi_sim+eng \
--deskew \
--clean \
--output-type pdf \
--sidecar output.txt \
--force-ocr \
"test.pdf" \
"test_OCR.pdf"

参数解释:

参数 作用 适用场景
-l chi_sim+eng 指定 OCR 语言(Tesseract 语言代码) 中文文档防乱码必加
--deskew 自动纠正页面倾斜(±约 15°) 扫描件未放正
--clean 使用 unpaper 清理扫描黑点、噪点、边框污渍,仅用于 OCR 识别,不写入最终 PDF 老旧/低质量扫描件
--clean-final 同上,但将清理后的图像写入最终 PDF 需要视觉降噪输出
--rotate-pages 根据文字方向自动旋转页面 扫描方向混乱(横竖颠倒)
--remove-background 去除灰度/彩色背景,统一为纯白 报纸、杂志扫描件
--output-type pdf 输出普通 PDF(默认输出 PDF/A 归档格式) 需保留 JavaScript/多媒体等 PDF/A 不支持的特性
--output-type pdfa 输出 PDF/A-2b 长期归档格式 档案数字化
--sidecar output.txt 额外输出一份纯文本文件 需要同时提取文本做全文检索
--force-ocr 强制对所有页面进行 OCR,即使已有文字层 原 PDF 文字层损坏或乱码
--skip-text 跳过已有文字层的页面,仅处理纯图像页 混合文档(部分可搜索、部分扫描件)
--redo-ocr 对已有文字层的页面重新 OCR,保留原图像 旧 OCR 质量差,需要升级
--optimize 3 最大级别图像压缩(JBIG2/无损),显著减小体积 档案存储、网络传输
-j 4 / --jobs 4 启用 4 并行 worker 处理多页 多核服务器/大批量任务
--image-dpi 300 为缺少 DPI 元数据的图像强制指定 300 DPI 截图或异常 PDF

后语

如果只需要纯文本做后续分析,使用原生方案足够了,如果需要保留原始排版、生成可搜索文档、构建数字档案,OCRmyPDF(方案二)是工业级选择。它把”转图→预处理→OCR→压层→优化→输出”整条链路封装在一条命令里,极大降低了流水线维护成本。