Tesseract OCR 是一款开源的光学字符识别引擎,可将图像中的文本转换为机器可读的格式。本页面提供了 Tesseract OCR 系统的概述、其架构和主要组件。有关构建和安装 Tesseract 的信息,请参阅 构建和部署,有关其 API 的详细信息,请参阅 API 参考。
Tesseract 由两个主要组件组成:
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
来源: README.md34-44
Tesseract 遵循模块化架构,组件之间有明确的职责分离。
来源: src/api/baseapi.cpp58-168 include/tesseract/baseapi.h76-145 src/ccmain/tesseractclass.h178-204
下图说明了 Tesseract 中 OCR 过程的主要阶段:
来源: src/ccmain/thresholder.cpp38-276 src/api/baseapi.cpp500-550 src/lstm/lstmrecognizer.cpp50-138
API 层提供了应用程序与 Tesseract OCR 引擎交互的接口。
来源: include/tesseract/baseapi.h76-373 src/api/baseapi.cpp161-393 include/tesseract/resultiterator.h1-100 include/tesseract/renderer.h47-127
Tesseract 类是实现 OCR 功能的核心引擎。它继承自提供单词识别功能的 Wordrec 类。
来源: src/ccmain/tesseractclass.h178-317 src/ccmain/tesseractclass.cpp53-167
Tesseract 具有两个 OCR 引擎:
LSTM 引擎使用循环神经网络(特别是长短期记忆网络)来识别文本。它将文本作为序列进行处理,并且与语言无关。
来源: src/lstm/lstmrecognizer.cpp50-138 src/lstm/lstmrecognizer.h51-100
遗留引擎使用基于特征的方法,结合模式匹配和自适应分类来识别文本。
Tesseract 中的图像处理主要由 ImageThresholder 类处理,该类负责:
来源: src/ccmain/thresholder.cpp38-100 src/ccmain/thresholder.h1-100
Tesseract 为各种 CPU 架构提供了 SIMD(单指令多数据)优化。
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)进行识别。这些文件包含
TessdataManager 类管理对这些训练数据文件及其组件的访问。
来源: src/ccmain/tessedit.cpp70-147 src/ccutil/tessdatamanager.h1-50
要在您的应用程序中使用 Tesseract
TessBaseAPI::Init()初始化 APITessBaseAPI::SetImage()设置图像TessBaseAPI::Recognize()识别文本TessBaseAPI::GetUTF8Text() 等方法获取结果TessBaseAPI::End()进行清理有关 API 的更详细信息,请参阅 API 参考 部分。