尝试在 Java EE 中使用 Tess4J 时出现 RuntimeException
RuntimeException when trying to use Tess4J in Java EE
我正在尝试在 Java EE(Payara 服务器)中使用 Tess4J,这可行吗?如果可行,如何实现?
我得到的确切异常:
e = (net.sourceforge.tess4j.TesseractException) net.sourceforge.tess4j.TesseractException: java.lang.RuntimeException: 需要安装 JAI Image I/O 包。
https://java.net/projects/jai-imageio/
我已将 jai-imageio
添加到我的 pom.xml,并将其添加到 Payara 的模块中。
文件pom.xml
<!-- https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j -->
<dependency>
<groupId>net.sourceforge.tess4j</groupId>
<artifactId>tess4j</artifactId>
<version>3.4.1</version> <!-- used 3.4.2 as well -->
</dependency>
<!-- https://mvnrepository.com/artifact/com.github.jai-imageio/jai-imageio-core -->
<dependency>
<groupId>com.github.jai-imageio</groupId>
<artifactId>jai-imageio-core</artifactId>
<version>1.3.1</version>
<scope>runtime</scope> <!-- tried without this as well -->
</dependency>
已将 JAR 添加到
`Payara\glassfish\modules`
Tess4J 代码(如果能对此进行任何改进,我们将不胜感激)。
ITesseract instance = new Tesseract();
instance.setDatapath(pLangaugePath); // C:\t
instance.setLanguage(pLanguage); // eng
try {
File[] tifFiles = PdfUtilities.convertPdf2Png(pFile);
if (tifFiles != null) {
for (File tifFile : tifFiles) {
String ocrText = instance.doOCR(tifFile);
if (StringUtils.isNotBlank(ocrText)) {
ret.append(ocrText);
}
}
}
} catch (TesseractException e) {
LOG.error("Could not do ocr on image file created via pdf ", e);
}
也尝试过以下两个例子。
1.
try (PDDocument document = PDDocument.load(pFile)) {
int totalPages = document.getNumberOfPages();
PDFRenderer renderer = new PDFRenderer(document);
for (int pi = 0; pi < totalPages; pi++) {
BufferedImage image = renderer.renderImageWithDPI(pi, 75);
String ocrText = instance.doOCR(image);
if (StringUtils.isNotBlank(ocrText)) {
ret.append(ocrText);
}
}
} catch (Exception e) {
LOG.error("Could not do ocr on pdf", e);
}
2.
try {
ITesseract instance = new Tesseract();
instance.setDatapath(pLangaugePath); // C:\t
instance.setLanguage(pLanguage); // eng
String ocrText = instance.doOCR(pFile);
if (StringUtils.isNotBlank(ocrText)) {
ret.append(ocrText);
}
} catch (Exception e) {
LOG.error("Could not do ocr on image file created via pdf ", e);
}
研究:
找到这个Didnt work / solution
由于 JNA RESOURCE_PREFIX
字符串常量不可用导致的 运行 时间异常,Tess4J 因无法与 Glassfish 一起工作而闻名。此问题已在最新版本 3.4.9(对于 Tesseract 3.05.01)和 4.0.2(对于 Tesseract 4.0.0-beta.1)中得到修复。该库现在可以与 Glassfish 一起使用,也许还可以与 Payara Server 一起使用。
您可能还需要在 OCR 调用之前包含 ImageIO.scanForPlugins();
语句。这是为了确保适当的 ImageReader
可用于读取输入图像。
我正在尝试在 Java EE(Payara 服务器)中使用 Tess4J,这可行吗?如果可行,如何实现?
我得到的确切异常:
e = (net.sourceforge.tess4j.TesseractException) net.sourceforge.tess4j.TesseractException: java.lang.RuntimeException: 需要安装 JAI Image I/O 包。 https://java.net/projects/jai-imageio/
我已将 jai-imageio
添加到我的 pom.xml,并将其添加到 Payara 的模块中。
文件pom.xml
<!-- https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j -->
<dependency>
<groupId>net.sourceforge.tess4j</groupId>
<artifactId>tess4j</artifactId>
<version>3.4.1</version> <!-- used 3.4.2 as well -->
</dependency>
<!-- https://mvnrepository.com/artifact/com.github.jai-imageio/jai-imageio-core -->
<dependency>
<groupId>com.github.jai-imageio</groupId>
<artifactId>jai-imageio-core</artifactId>
<version>1.3.1</version>
<scope>runtime</scope> <!-- tried without this as well -->
</dependency>
已将 JAR 添加到
`Payara\glassfish\modules`
Tess4J 代码(如果能对此进行任何改进,我们将不胜感激)。
ITesseract instance = new Tesseract();
instance.setDatapath(pLangaugePath); // C:\t
instance.setLanguage(pLanguage); // eng
try {
File[] tifFiles = PdfUtilities.convertPdf2Png(pFile);
if (tifFiles != null) {
for (File tifFile : tifFiles) {
String ocrText = instance.doOCR(tifFile);
if (StringUtils.isNotBlank(ocrText)) {
ret.append(ocrText);
}
}
}
} catch (TesseractException e) {
LOG.error("Could not do ocr on image file created via pdf ", e);
}
也尝试过以下两个例子。 1.
try (PDDocument document = PDDocument.load(pFile)) {
int totalPages = document.getNumberOfPages();
PDFRenderer renderer = new PDFRenderer(document);
for (int pi = 0; pi < totalPages; pi++) {
BufferedImage image = renderer.renderImageWithDPI(pi, 75);
String ocrText = instance.doOCR(image);
if (StringUtils.isNotBlank(ocrText)) {
ret.append(ocrText);
}
}
} catch (Exception e) {
LOG.error("Could not do ocr on pdf", e);
}
2.
try {
ITesseract instance = new Tesseract();
instance.setDatapath(pLangaugePath); // C:\t
instance.setLanguage(pLanguage); // eng
String ocrText = instance.doOCR(pFile);
if (StringUtils.isNotBlank(ocrText)) {
ret.append(ocrText);
}
} catch (Exception e) {
LOG.error("Could not do ocr on image file created via pdf ", e);
}
研究:
找到这个Didnt work / solution
由于 JNA RESOURCE_PREFIX
字符串常量不可用导致的 运行 时间异常,Tess4J 因无法与 Glassfish 一起工作而闻名。此问题已在最新版本 3.4.9(对于 Tesseract 3.05.01)和 4.0.2(对于 Tesseract 4.0.0-beta.1)中得到修复。该库现在可以与 Glassfish 一起使用,也许还可以与 Payara Server 一起使用。
您可能还需要在 OCR 调用之前包含 ImageIO.scanForPlugins();
语句。这是为了确保适当的 ImageReader
可用于读取输入图像。