Tesseract - 更改语言文件位置

Posted

技术标签:

【中文标题】Tesseract - 更改语言文件位置【英文标题】:Tesseract - change language file location 【发布时间】:2011-10-20 12:39:51 【问题描述】:

我正在制作一个 AIR 项目,它需要一些 OCR 功能,所以我决定使用 tesseract(现在我尝试让它在 Windows 上运行)。

我的问题是,不能更改语言文件的位置 - 它总是试图查看我的 Tesseract 安装目录(程序文件 (x86)\Tesseract-OCR\tessdata\mylang.traineddata)

有没有一种方法可以配置 Tesseract 以在我指定的位置查找此文件?例如在与 tesseract.exe 相同的文件夹中。我不想(或者可能无法)使用 AIR 安装程序安装应用程序。 3.0版本和最新的SVN版本都试过了。

谢谢

【问题讨论】:

【参考方案1】:

是的,您可以通过设置 TESSDATA_PREFIX 环境变量,例如:

导出 TESSDATA_PREFIX=/usr/local/share/

注意目录路径必须以/结尾。

【讨论】:

谢谢,我想我需要调整源代码。在程序的每次运行时修改环境变量并不是一个非常优雅的解决方案(只是为了确保用户自上次运行以来没有设置此变量 - 例如通过安装 tesseract)。【参考方案2】:

我建议你不要按 TESSDATA_PREFIX 处理 tessdata 路径。您可以在 init tesseract 中定义 tessdata 路径。如果您在命令行中使用 tesseract.exe,请使用以下语法:

tesseract.exe  --tessdata-dir  tessdataPath  image.png  output  -l  eng

如果你使用 tesseract::TessBaseApi,在 api.init() init 如下:

api->Init(tessdataPath, language) //api->Init("C:", "eng")

【讨论】:

【参考方案3】:

我已经通过重写 Tesseract 的源代码解决了这个问题(我使用的是 SVN 597)。正如 nguyenq 所说,Tesseract 尝试在 TESSDATA_PREFIX 环境变量设置的路径中查找数据。如果找不到,那么它会做一些我不明白的诡计:)。 因此,如果有人需要 Tesseract 的便携版本(不依赖于 Tesseract 安装),请在第 60 行左右编辑 mainblk.cpp,这是我的版本:

// remove the stuff that Tesseract does to find the installation path
/* if (!getenv("TESSDATA_PREFIX")) 
#ifdef TESSDATA_PREFIX
#define _STR(a) #a
#define _XSTR(a) _STR(a)
    datadir = _XSTR(TESSDATA_PREFIX);
#undef _XSTR
#undef _STR
#else
    if (argv0 != NULL) 
      if (getpath(argv0, dll_module_name, datadir) < 0)
#ifdef __UNIX__
        CANTOPENFILE.error("main", ABORT, "%s to get path", argv0);
#else
        NO_PATH.error("main", DBG, NULL);
#endif
     else 
      datadir = "./";
    
#endif
   else 
    datadir = getenv("TESSDATA_PREFIX");
  */
  datadir = "./"; // look for config things in the same folder as the executable.

现在你可以在“tesseract 可执行位置”\tessdata 目录中打包东西

【讨论】:

以上是关于Tesseract - 更改语言文件位置的主要内容,如果未能解决你的问题,请参考以下文章

Android OCR 使用 tess-two 一个 tesseract 的分支

Tesseract:如何导出文本和边界框?

Tesseract - 错误 net.sourceforge.tess4j.Tesseract - null

使用 tesseract 为 android

android怎么调用tesseract实现OCR功能?

Tess-Two(Android 中的 Tesseract OCR)显示非常不准确的结果