给扫描 PDF 补上可搜索文字层:OCRmyPDF 多语言 OCR 配置(3 条命令快速上手)
2026/9/2 14:17:48 网站建设 项目流程

给扫描 PDF 补上可搜索文字层:OCRmyPDF 多语言 OCR 配置(3 条命令快速上手)

【免费下载链接】OCRmyPDFOCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched项目地址: https://gitcode.com/GitHub_Trending/oc/OCRmyPDF

OCRmyPDF 基于 Tesseract 给扫描版 PDF 添加可搜索文字层,但默认只识别英语,中文、日文、韩文要先装语言包。财务丢来一批扫描发票,Ctrl+F 搜"合计"没反应——就是缺文字层。下面 3 条命令跑通 OCRmyPDF 多语言 OCR,之后按症状调参。

🚀 先跑通:从装语言包到第一次识别

查 Tesseract 版本与语言包

先在终端确认两件事:Tesseract 版本、已装哪些语言。

tesseract --version tesseract --list-langs

OCRmyPDF 要求 Tesseract ≥ 4.1.1,且明确不支持 5.4.0(该版本有回归问题,会直接拒绝运行)。--list-langs的输出就是已装语言包,全新安装通常只有engosd。语言包是.traineddata模型文件,除了英语,其他语言都得单独装。

按系统安装语言包

各平台装法不同,Debian/Ubuntu 一条 apt 命令就够,其余见表:

apt-cache search tesseract-ocr # 列出可安装的语言包 apt-get install tesseract-ocr-chi-sim # 装中文简体
系统安装中文简体的做法
Debian/Ubuntuapt-get install tesseract-ocr-chi-sim
Fedora/RHELdnf install tesseract-langpack-chi_sim
macOSbrew install tesseract --all-languages(一次性装全语言包)
Windows下载chi_sim.traineddata放进C:\Program Files\Tesseract-OCR\tessdata\
Docker基于官方镜像扩展,见下方

Docker 用户写一个派生镜像就行:

FROM jbarlow83/ocrmypdf RUN apt-get update && apt-get install -y tesseract-ocr-chi-sim

装完再跑一次tesseract --list-langs,列表里出现chi_sim就算到位。

跑第一条中文 OCR 命令,用 Ctrl+F 验证

对一张扫描发票执行中文识别:

ocrmypdf -l chi_sim invoice.pdf invoice_ocr.pdf

打开输出文件,Ctrl+F 搜"合计",能高亮命中就成了。个别字识别偏差不用慌,属于正常水平,下一节讲怎么压下去。

语言代码怎么读:ISO 639-2 对照

Tesseract 用 ISO 639-2 Alpha-3 三字母代码标识语言,-l参数填的就是它。

语言代码说明
英语eng默认启用
中文简体chi_sim别写 zh 或 cn
中文繁体chi_tra繁体文档用这个
日文(横排)jpn常规讲义、手册
日文竖排jpn_vert竖排版面专用
韩文kor

混排文档用+拼多个代码,如-l chi_sim+jpn+eng。不指定-l时默认英语;一旦指定了其他语言,记得把eng也带上,否则英文部分会漏。部分语言还有特殊变体包(jpn_vert就是一个),遇到旧字体或特殊版式时留意有没有对应包。

🔧 识别不准?按"症状 → 参数"调优

别一次全开参数,先对症状,再动一个。四个常用方向如下,tesseract_ocr.py 源码 里能找到每个参数的完整定义。

症状参数一行命令
分块错乱、段落被截--tesseract-pagesegmode 3(默认)/6/11ocrmypdf -l chi_sim --tesseract-pagesegmode 6 a.pdf b.pdf
中文识别率低--tesseract-oem 1(LSTM 引擎)ocrmypdf -l chi_sim --tesseract-oem 1 a.pdf b.pdf
背景不均、有灰斑--tesseract-thresholding adaptive-otsuocrmypdf -l chi_sim --tesseract-thresholding adaptive-otsu a.pdf b.pdf
整体对比度低、字发灰--tesseract-thresholding sauvolaocrmypdf -l chi_sim --tesseract-thresholding sauvola a.pdf b.pdf
大图卡住、超时无文字层--tesseract-downsample-large-imagesocrmypdf -l chi_sim --tesseract-downsample-large-images a.pdf b.pdf
  • 版面切分(PSM):3 是全自动,常规多段落文档直接用;6 假设整页是一个统一文本块,适合单栏扫描件;11 保留原文位置,适合插图多的讲义。
  • 识别引擎(OEM):Tesseract 4+ 带 LSTM 神经网络引擎,1 为纯 LSTM,日常中文文档优先选它;0 是旧引擎,2 混合,3 自动。
  • 阈值处理:仅 Tesseract 5.0+ 生效。默认 otsu(传统 Otsu 二值化)够用的就别动;背景深浅不均换 adaptive-otsu;整体对比度低用 sauvola(基于局部标准差)。
  • 大图处理:Tesseract 单边上限 32767 像素。OCRmyPDF 默认会先下采样再送识别;特别大的页面若仍超时,显式加这个参数,并配合更大的--tesseract-timeout

踩坑排查:报错与修复

现象:报Language "zh" not found一类"语言不可用"。原因:语言代码写错,zhcn都不是有效代码,Tesseract 只认 ISO 639-2 三字母码。修复:以语言列表为准,中文简体是chi_sim

tesseract --list-langs

现象:竖排日文整页乱序、字符错位。原因:拿横排包jpn处理竖排版面,PSM 也没匹配。修复

ocrmypdf -l jpn_vert --tesseract-pagesegmode 5 lecture.pdf out.pdf

现象:启动即报Tesseract 5.4.0 is not supported原因:5.4.0 存在回归问题,OCRmyPDF 拒绝该版本。修复:升级到更新的 5.x(或换受支持的旧版),再用tesseract --version确认。

现象:超大扫描页长时间无输出,最终没有文字层。原因:图像单边超过 32767 像素,或识别耗时超出 timeout(默认 180 秒)。修复

ocrmypdf -l chi_sim --tesseract-downsample-large-images --tesseract-timeout 600 a.pdf b.pdf

进阶:用户词典与自定义模型

专有名词老被认错的,加一份用户词典:UTF-8 纯文本、每行一个词,用--user-words指过去。

echo "增值税专用发票" > words.txt ocrmypdf -l chi_sim --user-words words.txt a.pdf b.pdf

极端情况(罕见语言、特殊字体)才考虑自训模型:jTessBoxEditor 框样本 →tesstrain.sh训练出.traineddata→ 放进 tessdata 目录 → 用-l customlang调用。四步走完,模型即插即用。

速查表:按场景抄作业

场景直接复制的参数组合
常规中文文档-l chi_sim --tesseract-oem 1
中日混排讲义-l chi_sim+jpn+eng --tesseract-pagesegmode 3
竖排日文-l jpn_vert --tesseract-pagesegmode 5
韩文手册(含英文)-l kor+eng --tesseract-oem 1
低质量扫描件(背景不均、图大)--tesseract-thresholding adaptive-otsu --tesseract-downsample-large-images --tesseract-timeout 600

先照速查表跑,哪个症状没消再回来对参数调。更多语言包与平台细节见 docs/languages.md。

【免费下载链接】OCRmyPDFOCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched项目地址: https://gitcode.com/GitHub_Trending/oc/OCRmyPDF

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询