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

Tesseract加载语言失败(Tesser4j/Java/Netbeans),java,tesseract,tess4j,Java,Tesseract,Tess4j,我目前正在开发一个程序,使用OpenCV和Tessj4检测图像中的字母和数字。为此,我从下载并安装了Tesseract(版本5.0.0 alpha),从下载了Tesser4J API(版本3.4.8),并将.jar文件(Tesser4j-3.4.8.jar+lib文件夹中的所有.jar文件)添加到我的项目中 此外,我将tesseract目录(C:/Program Files/tesseract OCR)包括在系统路径中,并将带有值(C:/Program Files/tesseract OCR/T

我目前正在开发一个程序,使用OpenCV和Tessj4检测图像中的字母和数字。为此,我从下载并安装了Tesseract(版本5.0.0 alpha),从下载了Tesser4J API(版本3.4.8),并将.jar文件(Tesser4j-3.4.8.jar+lib文件夹中的所有.jar文件)添加到我的项目中

此外,我将tesseract目录(C:/Program Files/tesseract OCR)包括在系统路径中,并将带有值(C:/Program Files/tesseract OCR/TesserData)的TesserData_前缀添加到我的环境变量中

但是,当我尝试运行这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());
有人知道如何解决这个问题吗?

谢谢,Ypselon。

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


现在一切都正常了。

只需在这里检查第一个答案。可能是一个重复的问题。我试过了,结果是您在路径
tesseract.setDatapath(“C:/Program Files/tesseract OCR/tesserData”)中使用了单斜杠。请改为使用双斜杠
/
。仍然是相同的错误。我认为只有在使用反斜杠时才需要双斜杠。
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());