微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Tesseract-OCR 无法读取训练数据

如何解决Tesseract-OCR 无法读取训练数据

我将 Tess4J 用于 Java,当我使用认的 tessdata 时它可以工作,但是当我使用 https://github.com/livezingy/tesstrainsh-win 训练新集(使用新字体)时,我收到错误

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)

但我可以使用 eng.traineddataeval.sh

正确测试新训练的 lstmeval

当我打开这两个文件时,它们大不相同,原始训练数据具有可读格式,而新的最初我认为它没有以某种方式损坏,但是能够使用 eval.sh 使我的事情变得不同。

这都是编辑器上的traineddata,左边是新训练的,右边是tess4j自带

Difference between both train

这是我的代码的样子:

 public static void main(String[] args) {
        File imageFile = new File("assets/screenshot_22.png");
        ITesseract instance = new Tesseract();
        try {
            String result = instance.doOCR(imageFile);
            System.out.println("result: " + result);
        } catch (TesseractException e) {
            System.err.println(e.getMessage());
        }
}

我看到一些帖子说你需要设置 do instance.setDataPath("abs-path-to-tessdata") 但这不是问题,我已经尝试过,并且使用不同的 tessdata 得到相同的结果。

感谢任何帮助,提前致谢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。