Где найти файл из инструкции по использованию Tesseract API или есть другой способ исправить эту ошибку? - PullRequest
0 голосов
/ 24 июня 2019

Я просто очень расстроен. У меня есть личный проект, который мне дал мой папа, чтобы я мог помочь его компании по-своему. Я пытаюсь использовать Tesseract API для чтения слов из изображений. Я никогда не делал ничего подобного добавлению библиотеки или чего-либо технического, поэтому следовал этим инструкциям, чтобы выручить меня:

https://tphangout.com/how-to-use-the-tesseract-api-to-perform-ocr-in-your-java-code/

https://dzone.com/articles/reading-text-from-images-using-java-1

Я следовал этим инструкциям к письму, за исключением одной части (шаг 7; они просят поместить файл liblept.dll; после того, как я извлек Tess4j, я не смог найти этот конкретный файл .dll). У меня продолжает появляться ошибка.

Я уже удалил свой проект Netbeans и повторил попытку установки и выполнил те же действия. Я также даже подумал, что это может быть тип файла изображения, поэтому я переключился между tiff, png и jpg. Ничего.

Класс ImageReader

import java.io.*;
//import java.util.*;
import net.sourceforge.tess4j.*;
public class ImageReader {
    String filePath;
    public ImageReader(String s) {
        filePath = s;
    }

    public String getImageReadings() {
        File imageFile = new File(filePath);
        Tesseract instance = new Tesseract();
        try {
            String result = instance.doOCR(imageFile);
            return result;
        } 
        catch (TesseractException e) {
            System.err.println(e.getMessage());
            return "Error while reading image";
        }
    }  
}

Я ожидал, что он выдаст Hello, когда он прочитает png, который я создал, набрав в нем Hello. Но это просто дало мне эту ошибку:

Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'libtesseract3051': Native library (win32-x86-64/libtesseract3051.dll) not found in resource path ([file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/commons-beanutils-1.9.2.jar, file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/commons-io-2.6.jar, file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/commons-logging-1.2.jar, file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/fontbox-2.0.9.jar, file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/ghost4j-1.0.1.jar, file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/hamcrest-core-1.3.jar, file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/itext-2.1.7.jar, file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/jai-imageio-core-1.4.0.jar, file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/jbig2-imageio-3.0.0.jar, file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/jboss-vfs-3.2.12.Final.jar, file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/jcl-over-slf4j-1.7.25.jar, file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/jna-4.1.0.jar, file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/jul-to-slf4j-1.7.25.jar, file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/junit-4.12.jar, file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/lept4j-1.6.4.jar, file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/log4j-1.2.17.jar, file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/log4j-over-slf4j-1.7.25.jar, file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/logback-classic-1.2.3.jar, file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/logback-core-1.2.3.jar, file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/pdfbox-2.0.9.jar, file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/pdfbox-tools-2.0.9.jar, file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/slf4j-api-1.7.25.jar, file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/xmlgraphics-commons-1.5.jar, file:/C:/Users/kakas/OneDrive/Documents/NetBeansProjects/PDFSorter/build/classes/])
    at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:271)
    at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:398)
    at com.sun.jna.Library$Handler.<init>(Library.java:147)
    at com.sun.jna.Native.loadLibrary(Native.java:412)
    at com.sun.jna.Native.loadLibrary(Native.java:391)
    at net.sourceforge.tess4j.util.LoadLibs.getTessAPIInstance(LoadLibs.java:81)
    at net.sourceforge.tess4j.TessAPI.<clinit>(TessAPI.java:42)
    at net.sourceforge.tess4j.Tesseract.init(Tesseract.java:379)
    at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:292)
    at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:224)
    at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:208)
    at pdfsorter.ImageReader.getImageReadings(ImageReader.java:25)
    at pdfsorter.PDFSorter.main(PDFSorter.java:19)

Я немного растерялся из-за того, что делать, потому что до сих пор я только занимался мини-проектами, такими как создание калькулятора. Я думаю, что это проблема с файлом DLL, которую я не смог найти, но я не уверен. Также только недавнее обновление, по какой-то причине оно выдает другую ошибку с другим png из того же места. Вторая ошибка ниже:

[main] ERROR net.sourceforge.tess4j.Tesseract - I/O error reading PNG header!
javax.imageio.IIOException: I/O error reading PNG header!
javax.imageio.IIOException: I/O error reading PNG header!
    at com.sun.imageio.plugins.png.PNGImageReader.readHeader(PNGImageReader.java:315)
    at com.sun.imageio.plugins.png.PNGImageReader.readMetadata(PNGImageReader.java:654)
    at com.sun.imageio.plugins.png.PNGImageReader.readImage(PNGImageReader.java:1256)
    at com.sun.imageio.plugins.png.PNGImageReader.read(PNGImageReader.java:1614)
    at javax.imageio.ImageReader.readAll(ImageReader.java:1066)
    at net.sourceforge.tess4j.util.ImageIOHelper.getIIOImageList(ImageIOHelper.java:395)
    at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:224)
    at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:208)
    at pdfsorter.ImageReader.getImageReadings(ImageReader.java:25)
    at pdfsorter.PDFSorter.main(PDFSorter.java:19)
Caused by: javax.imageio.IIOException: Bad PNG signature!
    at com.sun.imageio.plugins.png.PNGImageReader.readHeader(PNGImageReader.java:242)
    ... 9 common frames omitted

Я не уверен, как я могу опубликовать png-файлы, которые я использовал, потому что они находятся на моем локальном диске, но я посмотрю, что я могу сделать.

1 Ответ

1 голос
/ 25 июня 2019

Обновление:

Я наконец понял. В целом проблема заключалась в объяснениях и инструкциях, которые я использовал, будучи слишком устаревшими. Я исправил это при поиске новых учебников.

Один из файлов jar, которые я забыл добавить в папки библиотеки в моем проекте Netbeans, находился в папке dist Tess4j. Начиная с https://sourceforge.net/projects/tess4j/files (куда вы скачиваете все), вам нужно загружать проекты как tess4j, так и lept4j. Затем из их папок dist и lib после разархивирования папки добавьте все jar-файлы в библиотеку вашего проекта. Затем откройте tess4j и lept4j из вашей IDE как проект и скопируйте их исходные пакеты в исходные пакеты вашего проекта. Наконец, найдите .dll-файлы в Tess4j и Lept4j (для каждого проекта должно быть 2 .dll, которые просто отличаются по 32-битной и 64-битной версиям) и скопируйте один из каждого в исходный пакет вашего проекта, помеченный net.sourceforge.tess4j.

...