Tesseract运行错误


80

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

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”。

截图:http//i.stack.imgur.com/I0Guc.png

Answers:


84

您可以抓住eng.traineddataGithub:

wget https://github.com/tesseract-ocr/tessdata/raw/master/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/

2
如果我错了,请纠正我..但是不是包含一个新语言(rus)而不提供错误的错误消息所指向的一种语言的问题吗?
Arne 2014年

1
编辑:由于某些原因,除非存在eng.traineddate,否则tesseract将不会运行-即使不需要它。因此,AAAfarmclub的回答很好。
Arne 2014年

3
警告:其他Linux安装(生动的Ubuntu)在不同的目录中运行:/ usr / share / tesseract-ocr / tessdata代替
octohedron 2015年

@Gazta:是的,openSUSE的要求目录,而不是
Avindra Goolcharan

3
在Ubuntu-Gnome 16.04中:/usr/share/tesseract-ocr/tessdata/
kmario23

55

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

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)的道路打开了大门。


3
这应该是公认的答案。手动修改文件包管理器后面的文件(假设您首先使用一个文件来安装tesseract)是个坏主意
Ishay Peled 2016年

2
对于使用MacPort的Mac用户:sudo port install tesseract-eng
p-mercier

4
您可以tesseract --list-langs用来查看所有可用的语言。您也可以sudo apt-get install tesseract-ocr-*用来安装所有这些产品
Rodrigo Laguna

拱包被称为tesseract-data-eng
洛基

不幸的是,尽管这个答案在Docker容器中不起作用,但它在Docker容器中不起作用。
–Ælex

27

我在Windows机器上也有此错误。

我的解决方案。

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

例如,对于eng,我下载了所有带有eng前缀的文件。

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

结果将是System env var:TESSDATA_PREFIX = D:/ Java / OCR并且OCR文件夹包含带有语言文件的tessdata

这是目录的屏幕截图:

在此处输入图片说明


3
是的,每个人都在谈论Linux。拜托,别忘了市场上还有另外一种流行的操作系统。
可汗

4

没有以前的解决方案对我有用。

我已经安装apt-get了tessdata并手动下载了tessdata,然后四处移动/usr等等,即使我将变量导出了数千次,也没人能正常工作。

最后,在开始哭泣之前的最后一次尝试中,我尝试将路径直接传递给Tesseract()实例。

在Python中:tr = Tesseract("/usr/local/share/tesseract-ocr/")现在可以使用了。为了澄清,即时通讯使用tesserwrap模块。


1
我感觉到你了!我现在正在那里。所不同的是,为了使情况变得更糟,我正在尝试使其从命令行运行。
探险家

4
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

前2次尝试均不起作用,因为来自git clone我的文件因我不知道的原因而无效。我不确定为什么#3尝试对我有用。

最后,

  1. 我使用下载了eng.traindata文件 wget
  2. 复制到某个目录
  3. 使用--tessdata-dir与目录名

对我而言,收获是很好学习和使用该工具,而不是依赖于程序包管理器的安装和目录


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类方法)很有意义。
亚历山大·卢比亚金

1

我正在使用Visual Studio 2017社区版。
我通过在项目的Debug目录中创建一个名为tessdata的目录来解决此问题。然后,我将eng.traineddata文件放入所述目录。


1

我正在使用Windows操作系统,尝试了以上所有解决方案,但均无作用。

最后,我将Tesseract-OCR安装在D驱动器(从中运行python脚本的位置)而不是C驱动器,并且可以工作。

因此,如果您使用的是Windows,请在与Tesseract-OCR相同的驱动器中运行python脚本。




0
tessdata_dir_config = r'--tessdata-dir "/usr/local/Cellar/tesseract/4.1.1/share/tessdata"'
pytesseract.image_to_string(imgCrop,lang='eng',config=tessdata_dir_config)

4
这不是答案。请解释这里发生的情况,以便其他人在阅读您的回复时可以获得有用的见解。
AlexH
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.