简介:Tesseract-OCR 是一款免费开源的光学字符识别引擎,可从图像中提取文字并输出多种文本格式,支持百余种语言,并提供多语言 API 便于集成到各类应用中。本资源面向需要自动化文档扫描、图像文字提取、数据录入与文档管理的开发者及技术爱好者,尤其适合希望让 OCR 支持中文识别的用户。压缩包共 724 个文件,约 36.01MB,以 C++ 源码(271 个 cpp)与头文件(274 个 h)为主体,另含 Java、XML、Shell 脚本、CMake 构建文件、训练数据与语言包等,覆盖编译、训练与配置全流程。资源包含安装向导、必要库文件与配置脚本,并附带中文语言包,安装后即可精准识别中文文本。目前已有 288 人学习下载,适合希望快速搭建 OCR 环境、扩展多语言识别能力并集成到自有项目中的读者参考使用。
1. Tesseract-OCR 安装前的版本选择:为什么 5.x 和 4.x 的坑完全不一样
如果你在 Windows 上搜过「Tesseract-OCR 怎么安装」,大概率见过两种截然不同的教程:一种让你下 exe 一路下一步,另一种让你编译源码。更玄学的是,有人装完tesseract --version能跑,一调用中文识别就报Failed loading language 'chi_sim'。这不是你操作有问题,而是 Tesseract 的版本线和语言包路径在 4.x 与 5.x 之间发生了实质性变化。这篇笔记面向需要在本地或服务器上落地 OCR 能力的开发者,把 Windows 和 Linux 两条安装路径、中文语言包配置、环境变量设置以及装坏后的回滚方式一次讲清。整套流程我前后在测试机和几台内网服务器上走过多次,下面按「装什么版本 → 怎么装 → 怎么配 → 坏了怎么救」的顺序展开。
2. 环境准备与安装包获取:Windows 和 Linux 两条路怎么选
2.1 版本差异与选择建议
Tesseract 目前主流是 4.x 和 5.x 两个大版本。4.x 引入了基于 LSTM 的识别引擎,5.x 在此基础上优化了训练流程和 API 稳定性。对大多数只想「装完就能识别中文」的开发者,我的建议很直接:Windows 选 5.x 的预编译安装包,Linux 用系统包管理器装 4.x 或 5.x 均可,但要注意语言包版本必须和主程序匹配。
| 平台 | 推荐版本 | 安装方式 | 中文包获取方式 |
|---|---|---|---|
| Windows | 5.3.x | exe 安装包 | 安装时勾选 Additional language data |
| Ubuntu/Debian | 4.1.x 或 5.x | apt | apt install tesseract-ocr-chi-sim |
| CentOS/RHEL | 4.x | yum/dnf | 需手动下载 traineddata |
| macOS | 5.x | brew | brew install tesseract-lang |
选 5.x 的理由是它对中文混合排版的识别率比 4.0 早期版本有明显提升,而且 Windows 安装包自带语言包勾选项,省去手动找traineddata的麻烦。但如果你所在的内网服务器只能离线装,4.x 的依赖更少,编译成功率更高。
2.2 Windows 安装步骤
Windows 下我一般走预编译包,不折腾源码编译。安装过程本身不复杂,关键是几个勾选项别漏。
# 下载后双击运行安装程序,以下为安装向导中的关键选择 # 1. 选择组件时勾选 "Additional language data (download)" # 2. 在语言列表中找到 Chinese (Simplified) 并勾选 # 3. 安装路径建议保持默认 C:\Program Files\Tesseract-OCR # 4. 安装完成后验证 tesseract --version tesseract --list-langs--version输出应包含tesseract 5.3.x和leptonica版本号。--list-langs会列出已安装的语言,正常应看到chi_sim、eng、osd三项。如果chi_sim不在列表里,说明安装时没勾语言包,需要单独补。
2.3 Linux 安装步骤
Linux 下用包管理器最省事,但不同发行版的包名有差异,这是第一个容易翻车的地方。
# Ubuntu / Debian 系 sudo apt update sudo apt install tesseract-ocr tesseract-ocr-chi-sim tesseract-ocr-eng # 验证安装 tesseract --version tesseract --list-langs # CentOS / RHEL 系(需要 EPEL 源) sudo yum install epel-release sudo yum install tesseract tesseract-langpack-chi_simtesseract-ocr-chi-sim是简体中文语言包,tesseract-ocr-eng是英文包。CentOS 的包名里用的是下划线chi_sim,和 Ubuntu 的连字符不同,写错就装不上。装完后--list-langs应该输出chi_sim和eng。如果只有eng,说明中文包没装上,回到包管理器检查包名。
2.4 环境变量配置
Windows 安装程序通常会自动把 Tesseract 加入 PATH,但如果你用的是绿色版或手动解压的包,需要自己配。Linux 下如果用 apt 安装,/usr/bin/tesseract已经在 PATH 里,一般不用动。
# Windows 手动添加 PATH(PowerShell 管理员权限) [Environment]::SetEnvironmentVariable( "Path", $env:Path + ";C:\Program Files\Tesseract-OCR", [EnvironmentVariableTarget]::Machine ) # Linux 检查 PATH 是否包含 tesseract which tesseract # 正常输出 /usr/bin/tesseractWindows 改完 PATH 要重开终端才生效,这个细节很多人会忽略,导致tesseract命令找不到却以为是安装失败。Linux 下如果which tesseract没输出,检查/usr/bin是否在 PATH 里,或者用绝对路径调用。
3. 中文语言包配置:traineddata 放哪、怎么验证、版本怎么对齐
3.1 语言包文件结构与获取
Tesseract 的语言识别能力全靠traineddata文件。每个语言一个文件,中文简体是chi_sim.traineddata,繁体是chi_tra.traineddata。这些文件必须放在 Tesseract 能找到的tessdata目录下。
Windows 默认路径是C:\Program Files\Tesseract-OCR\tessdata\。Linux 下 apt 安装的路径通常是/usr/share/tesseract-ocr/4.00/tessdata/或/usr/share/tesseract-ocr/5/tessdata/,具体版本号影响路径,这是第二个容易踩的坑。
# Linux 下查找 tessdata 实际路径 find /usr -name "tessdata" -type d 2>/dev/null # 常见输出: # /usr/share/tesseract-ocr/4.00/tessdata # /usr/share/tesseract-ocr/5/tessdata # 确认 chi_sim.traineddata 是否存在 ls -lh /usr/share/tesseract-ocr/5/tessdata/chi_sim.traineddata如果路径下没有chi_sim.traineddata,可以从语言包仓库单独下载后放入。注意下载的traineddata版本要和主程序版本兼容——4.x 的traineddata在 5.x 上通常能用,但 5.x 训练出的新格式在 4.x 上可能报错。
3.2 通过 TESSDATA_PREFIX 指定自定义路径
当你没有系统目录写权限,或者想用自己训练的语言包时,需要设置TESSDATA_PREFIX环境变量。这个变量的值应该是tessdata目录的父目录,不是tessdata目录本身,这是最经典的配置错误。
# Linux 下设置 TESSDATA_PREFIX export TESSDATA_PREFIX=/home/user/tesseract-data # 目录结构应为: # /home/user/tesseract-data/tessdata/chi_sim.traineddata # Windows 下设置(PowerShell) [Environment]::SetEnvironmentVariable( "TESSDATA_PREFIX", "D:\tesseract-data", [EnvironmentVariableTarget]::Machine ) # 对应目录结构:D:\tesseract-data\tessdata\chi_sim.traineddata我见过不少人把TESSDATA_PREFIX直接指向tessdata文件夹,结果 Tesseract 在tessdata/tessdata/下找语言包,自然找不到。记住:变量指向父目录,Tesseract 自己会拼上tessdata。
3.3 验证中文识别是否生效
配置完成后,用一张包含中文的图片做端到端验证。准备一张简单的 PNG 或 JPG,里面写几个中文词,然后执行识别命令。
# 基本识别命令 tesseract chinese-test.png stdout -l chi_sim # 如果同时需要中英文混合识别 tesseract chinese-test.png stdout -l chi_sim+eng # 输出到文件 tesseract chinese-test.png output -l chi_sim # 生成 output.txt-l chi_sim指定使用简体中文语言包,stdout表示结果直接打印到终端。如果报Error opening data file,说明语言包路径不对;如果输出乱码或空结果,检查图片分辨率和清晰度——Tesseract 对低分辨率图片的识别率下降很明显,我一般会把图片放大到 300 DPI 再喂进去。
4. 避坑与常见问题排查:装完跑不起来先看这几条
4.1 报错Failed loading language 'chi_sim'
现象:tesseract --list-langs能看到chi_sim,但识别时仍然报加载失败。
原因:TESSDATA_PREFIX被设置成了错误路径,或者系统里存在多个tessdata目录,Tesseract 读到了没有中文包的那个。
解决:先echo $TESSDATA_PREFIX确认变量值,再检查该路径下tessdata/chi_sim.traineddata是否存在。如果存在多个版本,用tesseract --print-parameters | grep tessdata看实际加载路径。
4.2 Windows 下tesseract不是内部或外部命令
现象:安装完成,但 CMD 或 PowerShell 里敲tesseract提示命令不存在。
原因:安装时没勾「Add to PATH」,或者改完 PATH 没重开终端。
解决:手动把C:\Program Files\Tesseract-OCR加入系统 PATH,然后关闭所有终端窗口重新打开。如果还不行,用绝对路径"C:\Program Files\Tesseract-OCR\tesseract.exe" --version测试程序本身是否正常。
4.3 识别结果全是乱码或空白
现象:命令执行成功,但输出的文字完全不可读。
原因:图片质量太差、分辨率过低,或者语言包选错了(比如用chi_sim识别繁体中文)。
解决:先用图片工具把图片放大到 300 DPI 以上,转为灰度图再试。繁体内容换chi_tra。如果图片有复杂背景,先做二值化处理。Tesseract 不是万能 OCR,对倾斜、模糊、艺术字体的识别能力有限。
4.4 Linux 下 apt 安装后找不到中文包
现象:apt install tesseract-ocr成功,但--list-langs只有eng。
原因:tesseract-ocr主包不包含语言包,中文包是独立包tesseract-ocr-chi-sim。
解决:sudo apt install tesseract-ocr-chi-sim。如果提示找不到包,先sudo apt update刷新源,或者检查是否启用了 universe 仓库。
4.5 版本升级后原有脚本报错
现象:从 4.x 升级到 5.x 后,之前能跑的 Python 脚本报 API 参数错误。
原因:5.x 对部分命令行参数和 API 做了调整,比如--psm的某些取值行为有变化。
解决:先tesseract --version确认版本,再对照官方 Release Notes 检查用到的参数。如果脚本依赖旧版行为,可以用虚拟环境或容器锁定 4.x 版本,不要直接升级生产环境。
5. 装完怎么验证跑通:一套可复用的检查清单
装完 Tesseract 只是第一步,真正要确认的是「它能在你的工作流里稳定输出」。我一般会走一遍下面这套检查,从命令行到代码调用都过一遍,避免后面集成时才发现问题。
5.1 命令行端到端验证
先准备一张测试图,内容包含中文和英文各一行,分辨率不低于 300 DPI。然后按顺序执行:
# 1. 确认版本和语言包 tesseract --version tesseract --list-langs # 2. 纯中文识别 tesseract test.png stdout -l chi_sim # 3. 中英文混合识别 tesseract test.png stdout -l chi_sim+eng # 4. 指定页面分割模式(PSM 6 适合统一文本块) tesseract test.png stdout -l chi_sim --psm 6 # 5. 输出为 TSV 格式,便于程序解析 tesseract test.png stdout -l chi_sim tsv--psm 6表示「假设是一个统一的文本块」,适合大多数文档截图。如果图片是散落的文字,可以试--psm 11(稀疏文本)。TSV 输出会带上每个词的坐标和置信度,方便后续做版面分析。
5.2 Python 调用验证
命令行通了之后,用 Python 再验一遍,因为实际项目里多半是通过代码调用的。
# 需要先安装 pytesseract:pip install pytesseract import pytesseract from PIL import Image # Windows 下如果 tesseract 不在 PATH,需要指定路径 # pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe" # 指定语言包路径(可选,当 TESSDATA_PREFIX 已设置时可省略) # pytesseract.pytesseract.tessdata_dir_config = r'--tessdata-dir "D:\tesseract-data\tessdata"' img = Image.open("test.png") text = pytesseract.image_to_string(img, lang="chi_sim+eng") print(text) # 获取识别置信度 data = pytesseract.image_to_data(img, lang="chi_sim", output_type=pytesseract.Output.DICT) for i, conf in enumerate(data["conf"]): if int(conf) > 0: print(f"词: {data['text'][i]}, 置信度: {conf}")lang="chi_sim+eng"告诉 pytesseract 同时加载中英文语言包。image_to_data返回的conf字段是置信度,低于 60 的结果基本可以忽略。如果 Python 端报TesseractNotFoundError,说明tesseract_cmd没配对,Windows 下尤其常见。
5.3 验证通过的标准
我判断一套 Tesseract 环境是否算「装好」,看三条:--list-langs里有chi_sim;命令行识别中文图片能输出可读文字;Python 调用不报路径错误。三条都过,才算能进项目用。
从那以后我每次在新机器上装 Tesseract,都会先把--list-langs和一张中文测试图跑一遍,确认无误再往下做集成。这个习惯帮我省掉了至少三次「装完以为好了、结果上线才发现中文包没加载」的返工。希望帮到你。
本文还有配套的精品资源,点击获取