菜单

概述

相关源文件

Tesseract OCR 是一款开源的光学字符识别引擎,可将图像中的文本转换为机器可读的格式。本页面提供了 Tesseract OCR 系统的概述、其架构和主要组件。有关构建和安装 Tesseract 的信息,请参阅 构建和部署,有关其 API 的详细信息,请参阅 API 参考

Tesseract 由两个主要组件组成:

  1. libtesseract - 实现 OCR 引擎的 C++ 库
  2. tesseract - 用于 OCR 处理的命令行程序

版本和历史

Tesseract 最初由惠普实验室于 1985 年至 1994 年间开发,并在 1996 年和 1998 年进行了额外开发。HP 于 2005 年开源了它,Google 于 2006 年至 2018 年期间接管了开发。

根据当前文档,Tesseract 版本为 5.5.0(于 2024 年 11 月 10 日发布)。它同时包含基于 LSTM 神经网络的引擎和传统的 OCR 引擎。由于 LSTM 引擎性能更优,已成为默认引擎。

来源: README.md20-54 ChangeLog1-20 VERSION1-2

核心功能

  • 通用文本识别,开箱即支持 100 多种语言
  • 多种输入格式,包括 PNG、JPEG 和 TIFF
  • 多种输出格式,包括纯文本、hOCR(HTML)、PDF、仅含不可见文本的 PDF、TSV、ALTO 和 PAGE
  • 两种识别引擎:
    • 基于 LSTM 神经网络的引擎(默认)
    • 传统的 OCR 引擎(可选)
  • 训练能力,用于识别其他语言和字符集

来源: README.md34-44

系统架构

Tesseract 遵循模块化架构,组件之间有明确的职责分离。

高级架构图

来源: src/api/baseapi.cpp58-168 include/tesseract/baseapi.h76-145 src/ccmain/tesseractclass.h178-204

OCR 处理管道

下图说明了 Tesseract 中 OCR 过程的主要阶段:

来源: src/ccmain/thresholder.cpp38-276 src/api/baseapi.cpp500-550 src/lstm/lstmrecognizer.cpp50-138

关键组件

API 层

API 层提供了应用程序与 Tesseract OCR 引擎交互的接口。

  1. TessBaseAPI - 暴露大部分功能的 C++ 主 API 类
  2. C API - TesseractBaseAPI 的 C 语言包装器,供非 C++ 应用程序使用
  3. Page/Result Iterators - 用于按不同级别(块、段落、行、单词、符号)迭代识别文本的类

来源: include/tesseract/baseapi.h76-373 src/api/baseapi.cpp161-393 include/tesseract/resultiterator.h1-100 include/tesseract/renderer.h47-127

核心组件:Tesseract 类

Tesseract 类是实现 OCR 功能的核心引擎。它继承自提供单词识别功能的 Wordrec 类。

来源: src/ccmain/tesseractclass.h178-317 src/ccmain/tesseractclass.cpp53-167

识别引擎

Tesseract 具有两个 OCR 引擎:

  1. LSTM 神经网络引擎 - 具有更好准确性的现代引擎
  2. 传统/遗留引擎 - Tesseract 的原始引擎

LSTM 引擎

LSTM 引擎使用循环神经网络(特别是长短期记忆网络)来识别文本。它将文本作为序列进行处理,并且与语言无关。

来源: src/lstm/lstmrecognizer.cpp50-138 src/lstm/lstmrecognizer.h51-100

遗留引擎

遗留引擎使用基于特征的方法,结合模式匹配和自适应分类来识别文本。

图像处理组件

Tesseract 中的图像处理主要由 ImageThresholder 类处理,该类负责:

  1. 将输入图像转换为二进制格式以供处理
  2. 提供应用不同阈值技术的各种方法
  3. 管理用于处理的图像矩形

来源: src/ccmain/thresholder.cpp38-100 src/ccmain/thresholder.h1-100

硬件优化

Tesseract 为各种 CPU 架构提供了 SIMD(单指令多数据)优化。

  • AVX, AVX2, FMA - 适用于 Intel/AMD 处理器
  • NEON - 适用于 ARM 处理器
  • RVV - 适用于 RISC-V 处理器

SIMDDetect 类可检测可用的硬件功能并选择合适的优化函数。

来源: src/arch/simddetect.cpp75-150 src/arch/simddetect.h1-50

命令行用法

Tesseract 可以从命令行使用,基本语法如下:

tesseract imagename outputbase [-l lang] [--oem ocrenginemode] [--psm pagesegmode] [configfiles...]

其中

  • imagename 是输入图像的名称
  • outputbase 是输出文件的前缀
  • -l lang 指定要使用的语言
  • --oem 指定 OCR 引擎模式(0 = 仅遗留,1 = 仅 LSTM,2 = 遗留 + LSTM,3 = 默认)
  • --psm 指定页面分割模式

来源: README.md70-76 src/tesseract.cpp20-93

训练数据文件

Tesseract 依赖于训练好的数据文件(.traineddata)进行识别。这些文件包含

  1. 用于文本识别的 LSTM 模型
  2. 特定语言的信息
  3. 字典数据
  4. 字符集(UNICHARSET)信息

TessdataManager 类管理对这些训练数据文件及其组件的访问。

来源: src/ccmain/tessedit.cpp70-147 src/ccutil/tessdatamanager.h1-50

快速入门

要在您的应用程序中使用 Tesseract

  1. 使用 TessBaseAPI::Init()初始化 API
  2. 使用 TessBaseAPI::SetImage()设置图像
  3. 使用 TessBaseAPI::Recognize()识别文本
  4. 使用 TessBaseAPI::GetUTF8Text() 等方法获取结果
  5. 使用 TessBaseAPI::End()进行清理

有关 API 的更详细信息,请参阅 API 参考 部分。

来源: src/api/baseapi.cpp297-363 README.md79-85