在tesseract C++API中禁用字典辅助OCR

Disable dictionary-assisted OCR in tesseract C++ API

本文关键字:字典 OCR tesseract C++API      更新时间:2023-10-16

我有一个应用程序,其中使用tesseract API对技术数据表进行OCR处理。我这样初始化它:

tesseract::TessBaseAPI tess;
tess.Init(NULL, "eng", tesseract::OEM_TESSERACT_ONLY);

然而,即使在使用了像这样的自定义白名单之后

tess.SetVariable("tessedit_char_blacklist", "");
tess.SetVariable("tessedit_char_whitelist", myWhitelist);

一些数据表条目被错误地识别,例如PA3被识别为FAB

我如何禁用字典辅助OCR,即。为了不影响其他工具,如果可能的话,我不想修改全局配置文件。

注意:这不是前一个问题的重复,因为所述问题明确要求命令行工具,而我明确要求tesseract API。

您可以简单地将惩罚设置为零:

tess.SetVariable("segment_penalty_garbage", "0");
tess.SetVariable("segment_penalty_dict_nonword", "0");
tess.SetVariable("segment_penalty_dict_frequent_word", "0");
tess.SetVariable("segment_penalty_dict_case_ok", "0");
tess.SetVariable("segment_penalty_dict_case_bad", "0");

虽然词典仍然保持活跃,但这种方法基本上告诉算法,词典命中(还包括糟糕的标点符号等(并不比非词典命中好。

请参阅dict.cpp源代码以获取参考。

您可以用以下方式

tesseract::TessBaseAPI *api = new tesseract::TessBaseAPI();
if (api->Init(NULL, "eng"))
{
    fprintf(stderr, "Could not initialize tesseract.n");
    exit(1);
}
if(!api->SetVariable("tessedit_enable_doc_dict", "0"))
{
    cout << "Unable to enable dictionary" << endl;
}

只需将"tessedit_enable_doc_dict"作为参数传递给SetVariable函数及其相应的布尔值。

我在tesseractclass.h中找到它https://tesseract-ocr.github.io/a00736_source.html头文件(第839行(,我想找到正确参数的最好方法是查看它定义的值(对应于您的版本的头文件。我的版本是3.04(。我尝试了一些我以前在网上找到的,但没有成功。这是我的工作配置。

只有在API初始化期间才能打开字典。请参阅C++中的tesseract-ocr API示例,以更改tesseract3.02的init参数。