Tesseract 运行错误

129

我在Linux上运行tesseract-ocr引擎时遇到了问题。我已经下载了RUS语言数据并将其放置到tessdata目录(/usr/local/share/tessdata)中。当我尝试使用命令tesseract blob.jpg out -l rus运行tesseract时,它显示一个错误:

Error opening data file /usr/local/share/tessdata/eng.traineddata

Please make sure the TESSDATA_PREFIX environment variable is set to the parent directory of your "tessdata" directory.

Failed loading language eng
Tesseract couldn't load any languages!

Could not initialize tesseract.

根据编译指南,我使用export TESSDATA_PREFIX='/usr/local/share/'来指向我的tessdata目录。 也许我应该编辑一些配置文件?Tesseract尝试加载'eng'数据文件而不是'rus'。

Screenshot: http://i.stack.imgur.com/I0Guc.png

21个回答

131

你可以从Github上获取eng.traineddata

wget https://github.com/tesseract-ocr/tessdata/raw/main/eng.traineddata

请查看https://github.com/tesseract-ocr/tessdata获取完整的训练语言数据列表。

当您下载文件后,请将它们移动到/usr/local/share/tessdata文件夹中。警告:有些Linux发行版(例如openSUSE和Ubuntu)可能希望将其放在/usr/share/tessdata目录下。

# If you got the data from Google, unzip it first!
gunzip eng.traineddata.gz 
# Move the data
sudo mv -v eng.traineddata /usr/local/share/tessdata/

3
请您确认一下我的理解是否正确,问题是关于添加一种新语言(俄语),而不是提供故障错误消息所指向的语言,对吗?请纠正我如果我错了。 - Arne
3
由于某些原因,tesseract无法运行除非eng.traineddata存在-即使它不需要。 因此,AAAfarmclub的答案是可以的。 - Arne
3
警告:其他Linux安装(例如Ubuntu Vivid)工作在不同的目录下:/usr/share/tesseract-ocr/tessdata。请注意。 - Computer's Guy
4
在Ubuntu-Gnome 16.04中,其路径为/usr/share/tesseract-ocr/tessdata/ - kmario23
3
Arch Linux: /usr/share/tessdata/ 可以通过 pacman 安装 *.traineddata 文件。我之前没找到路径,但现在好了。 - gleitonfranco
显示剩余6条评论

104

最简单的方法是安装所需的软件包:

sudo apt-get install tesseract-ocr-eng  #for english
sudo apt-get install tesseract-ocr-tam  #for tamil
sudo apt-get install tesseract-ocr-deu  #for deutsch (German)

正如你所注意到的那样,它为其他语言(例如tesseract-ocr-fra)打开了道路。


6
这应该是被接受的答案。在软件包管理器背后手动调整文件(假设你在第一次安装tesseract时使用了软件包管理器)是一个不好的想法。 - Ishay Peled
3
对于使用 MacPort 的 Mac 用户:sudo port install tesseract-eng。要求翻译内容通俗易懂且不改变原意,不含任何解释或其他额外信息。 - p-mercier
12
您可以使用命令 tesseract --list-langs 查看所有可用语言。您还可以使用命令 sudo apt-get install tesseract-ocr-* 安装它们全部。 - Rodrigo Laguna
2
对于架构,这些软件包被称为tesseract-data-eng等。 - loki
这些软件包是快速模型,不是最好的,要下载最好的模型,请访问https://github.com/tesseract-ocr/tessdata_best/并将文件放到安装的tessdata目录中,也可以在docker中使用,例如:`RUN cd /usr/share/tesseract-ocr/5/tessdata && curl -O https://raw.githubusercontent.com/tesseract-ocr/tessdata_best/main/eng.traineddata` 使用 python:3.10-slim-bookworm - undefined
显示剩余2条评论

44

我在Windows机器上也遇到了这个错误。

我的解决方案:

1)从https://github.com/tesseract-ocr/tessdata/tree/3.04.00下载您的语言文件。

例如,对于英文,我下载了所有以eng开头的文件。

2)将它们放入某个文件夹内的目录中。将此文件夹添加到系统Path变量中作为TESSDATA_PREFIX

结果应该是 System env var: TESSDATA_PREFIX=D:/Java/OCR 并且OCR文件夹里有包含语言文件的。

这是该目录的屏幕截图:

enter image description here


16
是的,大家都在谈论Linux。请各位不要忘记市场上还有一种更受欢迎的操作系统。 - User

