OCRmyPDF 多语言 OCR 配置指南:让中文扫描 PDF 可搜索的完整路径

📅 2026/8/24 3:07:04
OCRmyPDF 多语言 OCR 配置指南:让中文扫描 PDF 可搜索的完整路径
OCRmyPDF 多语言 OCR 配置指南让中文扫描 PDF 可搜索的完整路径【免费下载链接】OCRmyPDFOCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched项目地址: https://gitcode.com/GitHub_Trending/oc/OCRmyPDFPDF 里明明写着合同金额CtrlF 搜了半天一个结果都没有——扫描件本质是图片没有文字层。OCRmyPDF 就是给这类 PDF 补上可搜索文字层的工具配上 Tesseract 的多语言支持中文照样能识别、能搜索。咱们先 5 分钟跑通中文识别再按症状调参数。5 分钟跑通Linux 中文简体先说个概念Tesseract 认语言靠的是三字母代码ISO 639-2中文简体是chi_sim繁体是chi_tra日文jpn韩文kor。装语言包就是把对应代码的模型文件放进系统。Ubuntu/Debian 上两条命令装好引擎和中文包再用 pip 装上 OCRmyPDFsudo apt install tesseract-ocr tesseract-ocr-chi-sim pip install ocrmypdf装完花 10 秒确认两件事版本和语言代码。tesseract --version # 需要 4.1.1 以上 tesseract --list-langs # 输出里应该有 chi_sim⚠️ 如果你的版本是 5.4.0先换掉这个版本有回归问题OCRmyPDF 会直接拒绝工作。然后对一份中文扫描件开跑下面这个文件换成你自己的ocrmypdf -l chi_sim 合同扫描件.pdf 合同_已识别.pdf用pdftotext验一下文字层真的写进去了pdftotext 合同_已识别.pdf - | grep 合同能搜到内容恭喜最短路径通了。像下面这种老式扫描页就是它最典型的输入 文档里中英混排很正常语言代码用连起来就行-l engchi_sim。不写-l时默认只认英语。换台机器语言包最省事的装法语言包文件叫.traineddata说白了就是 Tesseract 的语言教材。不同系统拿到它的办法不一样给你各系统里最省事的方案。Windows手动放文件Windows 的 Tesseract 安装包只带英语得手动补从 Tesseract 官方的 tessdata 仓库下载目标语言的.traineddata文件中文简体就是chi_sim.traineddata复制进 Tesseract 安装目录下的tessdata文件夹常见路径C:\Program Files\Tesseract-OCR\tessdata\。放完再跑一次tesseract --list-langs确认。macOS一条命令带全Homebrew 装 Tesseract 时把所有语言包一起拉下来brew reinstall tesseract --all-languages装完所有代码都能用不用一个个挑。Docker派生一个新镜像官方镜像里同样只保证英语。写个 Dockerfile 在官方镜像基础上补语言包FROM jbarlow83/ocrmypdf RUN apt-get update apt-get install -y tesseract-ocr-chi-simdocker build -t ocrmypdf-zh .之后新镜像里中文就可用了。更多细节看 docs/docker.md。识别乱码或不准按症状下药先别急着翻参数大全先看你的问题长得像下面哪种。症状一字丢了、位置乱了多半是自动版面分析没扛住排版。--tesseract-pagesegmode用来告诉 Tesseract这一页长什么样单栏干净扫描件给6跳过版面猜测直接按整块读图文混排给11稀疏文本保留原文位置。比如下面这种地图页文字零散分布在图之间ocrmypdf -l chi_sim --tesseract-pagesegmode 11 图纸.pdf 图纸_已识别.pdf症状二底灰、亮度不均、错字多Tesseract 5.0 支持调二值化算法把灰图变黑白图的过程对应--tesseract-thresholding。默认的全局 otsu 遇到光照不均就会翻车这种旧扫描件就是典型背景颜色变化大 →--tesseract-thresholding adaptive-otsu对比度低、字迹发虚 →--tesseract-thresholding sauvola症状三整页报图像太大或识别超时Tesseract 有单边上界32767 像素超大幅扫描图会直接失败。加--tesseract-downsample-large-images让 OCRmyPDF 先缩小再识别图特别大的话顺手把--tesseract-timeout调高一点给它留够时间。症状四整体精度上不去默认引擎模式--tesseract-oem 3自动选择大多数情况够用如果换了语言包后效果还是平平可以强制走 LSTM 神经网络引擎试试--tesseract-oem 1。另外阿拉伯文这类复杂排版如果字序错乱用--pdf-renderer sandwich强制走 Tesseract 内置渲染器能解决大部分回排问题。一次处理一堆文件手点命令太累批量就靠 for 循环。假设一批中文发票要统一加文字层并输出成 PDF/Amkdir -p 已完成 for f in 发票_*.pdf; do ocrmypdf -l chi_sim --output-type pdfa $f 已完成/$f done再进阶一点专业文档里总有反复出现、标准语言包不认识的术语--user-words可以喂一个词典UTF-8 纯文本每行一个词# 医学术语每行一个 echo 心肌梗死 术语.txt ocrmypdf -l chi_sim --user-words 术语.txt 病历.pdf 病历_已识别.pdf还有种特殊情况日文竖排文档。要装竖排专用语言包jpn_vert同时把分段模式设成5单竖列ocrmypdf -l jpn_vert --tesseract-pagesegmode 5 竖排文档.pdf 竖排_已识别.pdf排坑清单每条都是症状 → 原因 → 一条命令验证直接照抄。报语言不可用→ 代码写错了中文简体是chi_sim不是zh也不是cn。 验证tesseract --list-langs看输出里到底有哪些代码。程序启动就报错提到 5.4.0→ 该版本有回归被明确不支持。 验证tesseract --version不达标就升级或换回 5.x 其他版本。识别出来全是乱码英文→ 忘了-l默认只认英语。 验证pdftotext 输出.pdf - | head肉眼确认文字层是不是你期望的语言。个别页没有文字层→ 大概率是图像超限Tesseract 单页失败了。 验证重跑一次加上--tesseract-downsample-large-images再对同一页执行第 3 条的pdftotext命令对比。参数速查表拿不准就按这一行抄为什么列说明了每组合对应的场景文档情况推荐参数组合为什么常规中文文档-l chi_sim默认引擎和阈值就够用中英混排-l engchi_sim一份文档里两种语言都要认单栏干净扫描件-l chi_sim --tesseract-pagesegmode 6跳过版面猜测更稳更快图文混排页面--tesseract-pagesegmode 11稀疏文本保留原文位置光照不均的扫描--tesseract-thresholding adaptive-otsu局部阈值适应背景变化低对比度、字迹发虚--tesseract-thresholding sauvola按局部标准差做二值化超大幅图像--tesseract-downsample-large-images绕开 32767 像素上限日文竖排-l jpn_vert --tesseract-pagesegmode 5竖排语言包 单竖列模式精度始终上不去--tesseract-oem 1强制 LSTM 神经网络引擎动手清单装语言包跑tesseract --list-langs确认代码在列。ocrmypdf -l chi_sim 输入.pdf 输出.pdf再用pdftotext验证能搜到字。还不准才动参数——对照上面速查表挑一行一次只改一个。想深入的话看 官方多语言文档 docs/languages.md各平台语言包安装方式都有用 Docker 的话再看 docs/docker.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),仅供参考