此页面介绍了 Tesseract OCR 代码库中使用的集成测试框架和方法。与测试隔离组件的单元测试不同,集成测试用于验证 Tesseract 的不同部分在组件边界上是否能正确协同工作。这些测试从输入到输出验证系统的行为,确保 OCR 管道在实际使用场景中按预期运行。
Tesseract 的集成测试基础设施由自动测试组成,这些测试既可以在持续集成 (CI) 工作流中运行,也可以由开发人员本地执行。这些测试需要测试数据,包括样本图像、语言模型和字体。
来源: unittest/README.md .github/workflows/cmake.yml .github/workflows/autotools.yml
运行集成测试需要以下数据:
测试图像 - 位于 test/testing/ 目录中,包括如下样本:
phototest.tif - 英语文本样本raaj.tif - 印地语文本样本viet.tif - 越南语文本样本hebrew.png - 希伯来语文本样本arabic.tif - 阿拉伯语文本样本eurotext.tif - 欧洲语言文本样本语言模型 - 需要整理在几个目录中的 tessdata 文件
tessdata/ - 标准语言数据tessdata_best/ - 高精度模型tessdata_fast/ - 快速、精度较低的模型字体 - 为正确渲染和测试不同脚本所需的多样化字体
CI 工作流使用以下方式自动下载测试数据:
来源: unittest/README.md .github/workflows/unittest.yml .github/workflows/cmake.yml
Tesseract 使用 GitHub Actions 在多种平台、编译器和配置上进行自动集成测试。
来源: .github/workflows/cmake.yml .github/workflows/autotools.yml .github/workflows/autotools-macos.yml .github/workflows/msys2.yml .github/workflows/vcpkg.yml
Autotools 工作流 (autotools.yml, autotools-macos.yml)
CMake 工作流 (cmake.yml)
MSYS2 工作流 (msys2.yml)
VCPKG 工作流 (vcpkg.yml)
特殊配置测试
unittest-disablelegacy.yml)autotools-openmp.yml)unittest.yml)来源: .github/workflows/cmake.yml .github/workflows/autotools.yml .github/workflows/autotools-openmp.yml .github/workflows/unittest-disablelegacy.yml
命令行界面 (CLI) 测试用于验证 tesseract 可执行文件在不同用例下的正确性。
来源: .github/workflows/cmake.yml120-127 .github/workflows/autotools.yml80-87 .github/workflows/autotools-openmp.yml57-82
CLI 测试验证了多语言和多脚本的识别能力
版本验证:
语言列表验证:
识别测试:
来源: .github/workflows/cmake.yml120-127 .github/workflows/autotools.yml80-87
性能基准测试使用特定的基准图像来衡量识别速度
来源: .github/workflows/autotools-openmp.yml52-82
Tesseract 的 API 集成测试用于验证 C++ API 在集成到外部应用程序时是否能正常工作。
来源: .github/workflows/cmake.yml129-142 .github/workflows/autotools.yml89-94 unittest/layout_test.cc unittest/dawg_test.cc
名为 basicapitest.cpp 的文件用于验证核心 API 功能
编译:该测试使用特定于平台的命令进行编译
测试执行:
basicapitest 验证了:
来源: .github/workflows/cmake.yml129-142 .github/workflows/autotools.yml89-94 .github/workflows/vcpkg.yml47-85
layout_test.cc 测试 Tesseract 是否能正确地
此测试将布局分析组件与识别管道连接起来,以确保集成功能。
dawg_test.cc 测试字典工具之间的集成
要本地运行集成测试,您需要使用所需数据设置测试环境。
克隆包含子模块的存储库:
下载测试数据:
构建 Tesseract 并支持测试:
运行命令行测试:测试基本识别功能
运行基本 API 测试:
同时运行单元和集成测试:
审查测试结果:有关测试失败的详细结果,请检查测试输出日志
来源: CONTRIBUTING.md INSTALL.GIT.md unittest/README.md CONTRIBUTING.md79-80
集成测试是对 单元测试 部分的补充。单元测试侧重于隔离测试单个组件,而集成测试则验证这些组件是否能正确地协同工作。
在 Tesseract 中,unittest/ 目录中的一些测试在单元测试和集成测试之间架起了桥梁,测试了多个组件之间的交互。这些测试使用 GoogleTest 框架作为测试结构,但测试的功能跨越了模块边界。
测试构建系统确保单元测试和集成测试都得到运行