跳到内容。

Tesseract 4.00 中新的神经网络系统概述

介绍

Tesseract 4.00 包含一个新的神经网络子系统,配置为文本行识别器。它起源于 OCRopus 的 基于 Python 的 LSTM 实现,但已在 C++ 中为 Tesseract 进行了完全重新设计。Tesseract 中的神经网络系统早于 TensorFlow,但与其兼容,因为存在一种名为 变量图规范语言 (VGSL) 的网络描述语言,它也适用于 TensorFlow。请参阅 https://github.com/tensorflow/models/tree/master/research/street

VGSL 的理念是可以构建神经网络并进行训练,而无需学习很多东西。无需学习 Python、TensorFlow,甚至无需编写任何 C++ 代码。只需充分了解 VGSL 规范语言以构建语法正确的网络描述即可。对各种神经网络层类型及其组合方式的一些基本了解将非常有帮助。

与 Tesseract 集成

Tesseract 4.00 神经网络子系统已集成到 Tesseract 中,作为行识别器。它可以与现有的布局分析一起使用来识别大型文档中的文本,也可以与外部文本检测器一起使用来识别单个文本行图像中的文本。

神经网络引擎是 4.00 的默认引擎。要识别单个文本行图像中的文本,请使用 SetPageSegMode(PSM_RAW_LINE)。这可以在命令行中使用 -psm 13

神经网络引擎已集成以启用与 Tesseract 3.04 协作的多语言模式,但将在未来的版本中进行改进。现在支持中文、日文和韩文的垂直文本,应自动检测到。

硬件和 CPU 要求

Tesseract 4.00 神经网络子系统对计算要求很高,使用的 CPU 资源是基本 Tesseract 的十倍左右,但如果您的平台支持,则可以通过以下方式缓解影响

在具有多个核心和 AVX 的机器上,一个简单的英文图像可能需要两倍的实际时间,并且使用的 CPU 是基本 Tesseract 的 7 倍,而印地语则比基本 Tesseract 使用更多的 CPU,但实际上在实际运行时间上更快。

如果缺少上述组件,则存在一个更慢的纯 C++ 实现,使代码仍然能够工作。

支持小端和大端系统。

面向开源贡献者

初始实现缺少以下内容

实现基础

所有网络层类型都源自 Network 基类。 Plumbing 子类是用于以某种方式操作其他层的层的基类,例如通过重新整形其输入/输出或组织一组层。

输入/输出数据“张量”是 NetworkIO,权重存储在 WeightMatrix 中,两者都包含 Tesseract GENERIC_2D_ARRAY 来保存数据。 LSTMRecognizer 提供将文本行图像转换为一系列 Tesseract WERD_RES 类的更高级别的抽象。同样, LSTMTrainer 处理在具有 UTF-8 字符串“真值”的文本行图像上训练网络的抽象。 NetworkBuilder 负责将 VGSL 规范语言转换为网络元素图。

添加新的层类型

新的层类必须从 NetworkPlumbing 派生,并至少实现以下虚方法

具有权重的层还必须实现 Update,以使用一组梯度更新权重。可能还需要实现一些其他方法,具体取决于新层的特定要求。有关可能需要实现的方法的更多信息,请参阅 network.h