【问题标题】:Disable dictionary-assisted OCR in tesseract C++ API在 tesseract C++ API 中禁用字典辅助 OCR
【发布时间】:2016-01-05 10:50:04
【问题描述】:

我有一个应用程序,其中使用 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。 p>

【问题讨论】:

    标签: c++ api ocr tesseract


    【解决方案1】:

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

    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

    【讨论】:

      【解决方案2】:

      您可以通过以下方式进行操作

      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.hhttps://tesseract-ocr.github.io/a00736_source.html 头文件(第 839 行)中找到了它,我想找到正确参数的最佳方法是查看其中定义的值(与您的版本相对应的头文件。我的是 3.04)。 我尝试了一些我之前在互联网上找到的但没有奏效。这是我的工作配置。

      【讨论】:

      • 抱歉耽搁了这么久。由于我没有真正继续我的 Tesseract 问题,因此我没有真正调查我的回答是否是解决问题的更好方法。但是,回首往事,我认为tessedit_enable_doc_dict 是要走的路很明显,所以我最终会接受你的回答:-)
      【解决方案3】:

      您只能在initialization of API 期间翻阅字典。 tesseract 3.02 见 tesseract-ocr API example in C++ of changing init parameters

      【讨论】:

      • 所以你的意思是如果我设置load_system_dawg = 0,字典将不适用?
      • 不完全是。如果在tesseract 初始化期间使用load_system_dawg = 0“系统”字典将不会被加载。如果您想稍后使用它,则需要再次初始化 tesseract。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-11
      • 2010-12-20
      • 2014-01-03
      • 2016-05-05
      相关资源
      最近更新 更多