创建了一个使用 Tesseract 的 Java 应用程序,以便将给定的图像或 pdf 转换为字符串格式,当在我的机器上使用 junit 作为单元测试运行它时,它运行良好,但是在运行完整系统时,它是由 tomcat 运行的 restFul API接收图像并运行 Tesseract 它给了我以下错误:
23:22:36.511 [http-nio-9999-exec-3] 错误 net.sourceforge.tess4j.Tesseract - null java.lang.NullPointerException: null at net.sourceforge.tess4j.util.PdfUtilities.convertPdf2Png(PdfUtilities.java: 107) 在 net.sourceforge.tess4j.util.ImageIOHelper.getIIOImageList(ImageIOHelper.java:343) 在 net.sourceforge.tess4j.Tesseract.doOCR 的 net.sourceforge.tess4j.util.PdfUtilities.convertPdf2Tiff(PdfUtilities.java:48) (Tesseract.java:213) 在 net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:197) 在 ocr.OcrUtil.getString(OcrUtil.java:54) 在 com.tapd.server.api.handlers.IRSHandler。在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl 在 com.tapd.server.api.WebAPIService.updateParentIrsForm(WebAPIService.java:250) 上传 IRSImage(IRSHandler.java:65)。在 org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory$1.invoke(ResourceMethodInvocationHandlerFactory) 的 sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) 调用(Unknown Source) .java:81) 在 org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:144) 在 org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java: 161)在 org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher 的 org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:160)。dispatch(AbstractJavaResourceMethodDispatcher.java:99) at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:389) at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:347)在 org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:102) 在 org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:309) 在 org.glassfish.jersey.internal。 Errors$1.call(Errors.java:271) at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267) at org.glassfish.jersey.internal.Errors.process(Errors.java:315)在 org.glassfish.jersey.internal.Errors.process(Errors.java:297) 在 org.glassfish.jersey.internal.Errors.process(Errors.java:267) 在 org.glassfish.jersey.process.internal.RequestScope .runInScope(RequestScope.java:317) 在 org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:292) 在 org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1139) 在 org.glassfish .jersey.servlet.WebComponent.service(WebComponent.java:460) 在 org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:386) 在 org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java :334) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230) 在 org.apache.catalina.core 的 org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:221)。 ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 在 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 在 org.apache.catalina.core.StandardWrapperValve .invoke(StandardWrapperValve.java:198) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:108) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:522) 在 org. apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve. java:620) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349) 在 org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:1110) 在 org.apache.coyote.AbstractProcessorLight.process (AbstractProcessorLight.java:66) 在 org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:785) 在 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1425) 在org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 在 java.lang.Thread.run(Unknown Source) [2016-09-14 23:22:36,512] [错误] java.lang.NullPointerException
我的猜测是 tessdata 文件夹不在正确的位置,当打包到 Jar 并由 tomcat 运行时,它放错了位置,但我不知道它应该放在哪里,我仔细检查了所有的 Jar部署正确。
编辑:所以当Tesseract在AWS S3等远程服务器上时,它似乎无法处理路径,所以问题是为什么?以及如何允许它使用来自 S3 的路径?(是的,文件是公开的)