此页面提供了 Tesseract OCR 中使用的识别引擎的全面概述。识别引擎是负责将文档图像中的视觉信息转换为实际文本的核心组件。Tesseract 目前拥有两个不同的识别引擎,它们基于不同的原理运行:LSTM 神经网络引擎和传统/遗留引擎。有关 OCR 管道的整体信息,请参阅 OCR 管道。
Tesseract 的识别功能分为两个不同的引擎,它们在字符识别方面采用不同的方法
LSTM 引擎:更现代的方法,使用深度学习和长短期记忆神经网络直接从图像特征识别字符序列。该引擎通常对大多数语言提供更高的准确性。
传统/遗留引擎:原始的 Tesseract 引擎,使用基于特征的方法和自适应分类。它通过提取字符图像的几何特征并将其与原型进行匹配来工作。
来源: src/lstm/recodebeam.cpp src/classify/adaptmatch.cpp src/classify/intproto.cpp
LSTM(长短期记忆)引擎是一个基于神经网络的识别系统,它将文档图像作为特征序列进行处理,因此对于连笔脚本和复杂布局特别有效。
LSTM 引擎通过以下方式处理图像
来源: src/lstm/recodebeam.cpp82-90 src/lstm/recodebeam.cpp200-219
LSTM 引擎使用一种称为束搜索的复杂技术,将网络的原始输出转换为连贯的文本。这在 RecodeBeamSearch 类中实现,该类维护对文本的多种可能解释(即“束”),并选择最有可能的一种。
束搜索
控制束搜索的关键参数包括
kBeamWidths:控制搜索束的大小来源: src/lstm/recodebeam.cpp30-33 src/lstm/recodebeam.cpp82-90 src/lstm/recodebeam.cpp742-884
传统引擎使用基于特征的方法和自适应分类来识别文本。它由两个主要组件组成:整数匹配器(Integer Matcher)和自适应分类器(Adaptive Classifier)。
整数匹配器
来源: src/classify/intmatcher.cpp src/classify/intproto.cpp220-238
自适应分类器
关键函数和结构
AdaptiveClassifier():自适应识别的主入口点DoAdaptiveMatch():执行实际的模板匹配AdaptToChar():使用新示例更新模板ADAPT_TEMPLATES_STRUCT:存储已适应的模板INT_CLASS_STRUCT:表示带有原型的字符类来源: src/classify/adaptmatch.cpp src/classify/adaptmatch.cpp685-765
两种引擎都依赖于特征提取,尽管它们使用不同的方法
传统引擎使用
来源: src/classify/intproto.cpp src/classify/adaptmatch.cpp778-797
LSTM 引擎
Tesseract 根据以下因素智能地选择合适的引擎
识别后,结果通过以下方式处理
ResultIterator 和 LTRResultIterator 类,它们提供对识别结果的访问识别结果包括
来源: src/ccmain/ltrresultiterator.cpp src/api/hocrrenderer.cpp119-145 src/api/altorenderer.cpp132-156
来源: src/classify/adaptmatch.cpp src/lstm/recodebeam.cpp82-90
Tesseract 的双引擎方法为不同的 OCR 任务提供了灵活性。LSTM 引擎以其神经网络基础代表了 OCR 技术的尖端水平,而传统引擎则为旧应用程序和特定用例提供了兼容性。
了解这些引擎的工作原理对于通过引擎选择、参数调整或自定义训练来获得 Tesseract 的最佳结果至关重要。有关特定引擎的更多详细信息,请参阅 LSTM 引擎 和 传统引擎。