跳到内容。

用户模式 API 示例

当识别包含非字典单词但遵循特定字母和数字模式的字段类型(例如 \A\A\d\d\d\d\A\A\A\d\d\d\A)时,用户模式可能很有用。

本文档提供了一个简单示例,说明如何在 C++ 中使用 tesseract-ocr API (4.x) 应用 *用户模式* 来改进识别。预计 tesseract-ocr 已正确安装,包括所有依赖项。预计用户熟悉 C++、在他们的平台上编译和链接程序。

这基于 tesseract-ocr 论坛中提供的示例,并针对 tesseract 4.x 的最新功能实现进行了更新。

请注意,虽然此示例在应用 user_patterns 后获得了 100% 的准确率,但这并不总是这样。用户模式(如用户词典)仅作为解码时的 *提示* 应用,但不是唯一的。 对图像进行预处理 通常可以提高识别的质量,建议这样做。

要求

为了应用用户模式来改进识别,需要以下内容。

用户模式文件

*用户模式文件* 应包含每行一个模式,采用 UTF-8 格式。在选择要包含的模式时,请注意提供非常通用的模式会导致 tesseract 运行速度变慢。最佳结果可以通过在文件中包含单个模式来获得。

可以在 trie.h 中找到有关可使用模式类型的详细信息。

用户模式文件示例

创建一个文本文件,并将每个模式写入单独的行,使用 UNIX 行尾(换行符)并在末尾留一个空白行,例如

\A\A\d\d\d\d\A

在以下内容中,我们假设您将该模式文件命名为 path/to/my.patterns

配置文件

对于 API,需要在 *配置文件* 中指定有关 *用户模式文件* 的信息。

(对于 CLI,这也适用,但也有一个直接针对 *用户模式文件* 的选项。)

配置文件示例

创建一个文本文件,并在其中逐字写入 user_patterns_file,后跟路径名称,在一行中,使用 UNIX 行尾(换行符)并在末尾留一个空白行,例如

user_patterns_file path/to/my.patterns

在以下内容中,我们假设您将该配置文件命名为 path/to/my.patterns.config

CLI 示例

从命令行,用户模式可以按如下方式调用

tesseract input.tif output --user-patterns path/to/my.patterns

API 示例

将以下 *图像文件* (Arial.png) 作为输入

以下代码对该 *图像文件* 使用上面的 *用户模式文件* 和 *配置文件*

#include <tesseract/baseapi.h>
#include <leptonica/allheaders.h>

int main()
{
    Pix *image;
    char *outText;
    char *configs[]={"path/to/my.patterns.config"};
    int configs_size = 1;
    tesseract::TessBaseAPI *api = new tesseract::TessBaseAPI();
    if (api->Init(NULL, "eng", tesseract::OEM_LSTM_ONLY, configs, configs_size, NULL, NULL, false)) {
      fprintf(stderr, "Could not initialize tesseract.\n");
      exit(1);
    }
    image = pixRead("Arial.png");
    api->SetImage(image);
    outText = api->GetUTF8Text();
    printf(outText);
    api->End();
    delete api;
    delete [] outText;
    pixDestroy(&image);
    return 0;
}

构建和运行脚本

#!/bin/bash

export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/local/include
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

g++ -std=c++17  -o my.patterns.api my.patterns.api.cpp   -llept -ltesseract

export TESSDATA_PREFIX=~/tessdata_best

./my.patterns.api > Arial-patterns.txt

diff -u  Arial-patterns.txt  Arial-gt.txt

使用此图像的 *用户模式文件*,识别结果 100% 正确。如果没有它,则会存在一些错误

--- Arial-patterns-no.txt       2019-07-05 04:21:04.367188492 +0000
+++ Arial-gt.txt        2019-07-05 04:05:11.000000000 +0000
@@ -1,20 +1,20 @@
 DQ2679M
 LO6217I
 QK2101G
-JBO363H
+JB0363H
 KN2873M
-Z2B0929J
+ZB0929J
 JF3829W
-YNO0584J
-SVv8400Q
+YN0584J
+SV8400Q
 FY4523X
 KS0016J
 OB3016R
 VA4335P
-QHO205V
-UH20932
+QH0205V
+UH2093Z
 GW3760Y
-S02306T
+SO2306T
 XT8204F
-MR6804|
-0OX5866M
+MR6804I
+OX5866M