如何强制 tesseract 不使用 TESSDATA_PREFIX

Posted

技术标签:

【中文标题】如何强制 tesseract 不使用 TESSDATA_PREFIX【英文标题】:How to force tesseract not to use TESSDATA_PREFIX 【发布时间】:2013-02-03 19:08:26 【问题描述】:

我的电脑上安装了 tesseract,它定义了 TESSDATA_PREFIX 环境变量。完全卸载 tesseract 后,我​​尝试以这种方式使用 tesseract API:

if (myOCR->Init("C:/Projects/project/Release/tessdata/", "rus")) 
            fprintf(stderr, "Could not initialize tesseract.\n");
            exit(1);
        

然后收到

Error opening data file C:\Program Files (x86)\Tesseract-OCR\tessdata/rus.traine
ddata
Please make sure the TESSDATA_PREFIX environment variable is set to the parent d
irectory of your "tessdata" directory.
Failed loading language 'rus'
Tesseract couldn't load any languages!
Could not initialize tesseract.

在 cmd 中键入 set TESSDATA_PREFIX 让我知道没有这样的变量。但是 tesseract 记得它(不知道如何)。那么如何强制 tesseract 在具体文件夹中搜索 traindata 呢?谢谢

【问题讨论】:

【参考方案1】:

这似乎很有帮助: Tesseract - change language file location

从该线程中的答案来看,似乎是 tesseract 查找环境变量的情况,但 如果未设置,则假定为固定位置

解决此问题的最简单方法是运行“cmd”,然后执行:

c:\Users\alex> set TESSDATA_PREFIX="C:/Projects/project/Release/tessdata"
c:\Users\alex> cd MyOCRProgDir
c:\Users\alex\MyOCRProgDir> MyProg

希望有帮助!

【讨论】:

我不想用这个,因为它不能在另一台电脑上工作 1.) 我将没有机会在另一台电脑上手动设置 env 变量 2.) 不方便 3) 即使重置此变量后,我也不知道为什么,但它在 C 中搜索: \Progamfiles (x86)\tesseract-ocr ... 我在遇到 TESSDATA_PREFIX 时进行了完整的 reg 扫描并删除了所有内容,但它在旧目录中搜索 首先,您将这些命令放入“批处理文件”(扩展名为 .bat 的文件)中,当您将程序复制到其他计算机上时,您也将复制此 . bat 文件放到他们的桌面上,使其成为他们双击以启动 OCR 程序的“快捷方式”。其次,由于这不起作用,您是否有机会从源代码构建 Tesseract?我知道这听起来很复杂,但如果你能做到这一点,你也许可以使用我指给你的线程上的建议。 在这种情况下,您可以直接从代码中使用 putenv 而不是 bat 文件。无论如何,重新启动通过 tesseract exe 先前定义的环境变量解决了这个棘手的问题。谢谢【参考方案2】:

我也遇到过同样的问题。 .. 我所做的只是将 tessdata 文件夹复制到我的应用程序正在运行的目录中。 . .

注意:这样做后,请确保将 tessdata 属性“复制到输出目录”设置为“始终复制”。这解决了问题。 . .

请参阅 youtube 中的此链接。 . .为了更好的演示。 . .希望它有所帮助:)

http://www.youtube.com/watch?v=RqvvXJXuRYY

【讨论】:

【参考方案3】:

我在训练数据方面遇到了同样的问题。我没有强制不使用 TESSDATA_PREFIX,而是找到了一种解决方法。这对我有用。

我的机器是 64 位的,我正在用 VS2012 构建一个 32 位的副本。

设置环境变量。 TESSDATA_PREFIX : C:\Program Files (x86)\Tesseract-OCR

这里的“Tesseract-OCR”是“tessdata”文件夹的父目录。

编辑路径变量。 路径:C:\tess\lib\lib;

这里的“C:\tess\lib\lib”是lib和dll文件所在的地方:liblept168.dll,liblept168.lib等

启动一个新的 win32 控制台应用程序并设置以下设置。 C/C++ >> 一般 C:\tess\include\include

这里的“C:\tess\include\include”是包含文件所在的“tesseract”和“leptonica”文件夹的父目录。

链接器 >> 附加库依赖 C:\tess\lib\lib

链接器 >> 附加依赖 liblept168.lib libtesseract302.lib (将这些添加到列表中)

C/C++>>预处理器 _CRT_SECURE_NO_WARNINGS(将此添加到列表中)

将两个tesseract dll(对应库文件)复制到调试和发布文件夹(不是根目录内的)

将 tessdata 文件夹(在 Tesseract 安装中)复制到上述位置。

希望你一切顺利。

【讨论】:

以上是关于如何强制 tesseract 不使用 TESSDATA_PREFIX的主要内容,如果未能解决你的问题,请参考以下文章

tesseract 5.0 bazaar + user-words 配置不起作用

Tesseract hOCR:如何检测倒置?

如何提高 tesseract 识别数字的结果

如何在 tesseract 中保留文档结构

如何使用tesseract -magickimage读取验证码

如何 Tesseract 多个 .tif 文件?