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

标签 c++ api ocr tesseract

我有一个应用程序,其中使用 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,即 .为了不影响其他工具,我不想尽可能修改全局配置文件。

注意:这不是 this previous question 的拷贝因为上述问题明确要求命令行工具,而我明确要求 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");

虽然字典仍然保持事件状态,但这种方法基本上告诉算法字典命中(也包括错误的标点符号等)并不比非字典命中好。

参见 the dict.cpp source code供引用。

关于c++ - 在 tesseract C++ API 中禁用字典辅助 OCR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33005215/

相关文章:

c++ - construct_heap 模板类函数

spring - 端点按资源 swagger 注释分组?

api - YouTube GData API

python - 从图像中删除边框但保留文字写在边框上(OCR 之前的预处理)

c++ - 在 C++ 中划分后的奇怪结果

c++ - 为什么我不能为命名空间中的变量赋值?

c++ - 在其他函数中设置结构成员的值

php - 将明亮的本地 API 数据拉入我的 Ruby on Rails 应用程序 - 用 PHP 编写的 API 文档

Java OCR : Reading cursive handwriting

ios - 如何将 TesseractOCRiOS 与西类牙语一起使用?