菜单

集成测试

相关源文件

此页面介绍了 Tesseract OCR 代码库中使用的集成测试框架和方法。与测试隔离组件的单元测试不同,集成测试用于验证 Tesseract 的不同部分在组件边界上是否能正确协同工作。这些测试从输入到输出验证系统的行为,确保 OCR 管道在实际使用场景中按预期运行。

测试基础设施概述

Tesseract 的集成测试基础设施由自动测试组成,这些测试既可以在持续集成 (CI) 工作流中运行,也可以由开发人员本地执行。这些测试需要测试数据,包括样本图像、语言模型和字体。

来源: unittest/README.md .github/workflows/cmake.yml .github/workflows/autotools.yml

测试数据要求

运行集成测试需要以下数据:

  1. 测试图像 - 位于 test/testing/ 目录中,包括如下样本:

    • phototest.tif - 英语文本样本
    • raaj.tif - 印地语文本样本
    • viet.tif - 越南语文本样本
    • hebrew.png - 希伯来语文本样本
    • arabic.tif - 阿拉伯语文本样本
    • eurotext.tif - 欧洲语言文本样本
  2. 语言模型 - 需要整理在几个目录中的 tessdata 文件

    • tessdata/ - 标准语言数据
    • tessdata_best/ - 高精度模型
    • tessdata_fast/ - 快速、精度较低的模型
  3. 字体 - 为正确渲染和测试不同脚本所需的多样化字体

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

主要 CI 工作流

  1. Autotools 工作流 (autotools.yml, autotools-macos.yml)

    • 测试 Linux 和 macOS 环境
    • 使用不同编译器(GCC、Clang)进行测试
    • 包括命令行测试、API 测试、单元测试和基准测试
    • 测试 OpenMP 支持的有和无的情况
  2. CMake 工作流 (cmake.yml)

    • 测试 Linux 和 macOS 环境
    • 使用 Ninja 构建系统
    • 包括命令行测试和 API 测试
  3. MSYS2 工作流 (msys2.yml)

    • 在 Windows 上使用 MSYS2 进行测试
    • 包括命令行测试
  4. VCPKG 工作流 (vcpkg.yml)

    • 在 Windows 上使用 VCPKG 和 CMake 进行测试
    • 包括命令行测试和 API 测试
  5. 特殊配置测试

    • 禁用传统引擎测试 (unittest-disablelegacy.yml)
    • OpenMP 特定测试 (autotools-openmp.yml)
    • 用于捕获内存问题的 Sanitizer 测试 (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 测试验证了多语言和多脚本的识别能力

  1. 版本验证:

  2. 语言列表验证:

  3. 识别测试:

来源: .github/workflows/cmake.yml120-127 .github/workflows/autotools.yml80-87

基准测试

性能基准测试使用特定的基准图像来衡量识别速度

来源: .github/workflows/autotools-openmp.yml52-82

API 集成测试

Tesseract 的 API 集成测试用于验证 C++ API 在集成到外部应用程序时是否能正常工作。

来源: .github/workflows/cmake.yml129-142 .github/workflows/autotools.yml89-94 unittest/layout_test.cc unittest/dawg_test.cc

基本 API 测试

名为 basicapitest.cpp 的文件用于验证核心 API 功能

  1. 编译:该测试使用特定于平台的命令进行编译

  2. 测试执行:

basicapitest 验证了:

  • 使用不同语言模型进行 API 初始化
  • 图像加载和处理
  • 使用不同设置进行识别
  • 结果检索和准确性

来源: .github/workflows/cmake.yml129-142 .github/workflows/autotools.yml89-94 .github/workflows/vcpkg.yml47-85

布局测试

layout_test.cc 测试 Tesseract 是否能正确地

  • 识别块类型(文本、图像、表格)
  • 按正确的阅读顺序处理文本
  • 妥善处理从右到左的语言
  • 将轮廓包含在适当的块内

此测试将布局分析组件与识别管道连接起来,以确保集成功能。

来源: unittest/layout_test.cc

字典测试

dawg_test.cc 测试字典工具之间的集成

  • 测试从单词列表到定向无环词图(DAWG)的转换
  • 测试从压缩字典中提取单词列表
  • 验证在识别过程中字典查找是否正常工作

来源: unittest/dawg_test.cc

本地运行集成测试

要本地运行集成测试,您需要使用所需数据设置测试环境。

设置要求

  1. 克隆包含子模块的存储库:

  2. 下载测试数据:

  3. 构建 Tesseract 并支持测试:

运行测试

  1. 运行命令行测试:测试基本识别功能

  2. 运行基本 API 测试:

  3. 同时运行单元和集成测试:

  4. 审查测试结果:有关测试失败的详细结果,请检查测试输出日志

来源: CONTRIBUTING.md INSTALL.GIT.md unittest/README.md CONTRIBUTING.md79-80

与单元测试集成

集成测试是对 单元测试 部分的补充。单元测试侧重于隔离测试单个组件,而集成测试则验证这些组件是否能正确地协同工作。

在 Tesseract 中,unittest/ 目录中的一些测试在单元测试和集成测试之间架起了桥梁,测试了多个组件之间的交互。这些测试使用 GoogleTest 框架作为测试结构,但测试的功能跨越了模块边界。

测试构建系统确保单元测试和集成测试都得到运行

来源: .gitmodules unittest/README.md CONTRIBUTING.md79-80