6

对我来说,问题在于我下载了训练数据文件的方式。请确保您获得原始链接。

最初我使用的是:

wget https://github.com/tesseract-ocr/tessdata_best/blob/master/eng.traineddata

当我将它改为:

wget https://github.com/tesseract-ocr/tessdata_best/raw/master/eng.traineddata

它起作用了


那样行不通。你需要在你的URL中将master改为main - s.ouchene
这解决了我的问题!谢谢!天哪,我没意识到我下载的是JSON数据块而不是实际的模型.... - undefined

5
tesseract  --tessdata-dir <tessdata-folder> <image-path> stdout --oem 2 -l <lng>

在我的案例中,我犯了一些错误或尝试失败了。

  • 我克隆了GitHub仓库,并将文件从那里复制到以下目录:
    • /usr/local/share/tessdata/
    • /usr/share/tesseract-ocr/tessdata/
    • /usr/share/tessdata/
  • 我使用了TESSDATA_PREFIX和上述路径
  • sudo apt-get install tesseract-ocr-eng

前两次尝试都没有成功,因为git clone​​的文件由于我不知道的原因而无法正常工作。我不确定为什么第3次尝试对我起作用。

最后,

  1. 我使用wget下载了eng.traindata文件
  2. 将其复制到某个目录中
  3. 使用带有目录名称的--tessdata-dir

对我来说,要点是好好学习工具并加以利用,而不是依赖于软件包管理器安装和目录。


5
没有一种之前的解决方案适合我。
我曾通过apt-get安装,也曾手动下载过tessdata,并移动到/usr以及尝试了多次导出变量,但是所有的方法都不起作用。
最后,在开始哭泣之前的最后一次尝试中,我尝试直接将路径传递给Tesseract()实例。
在Python中:tr = Tesseract("/usr/local/share/tesseract-ocr/"),现在它可以工作了。要澄清的是,我正在使用tesserwrap模块。

1
我理解你的感受!我现在也正处于同样的情况。不同之处在于,更糟糕的是,我正在尝试从命令行让它工作。 - explorer

4

对于Windows用户:

在"环境变量"中,添加一个新的系统变量,名称为"TESSDATA_PREFIX",值为"C:\Program Files (x86)\Tesseract-OCR\tessdata"。


4

对于Ubuntu,只需运行以下命令即可消除环境变量错误。

命令:

export TESSDATA_PREFIX=Path_of_your_tessdata_folder

示例命令:

export TESSDATA_PREFIX=/home/amar/Desktop/OCR/tesseract-4.1.1/tessdata

运行这个命令将把tessdata文件夹的路径设置为名为TESSDATA_PREFIX的环境变量,上述错误将得到解决。


2
您可以从C代码中调用tesseract API功能:
#include <tesseract/baseapi.h>
#include <tesseract/ocrclass.h>; // ETEXT_DESC

using namespace tesseract;

class TessAPI : public TessBaseAPI {
    public:
    void PrintRects(int len);
};

...
TessAPI *api = new TessAPI();
int res = api->Init(NULL, "rus");
api->SetAccuracyVSpeed(AVS_MOST_ACCURATE);
api->SetImage(data, w0, h0, bpp, stride);
api->SetRectangle(x0,y0,w0,h0);

char *text;
ETEXT_DESC monitor;
api->RecognizeForChopTest(&monitor);
text = api->GetUTF8Text();
printf("text: %s\n", text);
printf("m.count: %s\n", monitor.count);
printf("m.progress: %s\n", monitor.progress);

api->RecognizeForChopTest(&monitor);
text = api->GetUTF8Text();
printf("text: %s\n", text);
...
api->End();

执行以下代码:

g++ -g -I. -I/usr/local/include -o _test test.cpp -ltesseract_api -lfreeimageplus

我需要使用FreeImage来加载图片。

@DarkSkull,是的,这是在Debian GNU / Linux上测试的C ++代码。正如您所看到的,Russel Crowe在函数TessAPI :: Init(NULL,“rus”)中遇到了问题。检查Tesseract源代码(TessAPI类方法)是有意义的。 - Alexander Lubyagin

2

我使用的是Windows操作系统,尝试了以上所有解决方案,但都没有起作用。

最终,我将Tesseract-OCR安装在D盘(我从中运行Python脚本的位置)而不是C盘,并且它可以正常工作。

所以,如果您正在使用Windows,请在与Tesseract-OCR相同的驱动器中运行Python脚本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接