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 的分支