npm 包 @tessdata/bos 使用教程

阅读时长 8 分钟读完

前言

随着越来越多的人开始关注文本识别领域,Tesseract 成为了最为受欢迎的开源 OCR 引擎之一。而她的一个重要组成部分就是训练数据(Tessdata)。Tessdata 中包含了 Tesseract 进行识别所需要的字符和词语的信息。然而,对于一些特殊场景,如中文文本的 OCR,官方提供的 Tessdata 并不能满足我们的需求。因此,我们需要自行训练模型并生成 Tessdata。

在这个过程中,我们需要使用到的一款工具就是 Tesseract-Bos-Shell。又因为 Bos 可以代表 Best OCR Settings,因此,这个工具可以帮助我们获取最佳的 OCR 设置,训练我们的模型,最终生成我们需要的 Tessdata。而我们使用的 Tesseract-Bos-Shell,也就是本文要介绍的 npm 包 @tessdata/bos,是 Tesseract-Bos-Shell 的 Node.js 封装。

在本文中,我们将针对不同场景展示 @tessdata/bos 的使用方法,以便读者们快速上手使用。

安装

在使用 @tessdata/bos 前,我们需要在项目中安装该模块和一些必要的依赖。

其中,tesseract.js 和 leptonica 分别是 Tesseract 的 JavaScript 封装和图像处理库。不过,在这篇文章中,我们将不再涉及 tesseract.js 和 leptonica 的使用细节,主要关注 @tessdata/bos 的使用。

使用场景一:获取 OCR 设置

我们先来简单介绍一下工具箱的用法。

该命令主要用于获取 OCR 设置,其大致过程如下:

  1. 根据传入的 <pages-dir> 中的样本图像,计算每个字符的特征值。
  2. 根据特征值,针对样本图像中的文字,计算最适合的 OCR 设置。
  3. 将这些设置写入到 <output-dir>/bos_best_configs 文件夹下。

假设我们有如下的样本图像和正确的标注:

对于这个例子,我们可以使用下面的代码来获取 OCR 设置:

-- -------------------- ---- -------
----- - ---- - - ------------------------
----- --- - ------------------------

----- -------- - ---------
----- --------- - -------

--------- --- -- ----------- -- -------------- ----- ------- ------- -- -
  -- ---- -- ------- -
    ----------------- -- -------
  - ---- -
    ----- ------- - -------------------------------
    --------------------
  -
--

其中,bos.parseBestConfigs 用于解析结果文件,并将结果转化为简单易用的对象。执行结果输出如下:

在使用这些设置进行识别之前,我们还需要训练模型并生成 Tessdata。这个过程可能需要一些时间,具体过程会在后面介绍。

使用场景二:基于 OCR 设置识别图像

在获取 OCR 设置之后,我们就可以运用这些设置,进行 OCR 识别了。下面,我们将演示如何将这些 OCR 设置应用在图像中。

首先,我们需要准备一个带有图像文字的示例图像。

-- -------------------- ---- -------
----- - ------------ - - -----------------------

----- --- - ---------------------------------------------------

-------------------------- -- -
  --------------------- -
    ----- ----------
  ---------- ----- - ---- - -- -- -
    -----------------
  --
--

这段代码使用 tesseract.js 对图像进行了 OCR 识别,并将识别结果输出到控制台。但是,由于是官方提供的 Tessdata,所以在对含有一些生僻字或特殊场景的文本进行识别时,会表现得不是非常好。不过,我们可以运用 @tessdata/bos 获取到的 OCR 设置来提升识别的准确性。

-- -------------------- ---- -------
----- - ------------ - - -----------------------
----- --- - ------------------------

----- --- - ---------------------------------------------------

----- ---------- - -----------------------------

-------------------------- -- -
  --------------------- -
    ----- ----------
    ------------------------ -----------------------------------
    ---------------------- ---------------------------------
    ------------------------------ -----------------------------------------
    ---------------------------- ---------------------------------------
  ---------- ----- - ---- - -- -- -
    -----------------
  --
--

在这个例子中,我们使用 bos.parseBestConfigs 方法来解析文件夹中的 OCR 设置。另外,我们还可以根据不同的场景,对获取到的设置进行调整。

使用场景三:生成 Tessdata

在获取到 OCR 设置之后,我们需要使用这些识别策略,来训练我们自己的 OCR 模型。Tesseract 的主要训练流程可以分为以下几个步骤:

  1. 合并所有训练数据
  2. 根据字符读入字符图像,并对字符切片
  3. 将字符切片放置到模板中
  4. 产生随机样本,并根据 OCR 设置生成新模型
  5. 对模型进行评估
  6. 重复步骤 4 和 5,直到模型评估达到预定义的水平
  7. 根据模型,生成 Tessdata 文件

其中,步骤 7 就是最终要实现的目标,也是使用 @tessdata/bos 的重点。

假如我们已经汇总了我们的训练数据,我们可以使用 bos makebox 生成字符切片,具体使用方法如下:

在这个例子中,<img-file> 是表示图像文件路径,<box-file> 是将要生成的字符切片文件路径。除此之外,bos 还提供了一系列参数,可以手动调整字符切片策略。

通过下面的代码,我们可以举例说明如何使用 bos 进行训练,并生成 Tessdata:

-- -------------------- ---- -------
----- - ---- - - ------------------------
----- --- - ------------------------

----- -------- - ---------
----- ---------- - -------

--------- ------------- ----------- ----------------------------
--------- ---------- ----------- ----------------
--------- ------- -------------------------- -------------------- -- -------- -- ---------
--------- -------- ------------------------ ----- ------- ------- -- -
  -- ---- -- ------- -
    ----------------- -- -------
  - ---- -
    -------------------
    ----- ------- - ----------------------------------
    --------------------
  -
--

相比于第一个场景,我们多了几个步骤。首先,我们运用 bos combine_tiffs 将多张图像拼接到一起,方便后续处理。然后,我们运用 bos gen_textbx 为这些图像生成对应的字符切片。最后,我们使用 bos makebox 生成个个字符的字符切片文件,作为后续训练的输入。关于 bos lstmeval,这是用于评估模型识别准确率的命令。

由于训练时间比较长,因此在这里,我们不会介绍整个训练流程的具体实现细节。不过读者们可以参考 tesseract.js 提供的 OCR 训练文档,使用 @tessdata/bos 更便捷地训练模型。

总结

在本文章中,我们介绍了如何使用 npm 包 @tessdata/bos 来辅助进行 OCR 模型训练。

针对不同场景,我们演示了如何使用 bos 获取最佳 OCR 设置,如何应用 OCR 设置进行 OCR 识别,以及如何生成对应的 Tessdata 文件。

使用 @tessdata/bos,我们可以轻松从底层开始,在实践中提升我们的 OCR 级别。当然,这样的技术成果无论在学术研究、还是市场需求上都有着广泛的应用,值得我们进一步探究。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6005624a81e8991b448df8bb

纠错
反馈