Tesseract 加载语言失败 (Tess4j / Java / Netbeans)

Posted

技术标签:

【中文标题】Tesseract 加载语言失败 (Tess4j / Java / Netbeans)【英文标题】:Tesseract failed loading language (Tess4j / Java / Netbeans) 【发布时间】:2020-12-18 00:38:59 【问题描述】:

我目前正在开发一个程序,该程序应该使用 OpenCV 和 Tessj4 检测图像中的字母和数字。为此,我从https://github.com/UB-Mannheim/tesseract/wiki 下载并安装了 Tesseract(版本 5.0.0 alpha),从http://tess4j.sourceforge.net 下载了 Tess4j API(版本 3.4.8)并添加了 .jar 文件(tess4j-3.4.8.jar + 所有lib 文件夹中的 .jar 文件)到我的项目中。

此外,我将 tesseract 目录 (C:/Program Files/Tesseract-OCR) 包含到系统路径中,并将具有值 (C:/Program Files/Tesseract-OCR/tessdata) 的 TESSDATA_PREFIX 添加到我的环境变量中。

但是,当我尝试运行这 4 行简单的代码时,我收到以下错误:

Tesseract tesseract = new Tesseract();
tesseract.setDatapath("C:/Program Files/Tesseract-OCR/tessdata");
tesseract.setLanguage("eng");
System.out.println(tesseract.doOCR(new File("screen.png")));

Failed loading language 'eng'
Tesseract couldn't load any languages!
Exception in thread "main" java.lang.Error: Invalid memory access
   at com.sun.jna.Native.invokePointer(Native Method)
   at com.sun.jna.Function.invokePointer(Function.java:470)
   at com.sun.jna.Function.invoke(Function.java:404)
   at com.sun.jna.Function.invoke(Function.java:315)
   at com.sun.jna.Library$Handler.invoke(Library.java:212)
   at com.sun.proxy.$Proxy0.TessBaseAPIGetUTF8Text(Unknown Source)
   at net.sourceforge.tess4j.Tesseract.getOCRText(Unknown Source)
   at net.sourceforge.tess4j.Tesseract.doOCR(Unknown Source)
   at net.sourceforge.tess4j.Tesseract.doOCR(Unknown Source)
   at net.sourceforge.tess4j.Tesseract.doOCR(Unknown Source)
   at app.Main.main(Main.java:41)

但是当我使用控制台运行 tesseract 程序然后读取创建的文件的内容时,一切正常。

Process p = Runtime.getRuntime().exec("cmd /c tesseract screen.png text -l eng");
while(p.isAlive()) 
   Thread.sleep(5);
    
BufferedReader reader = new BufferedReader(new FileReader(new File("text.txt")));
StringBuilder stringBuilder = new StringBuilder();
String line;
    
while((line = reader.readLine()) != null)
   stringBuilder.append(line).append("\n");
    
reader.close();
System.out.println(stringBuilder.toString().trim());

有人知道如何解决这个问题吗? 谢谢,伊普塞隆。

【问题讨论】:

在这里查看第一个答案。 ***.com/questions/19894890/… 可能是重复的问题。 我试过了,结果一样 我看到您在路径 tesseract.setDatapath("C:/Program Files/Tesseract-OCR/tessdata"); 中使用了单斜杠。改用双斜杠// 还是同样的错误。我认为只有在使用反斜杠时才需要双斜杠。 【参考方案1】:

好的,我发现由于某种原因我的语言文件已损坏。 我只是替换了“C:\Program Files\Tesseract-OCR\tessdata”目录中的“eng.traineddata”文件。 现在一切正常。

【讨论】:

以上是关于Tesseract 加载语言失败 (Tess4j / Java / Netbeans)的主要内容,如果未能解决你的问题,请参考以下文章

已解决ERROR net.sourceforge.tess4j.Tesseract - Input not set

Tess4J Linux 实践[解决:Tess4J - Native library (linux-x86-64/libtesseract.so) not found in resource path

Tess4J -4.0.2- Linux 实践 [解决:Tess4J - Native library (linux-x86-64/libtesseract.so) not found in reso

java 怎么调用tess4j

Tesseract的使用

Tess4J字库训练