OCRmyPDF 离线安装:断网机器上给扫描 PDF 加文本层
【免费下载链接】OCRmyPDFOCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched项目地址: https://gitcode.com/GitHub_Trending/oc/OCRmyPDF
内网隔离机上堆着扫描件,Ctrl+F 失灵,机器连不上外网。OCRmyPDF 给扫描 PDF 补可搜索文本层,全程本地跑。离线装通四步走:查缺、补齐、放语言包、跑通再批量。
先给机器做体检:离线部署缺哪几样
离线部署最容易翻车的地方,是把一堆可选件全装上、却漏了真正不能少的那一个。OCRmyPDF 本体只是一个 Python 包,真正干活的是它调用的一圈外部程序;断网环境下,每样都得以文件形式实际躺在机器里,装不装得起来全看这一圈。
| 外部程序 | 性质 | 缺了它什么不能用 |
|---|---|---|
| Tesseract | 必须 | OCR 识别,主流程全断 |
| pypdfium2 或 Ghostscript | 必须(二选一) | 把 PDF 页面栅格化成图像 |
| fpdf2、uharfbuzz | 必须,随 wheel 自动装 | 绘制文本层 |
| unpaper | 可选 | --clean去噪预处理 |
| pngquant、jbig2enc | 可选 | --optimize压缩、黑白图压缩 |
版本下限对照 安装文档:Python 3.11+(推荐 3.12+)、Tesseract 4.1.1+、Ghostscript 9.54+。体检很简单:各跑一遍python3 --version、tesseract --version、gs --version(装了 Ghostscript 才有),哪个报错就先补哪个。
按依赖顺序把缺口补齐
安装顺序是固定的:先 Tesseract,再 OCRmyPDF 本体,语言包最后单独处理——因为后两步的验证都要用到前一步的产物。
Linux 上系统包会顺手把依赖带齐,一条命令装两样:
# Debian / Ubuntu apt install tesseract-ocr ocrmypdf # Fedora(tesseract-osd 供页面自动旋转用,别漏) dnf install tesseract tesseract-osd ocrmypdfmacOS 一条brew install ocrmypdf就把 Tesseract、Ghostscript、jbig2enc 全带上了;Windows 用 winget 装 64 位 Tesseract,Ghostscript 目前得手动装,最后用uv tool install ocrmypdf收尾,官方不支持 32 位系统。
离线机的最后一公里是 Python 依赖。有网机器上先执行pip download ocrmypdf -d ./wheels,把整个wheels目录拷过去再装:
pip install --no-index --find-links=./wheels ocrmypdf # --no-index 保证完全不碰 PyPI,只认本地目录语言包放对位置,离线识别中文才成立
语言包是整条链路里唯一需要手工摆放的文件,漏掉它,前面装得再全也只会认英语。
⚠️ 先认准语言代码:简体中文是chi_sim,不是zh。Debian/Ubuntu 装tesseract-ocr-chi-sim,Fedora 装tesseract-langpack-chi_sim,macOS 可以一步装全量包brew install tesseract-lang;Windows 没有现成包,从 tessdata 源下载chi_sim.traineddata放进tessdata目录(完整路径规则见 语言包文档)。
两个经典坑:手搓出来的tessdata目录若缺configs/子目录,Tesseract 会报cannot open its config file 'hocr',从完整安装里把configs/抄过去即可(成因见 错误说明);tessdata不在默认位置时,用TESSDATA_PREFIX环境变量指过去。
中英混排文档用ocrmypdf -l chi_sim+eng同时声明两种语言,比单语言跑得更稳。
跑通第一份扫描件,确认文本层真在
装完先别批量,两条命令确认环境完整:
ocrmypdf --version tesseract --list-langs # 列表里必须有 chi_sim✅ 都正常之后,拿一份真实扫描件走完整链路:
ocrmypdf -l chi_sim --output-type pdfa 扫描件.pdf 扫描件_ocr.pdf参数不多:-l是--language的简写;--output-type pdfa输出 PDF/A 存档格式,适合长期保存,不需要就去掉。处理过程长这样——并行扫描、OCR、后处理、压缩,全程不出本机:
跑完用阅读器打开输出文件:画面还是那张扫描件,但文字可以框选、搜索,说明文本层已压在图像底下。把几行字复制出来贴进文本编辑器核对一下,识别质量是否达标一眼便知。输入若是图文混排、部分页已有文本,加--mode skip跳过已有文本的页,只处理纯扫描页。
从一份到一批:断网环境批量 OCR 扫描件
单文件跑通之后,批量只有三个台阶。
台阶一,循环。当前目录每个 PDF 出一份带ocr_前缀的副本:
for f in *.pdf; do ocrmypdf -l chi_sim "$f" "ocr_$f"; done台阶二,现成脚本。仓库里的 misc/batch.py 把 ocrmypdf 当 Python 库用:递归找目录里的 PDF、逐个处理、结果写日志,拷一份改成自己的目录就能跑,核心就这几行:
for filename in start_dir.glob("**/*.pdf"): ocrmypdf.ocr(filename, filename, deskew=True)台阶三,目录监听。misc/watcher.py 盯着一个目录,新放进来的 PDF 自动走一遍 OCR,适合扫描件持续产出的工位;它多依赖几个 Python 包,有网时装一次pip install "ocrmypdf[watcher]"即可,之后离线照常运行。
两个逃生参数:大文件内存吃紧时用--pages 1-20分段跑;某份文件报page already has text,说明它本身已可搜索,跳过即可,或加--mode redo重做识别。
现在就可以把那堆扫描件丢进监听目录,让离线机自己跑起来。各平台差异与更多参数见 安装文档、语言包文档。
【免费下载链接】OCRmyPDFOCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched项目地址: https://gitcode.com/GitHub_Trending/oc/OCRmyPDF
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考