Tesseract OCR 源码编译安装指南:Autotools 与 CMake 双构建系统、训练工具与 tessdata 部署
本文基于 Tesseract 仓库中的 INSTALL.GIT.md 展开,系统讲解从 Git 源码克隆后构建 Tesseract OCR 5.5.x 的完整流程:包括 Autotools(Linux/UNIX/MSYS)与 CMake 两套构建方式的命令序列、编译依赖(Leptonica、Pango、Cairo、ICU)的底层检查逻辑、训练工具的独立构建与安装,以及语言数据 traineddata 向 TESSDATA_PREFIX 目录的部署方法,并补充 ScrollView 图形调试视图(Java 组件)的构建细节。读完后,你可以在任意支持 C++17 的平台上完成从源码到可用 OCR 引擎(含训练工具)的落地部署。
一、构建前准备:依赖与版本前提
INSTALL.GIT.md 开篇给出了三个必须满足的前提,本文结合仓库源码逐一印证:
- 源码必须来自 Git 克隆:克隆后的仓库不包含生成好的
configure脚本,必须先生成(见下文autogen.sh一节)。 - 旧版本需先移除:如果系统中已安装 Tesseract 4.0x,在新构建前应将其卸载,避免新旧二进制与
libtesseract动态库混用。 - Leptonica 最低版本:Tesseract 4.0x 起要求 Leptonica 1.74.2(当前仓库 VERSION 为 5.5.0,要求不变)。
从源码结构看,构建脚本将 Leptonica 版本下限设为 1.74:configure.ac 中通过 PKG_CHECK_MODULES([LEPTONICA], [lept >= 1.74]) 检查,未找到时会直接报错 Leptonica 1.74 or higher is required. Try to install libleptonica-dev package;CMake 路径同样在 CMakeLists.txt 定义了 MINIMUM_LEPTONICA_VERSION 1.74。此外 README.md 建议安装带 zlib、png、tiff 支持的 Leptonica,以获得完整的输入图像格式(含多页 TIFF)能力。
1.1 训练工具的已知依赖
INSTALL.GIT.md 列出的训练工具编译依赖(不含 Leptonica)为:
- 支持 C++17 的编译器
- automake
- pkg-config
- pango-devel
- cairo-devel
- icu-devel
这些依赖不是"建议项"而是"门槛项",configure.ac 中的检查逻辑如下:
| 检查项 | 源码位置 | 缺失时的行为 |
|---|---|---|
C++17(-std=c++17) |
configure.ac | 直接终止:Your compiler does not have the necessary C++17 support! |
ICU(icu-uc/icu-i18n >= 52.1) |
configure.ac | 警告并关闭训练工具构建(ENABLE_TRAINING 置 false) |
Pango >= 1.38.0 |
configure.ac | 警告并关闭训练工具构建 |
| Cairo | configure.ac | 警告并关闭训练工具构建 |
也就是说,缺少 Pango/Cairo/ICU 时核心 OCR 引擎仍可以正常编译,但 make training 会退化为提示 Need to reconfigure project, so there are no errors(见 Makefile.am 中的 else 分支)。若你的目标是完整构建 LSTM 语言模型训练链(lstmtraining、combine_tessdata 等),务必先安装齐 pango-devel、cairo-devel、icu-devel。
二、Autotools 构建流程(LINUX/UNIX、MSYS)
2.1 生成 configure 脚本:autogen.sh
从 GitHub 克隆 Tesseract 后,第一步必须运行 ./autogen.sh 生成 configure 脚本。查看 autogen.sh 源码可知它依次执行五步 autotools 流程:
./autogen.sh
# 内部顺序:
# 1. aclocal -I config # 生成 aclocal.m4
# 2. libtoolize -f -c && libtoolize --automake
# 3. aclocal -I config(第二次,因 libtoolize 新增了 m4 文件)
# autoconf # 生成 configure
# 4. autoheader -f # 生成 config.h.in
# 5. automake --add-missing --copy --warnings=all
两个实用的实现细节:
- 脚本会优先使用
libtoolize,找不到时回退到glibtoolize(常见于 macOS 的 automake 环境),两者都缺失则报错退出; autoconf生成后会检查configure中是否包含PKG_CHECK_MODULES,若不含说明系统缺少 pkg-config,脚本会删除残缺的configure并提示Missing pkg-config. Check the build requirements——这解释了为何依赖列表中 pkg-config 是硬性要求。
2.2 标准构建与安装序列
INSTALL.GIT.md 给出的完整命令序列为:
./autogen.sh
./configure
make
sudo make install
sudo ldconfig
make training
sudo make training-install
各步骤含义:
./configure:探测编译器、Leptonica、可选库(libarchive、libcurl、TIFF)、SIMD 指令集(AVX/AVX2/AVX512F/FMA/SSE4.1/NEON/RVV),并生成分目录的 Makefile。末尾会打印后续操作提示,包括训练工具的构建方式(configure.ac)。make:编译libtesseract动态库与tesseract命令行程序。从源码结构看,库由 Makefile.am 组织为多个子库(libtesseract_ccutil.la、libtesseract_lstm.la、libtesseract_native.la及各 SIMD 变体库)再聚合链接。sudo make install:安装二进制、共享库、公共头文件(baseapi.h、capi.h、renderer.h等,见 Makefile.am 的pkginclude_HEADERS)及 pkgconfig 文件tesseract.pc。sudo ldconfig:刷新动态库缓存,使新安装的libtesseract可被其他程序链接。make training与sudo make training-install:单独构建并安装训练工具集(下一节详述)。
2.3 常用 configure 选项
./configure --help 可列出全部选项,结合 configure.ac 源码,与部署最相关的有:
| 选项 | 作用 | 源码依据 |
|---|---|---|
--prefix=PATH |
安装前缀,默认 /usr/local |
configure.ac |
--disable-legacy |
关闭传统 OCR 引擎,减小体积(同时减少训练工具数量) | configure.ac |
--disable-graphics |
关闭 ScrollView 图形调试视图 | configure.ac |
--disable-tessdata-prefix |
不在编译期写入 TESSDATA_PREFIX 默认值 |
configure.ac |
--disable-float32 |
LSTM 计算使用 double 而非 float | configure.ac |
--enable-debug |
打开调试编译(-g -DDEBUG,GCC 用 -Og,Clang 用 -O0) |
configure.ac |
--with-curl / --with-archive |
启用 libcurl(URL 图像输入)/ libarchive(压缩模型文件) | configure.ac |
--with-extra-includes=DIR / --with-extra-libraries=DIR |
追加头文件/库搜索目录 | configure.ac |
三、构建与安装训练工具(make training)
Tesseract 的命令行 OCR 引擎之外,仓库还附带一整套语言模型训练工具,源码位于 src/training/。Makefile.am 定义了 trainingtools 变量,默认启用 Legacy 引擎时的完整清单为:
| 工具 | 源码入口 | 用途概要 |
|---|---|---|
lstmtraining |
src/training/lstmtraining.cpp | LSTM 网络训练主程序 |
lstmeval |
src/training/lstmeval.cpp | 用训练好的模型评估数据 |
combine_lang_model |
src/training/combine_lang_model.cpp | 合并各语言模型组件 |
combine_tessdata |
src/training/combine_tessdata.cpp | 打包生成最终 .traineddata |
unicharset_extractor |
src/training/unicharset_extractor.cpp | 从标注文本提取字符集 |
set_unicharset_properties |
src/training/set_unicharset_properties.cpp | 设置字符属性(方向、大小等) |
text2image |
src/training/text2image.cpp | 用 Pango/Cairo 渲染文本图像 |
wordlist2dawg / dawg2wordlist |
src/training/wordlist2dawg.cpp、src/training/dawg2wordlist.cpp | 词表与 DAWG 互转 |
merge_unicharsets |
src/training/merge_unicharsets.cpp | 合并多个 unicharset |
mftraining、shapeclustering、cntraining、classifier_tester、ambiguous_words |
对应同名 .cpp |
Legacy 引擎训练链(--disable-legacy 时不构建) |
安装目标见 Makefile.am:training-install 会将上述工具以 libtool --mode=install 方式装入 $(bindir)。对应的手页文档源文件(如 doc/lstmtraining.1.asc、doc/combine_lang_model.1.asc)在 asciidoc 环境下随 make install 生成 man 页。
四、部署语言数据:TESSDATA_PREFIX 与 traineddata
4.1 最低可用数据
INSTALL.GIT.md 明确要求:至少安装 English(eng) 和 OSD 两个 traineddata 文件到 TESSDATA_PREFIX 目录。这是引擎能运行的最低数据配置:OSD 模型支撑方向与布局检测,eng 提供基础语言识别能力。
从源码结构看,TESSDATA_PREFIX 的默认值是在编译期写入的:Makefile.am 中对 libtesseract_ccutil.la 注入 -DTESSDATA_PREFIX='"@datadir@"'(即安装前缀下的 share/tessdata)。因此自编译安装后,数据文件应放入 $prefix/share/tessdata/;也可以在运行时通过 tesseract --tessdata-dir 参数或 TESSDATA_PREFIX 环境变量覆盖该默认值。
4.2 获取数据文件的两种方式
- 单文件下载:用 wget、curl、GitHub 下载器或浏览器直接抓取所需的
eng.traineddata、osd.traineddata,是最省事的方式。 - 整库克隆(仅打包者适用):仓库中注明 tessdata 全量仓库体积超过 1.2 GB,且没有必要下载所有语言,此方式只适合分发打包场景:
git clone https://github.com/tesseract-ocr/tessdata.git tesseract-ocr.tessdata
4.3 内置配置文件随源码安装
除 .traineddata 外,仓库自带 tessdata/configs/(如 pdf、hocr、tsv、alto、quiet 等输出格式配置)与 tessdata/tessconfigs/(如 batch、nobatch、segdemo)。Autotools 路径经 tessdata/Makefile 安装,CMake 路径则在 CMakeLists.txt 中由 INSTALL_CONFIGS 选项(默认 ON)控制安装到 $(dataroot)/tessdata/configs 与 tessconfigs 目录。这些文件正是 tesseract img out pdf 中第三参数字典的来源。
五、构建 ScrollView.jar 图形调试视图
Tesseract 的命令行程序可弹出 Java 图形视图逐行调试识别结果,其 Java 组件源码在 java/com/google/scrollview/。INSTALL.GIT.md 指出:编译 ScrollView.jar 需要联网与 curl,因为构建过程会自动从 Maven 仓库下载三个依赖 jar 并放入 tesseract/java 目录:
piccolo2d-core-3.0.1.jarpiccolo2d-extras-3.0.1.jarjaxb-api-2.3.1.jar
查看 java/Makefile.am 可确认这一机制:fetch-jars 目标用三条 curl -sSLO 命令拉取上述 jar。完整流程:
make ScrollView.jar # 编译 Java 类并打包 jar(自动 fetch 依赖)
make install-jars # 将三个依赖 jar + ScrollView.jar 装入 $(datadir)/tessdata
Makefile.am 将顶层的 ScrollView.jar 目标委派到 java 子目录执行;install-jars 装入后会提示设置环境变量 SCROLLVIEW_PATH 指向 $(datadir)/tessdata(见 java/Makefile.am)。注意若 configure 时用了 --disable-graphics,该目标不存在(对应 configure.ac 的 GRAPHICS_DISABLED 条件)。jar 就位后,即可按官方文档的 Viewer Debugging 流程用 tesseract 弹出图形视图检查每行识别。
六、CMake 备选构建系统
INSTALL.GIT.md 指出仓库提供跨平台的 CMake 构建作为替代方案。Linux 下三步即可:
mkdir build
cd build && cmake .. && make
sudo make install
CMake 侧的关键事实(对照 CMakeLists.txt):
- 最低 CMake 版本 3.10(CMakeLists.txt),且禁止源码内构建——在源码目录直接运行
cmake .会触发FATAL_ERROR并给出mkdir build && cd build && cmake ..的提示(CMakeLists.txt)。 - Leptonica 通过
find_package(Leptonica 1.74 CONFIG)或 pkg-config 回退方式查找,找不到即FATAL_ERROR终止(CMakeLists.txt)。 - 未指定构建类型时默认
Release(CMakeLists.txt)。 - 可选开关与 Autotools 选项语义对应,常用者包括:
| CMake 选项 | 默认值 | 说明 |
|---|---|---|
BUILD_TRAINING_TOOLS |
ON | 构建训练工具(对应 autotools 的 make training,源码子目录 src/training/CMakeLists.txt) |
GRAPHICS_DISABLED |
OFF | 关闭 ScrollView(对应 --disable-graphics) |
DISABLED_LEGACY_ENGINE |
OFF | 关闭 Legacy 引擎,会从库中剔除对应源文件(CMakeLists.txt) |
FAST_FLOAT |
ON | LSTM 使用 float(对应 --disable-float32 的反向) |
ENABLE_NATIVE |
OFF | 加 -march=native 优化本机 CPU(可能牺牲跨机器兼容性) |
ENABLE_LTO |
OFF | 链接期优化 |
USE_SYSTEM_ICU |
OFF | 训练工具使用系统 ICU |
BUILD_TESTS |
OFF | 构建 googletest 单元测试(unittest/) |
DISABLE_TIFF / DISABLE_ARCHIVE / DISABLE_CURL |
OFF | 关闭对应可选库 |
Windows 平台 CMake 构建的细节(Visual Studio 生成器等)INSTALL.GIT.md 指引读者查阅官方 tessdoc 文档,本文不展开;另注意 CMake 在 Windows 下默认开启 SW_BUILD(依赖 SW 包管理器,见 CMakeLists.txt),普通 VS 构建应显式 -DSW_BUILD=OFF。
七、小结:一条可复现的部署路径
综合 INSTALL.GIT.md 与源码实现,从 Git 源码得到一个可运行、可训练的 Tesseract 5.5.x 的推荐路径为:
- 安装依赖:C++17 编译器、automake、pkg-config、libtool、Leptonica(>=1.74)及 libleptonica 开发包;如需训练工具再加 pango-devel、cairo-devel、icu-devel;
./autogen.sh && ./configure(按需加--prefix、--disable-graphics等);make && sudo make install && sudo ldconfig安装核心引擎;- 需要训练能力时
make training && sudo make training-install; - 下载
eng.traineddata与osd.traineddata放入TESSDATA_PREFIX(默认$prefix/share/tessdata); - 需要图形调试视图时
make ScrollView.jar && make install-jars并设置SCROLLVIEW_PATH; - Windows/跨平台场景改用
mkdir build && cd build && cmake .. && make。
排查构建问题时,优先阅读 config.log(configure 产生的编译器探测日志),并对照 configure.ac 中对应检查的告警信息定位缺失的依赖包。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0624
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00