Я использую 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
.