Tess4J работает правильно из источников, но не из JAR - PullRequest
0 голосов
/ 04 сентября 2018

Я использую maven в качестве системы сборки и IntelliJ в качестве среды разработки в Java, и я хочу сделать OCR.

Я добавил tess4j как зависимость maven:

<dependency>
    <groupId>net.sourceforge.tess4j</groupId>
    <artifactId>tess4j</artifactId>
    <version>LATEST</version> <!-- 4.2.1 -->
</dependency>

Я написал следующий код для использования Tesseract:

public class OpticalCharacterRecognition
{
    private static final String TESS_DATA = "tessdata";
    public static final String DATA_FOLDER = getProgramDirectory() + separator + TESS_DATA;
    public static final String LANGUAGE = "eng";

    private ITesseract instance;

    public OpticalCharacterRecognition()
    {
        instance = new Tesseract();
        instance.setLanguage(LANGUAGE);
        instance.setDatapath(DATA_FOLDER);
    }

    // ...
}

При запуске с IntelliJ все работает нормально. При запуске с JAR, OCR неправильно распознает текст на моем компьютере (например, распознанный текст - пустая строка, но в IntelliJ он будет правильно распознан, несмотря на то, что изображение одинаковое), но это трудно по какой-то причине воспроизведите с минимальным тестом. Я просто использую instance.doOCR(bufferedImage), ничего особенного.

Я также пытался вызвать ImageIO.scanForPlugins() до doOCR(), но это не помогло.

Некоторые пользователи JAR, однако, получают эту ошибку:

java.lang.NoClassDefFoundError: Could not initialize class net.sourceforge.tess4j.TessAPI

Это говорит о том, что некоторые файлы отсутствовали в JAR, но это не так, поскольку Tesseract извлекает и загружает DLL s из JAR для использования.

Имеет ли значение установка Tesseract дистрибутива имеет значение?

(Исправлено путем установки Microsoft Visual C ++ 2015 Runtime )

Мои pom.xml сборочные плагины:

<!-- Generate Target JAR -->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.1.0</version>
    <configuration>
        <archive>
            <!-- Drop the META-INF/maven folder -->
            <addMavenDescriptor>false</addMavenDescriptor>
            <manifest>
                <addClasspath>true</addClasspath>
                <classpathPrefix>${libraries.directory}</classpathPrefix>
                <mainClass>LauncherClient</mainClass>
            </manifest>
            <manifestEntries>
                <Built-By>Me</Built-By>
            </manifestEntries>
        </archive>
    </configuration>
</plugin>

<!-- Copy JAR libraries to target folder -->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>3.1.1</version>
    <executions>
        <execution>
            <id>copy-dependencies</id>
            <phase>package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <outputDirectory>${project.build.directory}/${libraries.directory}</outputDirectory>
                <overWriteReleases>false</overWriteReleases>
                <overWriteSnapshots>false</overWriteSnapshots>
                <overWriteIfNewer>true</overWriteIfNewer>
            </configuration>
        </execution>
    </executions>
</plugin>

Я немного отчаялся из-за этих странных проблем, поэтому я больше не уверен, что еще можно сделать, чтобы это работало безупречно. Все пользователи (включая меня) только на Windows. Я на Windows 10 Pro.

...