TikaException:无法关闭临时资源-如何解决?

时间:2019-07-16 19:12:40

标签: java apache maven tesseract apache-tika

我正在Windows 10 jre 1.8.0_181上使用Apache Tika,并且已经使用Maven导入了Tika,并具有以下依赖性:

<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.apache.tika</groupId>
      <artifactId>tika-parsers</artifactId>
      <version>1.21</version>
    </dependency>
</dependencies>

我有下面的代码用于使用Tesseract执行OCR(我已经对其进行了独立测试并知道正在工作):

public static void OCRTest() {
        try {
            BufferedImage im = ImageIO.read(new File(OCR_IMAGE));
            TesseractOCRConfig config = new TesseractOCRConfig();
            config.setTessdataPath("C:\\Program Files\\Tesseract-OCR\\tessdata");
            config.setTesseractPath("C:\\Program Files\\Tesseract-OCR");
            ParseContext parseContext = new ParseContext();
            parseContext.set(TesseractOCRConfig.class, config);
            TesseractOCRParser parser = new TesseractOCRParser();
            BodyContentHandler handler = new BodyContentHandler();
            Metadata metadata = new Metadata();
            try {
                parser.parse(im, handler, metadata, parseContext);
                System.out.println(handler.toString());
            } catch (SAXException e) {
                e.printStackTrace();
            } catch (TikaException e) {
                e.printStackTrace();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

我遇到以下异常:

org.apache.tika.exception.TikaException: Failed to close temporary resources
    at org.apache.tika.io.TemporaryResources.dispose(TemporaryResources.java:174)
    at org.apache.tika.parser.ocr.TesseractOCRParser.parse(TesseractOCRParser.java:251)
    at test.test.App.OCRTest(App.java:46)
    at test.test.App.main(App.java:30)
Caused by: java.nio.file.FileSystemException: C:\Users\m\AppData\Local\Temp\apache-tika-2643805894084124300.tmp: The process cannot access the file because it is being used by another process.

tmp文件位于Temp文件夹中,并且异常似乎来自无法删除它。在Apache Tika论坛上,有一个post,其他人也遇到了相同的异常,尽管使用AutoDetectParser而不是Tesseract。他们的问题似乎与他们导入的jar冲突,但是即使只安装了Apache Tika库,我也遇到了这个问题。

仅在TesseractOCRParser上使用Tika的AutoDetectParser时,我不会遇到这个问题。关于如何解决该异常的任何见解将不胜感激!

1 个答案:

答案 0 :(得分:1)

我在Apache Tika问题论坛(https://issues.apache.org/jira/browse/TIKA-2908)上发布了文章。问题来自TesseractOCRParser关闭开放流的顺序-您可以在此处查看所做的更改:https://github.com/apache/tika/commit/8d386f827eb31e7f1cb189ce942c67a84a0c6bdc?diff=unified#diff-592f390e7558bb6a1fe1c5bc810fe4c8

现在,对于遇到此问题的任何人,请在本地将TesseractOCRParser子类化以包含上述更改,这些更改应在下一个快照版本中推送。

感谢Tim @ Apache Tika!