本文档提供了 Tesseract OCR 系统中使用的核心数据结构的概览。这些基础组件构成了系统其余部分的基础,从基本容器到文本元素和文档组件的专门表示。有关序列化和文件处理的信息,请参阅 API 参考,有关图像数据管理的详细信息,请参阅图像数据管理。
Tesseract 实现了几种专门的容器类,它们在整个系统中提供核心功能。
GenericVector 是一个模板类,它提供类似于 std::vector 的动态数组功能,但具有 Tesseract 所需的专门方法,例如简单和复杂类型的序列化和反序列化。
GenericVector 的主要特性
PointerVector 是一个指针的子类,它提供自动删除指向的对象以及正确的序列化/反序列化。
来源: src/ccutil/genericvector.h38-802
UnicityTable 提供了一种使对象唯一的方法,通过整数 ID 来操作它们。它本质上是 GenericVector 的包装器,可确保元素的唯一性。
主要功能
来源: src/ccutil/unicity_table.h37-123
Tesseract 实现三种具有不同特性的链表。这些列表在系统中被广泛使用。
ConsList (CLIST):一个单向链表,具有单独的“cons 单元”来包含列表指针和数据指针。这使得一个对象可以同时存在于多个列表中。
IntrusiveForwardList (ELIST):一个单向链表,其中链接数据嵌入在对象本身中。每个元素一次只能存在于一个列表中。
IntrusiveList (ELIST2):一个双向链表,具有嵌入的链接,允许双向遍历。
每种列表类型都提供
它们之间的区别在于链接的存储方式(单独或嵌入)以及遍历能力(仅前向或双向)。
来源
序列化框架提供了一种将 Tesseract 数据结构读取和写入文件的一致方法。
TFile 是一个简单的文件类,它提供从内存和外部文件系统中可移植的文件输入。它处理字节序(endianness)的字节交换,并提供读取和写入各种数据类型的方法。
主要功能
来源
Tesseract 在 OCR 处理过程中使用一系列类来管理图像数据和文档。
ImageData 包含有关单个图像的信息,包括
DocumentData 管理构成文档的 ImageData 实例的集合,具有以下功能:
DocumentCache 管理多个 DocumentData 实例,提供
来源
这些结构表示和管理不同级别的分析中的文本元素。
WERD 代表 OCR 系统中的一个单词,包含
C_BLOB)BLOBNBOX 包装了一个连接组件块(C_BLOB),并附带用于文本排序的附加信息
ColPartition 包含页面分区,这些分区大致对应于文本行或其他逻辑单元
BLOBNBOX 对象的集合这些结构从基本的块元素到文本行和列形成一个层次结构,支持 OCR 和布局分析过程。
来源
TabVector 表示一个近乎垂直的向量,对应于制表符,用于检测和分析表格结构。
歧义管理结构在 OCR 过程中处理字符歧义。
歧义管理系统处理 OCR 过程中的歧义字符,包括
来源
Tesseract 的许多核心数据结构都经过了特定的内存管理和性能考量设计
基于内存的缓存:DocumentCache 和 DocumentData 实现复杂的内存管理,以平衡性能和资源使用
自定义容器与 STL:Tesseract 出于多种原因实现了自定义容器,而不是使用 STL 等效物
侵入式列表:ELIST 和 ELIST2(侵入式列表)类将链接直接嵌入对象中,而不是使用单独的节点,从而节省内存并提高局部性。
对象所有权:对象所有权需要特别注意
PointerVector 提供自动删除序列化效率:序列化框架针对复杂数据结构的有效读写进行了优化,并对字节序差异进行了特殊处理。
来源
本文档中介绍的核心数据结构构成了 Tesseract OCR 系统的其余部分的基础
核心数据结构为 OCR 管道的所有阶段提供了基本功能
容器类在处理的各个阶段广泛用于管理数据集合。
图像和文档结构是输入处理阶段和训练数据管理的核心。
文本元素结构构成了布局分析和文本识别的基础。
序列化框架支持模型、配置和结果的加载和保存。
理解这些核心数据结构对于使用或扩展 Tesseract OCR 系统至关重要。
来源