用户模式 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