如何用 CMake 构建 Tesseract 并开启 BUILD_TRAINING_TOOLS 编译训练工具
【免费下载链接】tesseractTesseract Open Source OCR Engine (main repository)项目地址: https://gitcode.com/GitHub_Trending/te/tesseract
如果你要用 Tesseract 训练自己的语言模型,就需要源码树里src/training/下的训练工具(lstmtraining、text2image、unicharset_extractor等),而官方二进制包不一定带全这些工具。本文的任务是:用 CMake 从源码构建 Tesseract,并确认BUILD_TRAINING_TOOLS选项开启,把训练工具一并编译出来。适用环境为 Linux(INSTALL.GIT.md 中 cmake 小节给出的 Linux 构建流程),构建产物默认输出到build/bin目录。
构建前的依赖检查
CMake 配置阶段会逐项检查依赖,提前装好可以避免 configure 阶段直接报错:
| 依赖 | 要求来源 |
|---|---|
| CMake ≥ 3.10 | CMakeLists.txt 中cmake_minimum_required(VERSION 3.10 FATAL_ERROR) |
| 支持 C++17 的编译器 | INSTALL.GIT.md 列出的训练工具依赖;CMake 会把标准设为 C++17,若编译器支持则自动提升到 C++20 |
| Leptonica ≥ 1.74 | CMakeLists.txt 中MINIMUM_LEPTONICA_VERSION 1.74,找不到时会报Cannot find required library Leptonica. Quitting!并终止 |
| pkg-config | 训练工具依赖 ICU 和 pango 时通过 pkg-config 探测 |
| icu-devel、pango-devel、cairo-devel | INSTALL.GIT.md 列出的训练工具已知依赖(不含 leptonica) |
注意两点:
- INSTALL.GIT.md 的 autotools 小节写的是 “Tesseract 4.0x 最低需要 Leptonica 1.74.2”,而 CMake 路径检查的是 1.74。本文走 CMake 路径,以 1.74 为准。
- README.md 提示:从源码构建前,先确认你的编译器在 Tesseract 支持的编译器列表中。
用 CMake 配置并编译
INSTALL.GIT.md 给出的 Linux cmake 构建流程是:
mkdir build cd build cmake .. make开启训练工具时,在 cmake 命令上显式加上-DBUILD_TRAINING_TOOLS=ON。实际上 CMakeLists.txt 中该选项默认为 ON(option(BUILD_TRAINING_TOOLS "Build training tools" ON)),所以不加参数也会编译训练工具;显式写出是为了确认意图,同时如果构建机缺少 ICU/pango,你能立刻从配置摘要里看出原因:
mkdir build cd build cmake -DBUILD_TRAINING_TOOLS=ON .. make这里不能把 cmake 直接跑在源码目录里:CMakeLists.txt 检测到源码目录与构建目录相同时会直接报FATAL_ERROR "CMake generation is not possible within the source directory!",并提示在另一个目录(例如build)重新执行。
配置完成后,检查 configure 摘要中的两项关键输出:
Found leptonica version: <版本>—— Leptonica 探测成功;Build training tools [BUILD_TRAINING_TOOLS]: ON—— 训练工具子目录会被加入构建。
这两行都来自 CMake 配置阶段打印的 General configuration 摘要块。
确认训练工具被编译出来了
CMakeLists.txt 把CMAKE_RUNTIME_OUTPUT_DIRECTORY设为build/bin,所以编译完成后所有可执行文件(含训练工具)都在build/bin下。具体哪些工具被编译,由 src/training/CMakeLists.txt 中的条件决定:
- 只要
BUILD_TRAINING_TOOLS=ON就会编译:common_training库以及combine_tessdata、dawg2wordlist、wordlist2dawg; - 额外要求
DISABLED_LEGACY_ENGINE为 OFF(默认即 OFF),才会编译:ambiguous_words、classifier_tester、cntraining、mftraining、shapeclustering; - 额外要求找到 ICU(通过 pkg-config 查
icu-uc、icu-i18n,否则回退到find_package(ICU 52.1)),才会编译unicharset_training库以及combine_lang_model、lstmeval、lstmtraining、merge_unicharsets、set_unicharset_properties、unicharset_extractor; - 额外要求找到 pkg-config 且能探测到
pango>=1.38.0、cairo、pangoft2、pangocairo、fontconfig,才会编译pango_training库和text2image。
验证方式:构建结束后查看build/bin,例如确认lstmtraining、text2image是否在其中;再对主程序做一次冒烟检查(README.md 给出的方式):
./bin/tesseract --help能打印出命令行用法说明,说明构建出的tesseract可执行文件可以运行。如果配置阶段打印了>> ICU not found!,则 LSTM 相关的训练工具(lstmtraining、lstmeval等)不会出现在build/bin里;同理,pango 相关依赖缺失时text2image不会编译。
安装到系统(可选)
只在本机使用build/bin里的可执行文件的话,可以跳过安装。需要系统级安装时,INSTALL.GIT.md 的流程是:
sudo make install注意这一步会动用 root 权限把tesseract、libtesseract及训练工具写入系统前缀的bin、lib、include等目录,并安装 tesseract 的 CMake 配置与 pkgconfig 文件,会影响系统范围内已有的 Tesseract 版本。
常见配置失败与限制
- 在源码目录里跑 cmake:直接 FATAL_ERROR,按提示改为在
build等独立目录执行。 - 找不到 Leptonica:configure 报
Cannot find required library Leptonica. Quitting!。CMake 先按 CONFIG 方式查找,找不到再退回 pkg-config 的lept检查,两个路径都失败才会报错;可用-DLeptonica_DIR=path给 CMake 提供 leptonica 的查找提示(见 CMakeLists.txt 中的注释)。 - 缺少 pkg-config:训练工具子目录依赖它探测 ICU 与 pango;没有 pkg-config 时 ICU/pango 相关工具不会编译(src/training/CMakeLists.txt 中有相应说明)。
- LTO 在 arm/RBPi 上不可用:CMakeLists.txt 在 NEON 环境下会提示
LTO build is not supported on arm/RBPi.并自动关闭 LTO,这属于预期行为,不需要处理。
完成构建后,build/bin里的lstmtraining、text2image、unicharset_extractor等工具就是 Tesseract 训练流程的入口;后续具体训练步骤不在本文范围内,可参考 README.md 中指向的 Tesseract Training 文档。
【免费下载链接】tesseractTesseract Open Source OCR Engine (main repository)项目地址: https://gitcode.com/GitHub_Trending/te/tesseract
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考