[SPRING] 봄 mvc와 tess4j
SPRING봄 mvc와 tess4j
나는 tess4j를 독립형 자바 프로그램으로 시험해 보았고 텍스트 출력을 제대로 수행했다.
이제 봄 mvc 웹 프로젝트 pess에 tess4j에 대한 종속성을 추가하려면 만들고 내 프로젝트 내에서 tess4j 소스를 추가하려고합니다.
File imageFile = new File("D:/Data/jars/tess/eurotext.tif");
Tesseract instance = Tesseract.getInstance(); // JNA Interface Mapping
// Tesseract1 instance = new Tesseract1(); // JNA Direct Mapping
try {
result = instance.doOCR(imageFile);
System.out.println(result);
} catch (TesseractException e) {
System.err.println(e.getMessage());
}
위의 코드는 올바르게 jar 파일이 경로를 제대로 빌드하기 위해 추가되었다는 것을 명확히하기 위해 project.so 파일 내에 독립형 자바 프로그램을 실행하려고했을 때 제대로 작동합니다.
하지만 컨트롤러 매핑이나 서비스에서 코드를 호출하면 런타임 예외가 발생합니다.
SEVERE: Unsupported image format. May need to install JAI Image I/O package.
https://java.net/projects/jai-imageio/
java.lang.RuntimeException: Unsupported image format. May need to install JAI Image I/O package.
https://java.net/projects/jai-imageio/
at net.sourceforge.vietocr.ImageIOHelper.getIIOImageList(ImageIOHelper.java:324)
at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:173)
at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:158)
at com.ocr.tesseract.TesseractExample.getTextFromImage(TesseractExample.java:27)
at com.cogz.tp.controller.HomeController.view(HomeController.java:51)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:214)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:748)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:689)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:945)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:876)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:931)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:822)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:807)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:409)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1044)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
at java.lang.Thread.run(Thread.java:662)
java.lang.RuntimeException: Unsupported image format. May need to install JAI Image I/O package.
https://java.net/projects/jai-imageio/
실종 된 걸 알려주세요. 미리 감사드립니다.
해결법
-
==============================
1.심지어 DynamicWebProject에 tess4j를 사용하는 것과 유사한 문제에 직면했습니다. 그러나 @nguyenq의 의견에 감사 드리며, 도움을주었습니다. 대부분 tess4j는 광학 인식을 위해 TIFF 처리기를 사용합니다. 기본 ImageIO에서는 필요한 종속성을 사용할 수 없습니다. 따라서 jai-imageio.jar이 필요합니다. doOCR을 수행 한 래퍼 클래스를 호출하기 전에 ImageIO.scanForPlugins () 라인이 추가되었습니다. 내 lib에 항아리를 다음과 같이했다 :
심지어 DynamicWebProject에 tess4j를 사용하는 것과 유사한 문제에 직면했습니다. 그러나 @nguyenq의 의견에 감사 드리며, 도움을주었습니다. 대부분 tess4j는 광학 인식을 위해 TIFF 처리기를 사용합니다. 기본 ImageIO에서는 필요한 종속성을 사용할 수 없습니다. 따라서 jai-imageio.jar이 필요합니다. doOCR을 수행 한 래퍼 클래스를 호출하기 전에 ImageIO.scanForPlugins () 라인이 추가되었습니다. 내 lib에 항아리를 다음과 같이했다 :
tess4j.jar
jai_imageio.jar
고스트 4j-0.3.1.jar
jna.jar
junit-4.10.jar
샘플 코드는 다음과 같습니다.
TessractOCR tessocr = new TessractOCR(); ImageIO.scanForPlugins(); String extractedString = tessocr.extractTextFromImage(binarizrImage);
함수
public static String extractTextFromImage(BufferedImage image){ RenderedImage img = image; String result =null; try { File outputfile = new File("saved.png"); ImageIO.write(img, "png", outputfile); Tesseract instance = Tesseract.getInstance(); // JNA Interface Mapping instance.setDatapath("E:\\OCR-data\\Tess4J-1.2-src\\Tess4J"); result = instance.doOCR(outputfile); System.out.println(result); } catch (Exception e) { System.err.println(e.getMessage()); } return result; }
100 % 작동합니다 :)
-
==============================
2.다음은 모두를위한 작업 코드 공유입니다.
다음은 모두를위한 작업 코드 공유입니다.
public static String doOCR(File pdfInvoice) { String result = ""; long totalTime = 0; long endTime = 0; long startTime = System.currentTimeMillis(); File imageFile = new File("D:\\docfolder\\9011121584.pdf"); Tesseract instance = Tesseract.getInstance(); // try { ImageIO.scanForPlugins(); result = instance.doOCR(imageFile); endTime = System.currentTimeMillis(); totalTime = endTime - startTime; System.out.println("Total Time Taken For OCR: " + (totalTime / 1000)); return result; } catch (Exception e) { System.err.println(e.getMessage()); result = ""; return result; } }
from https://stackoverflow.com/questions/22014969/tess4j-with-spring-mvc by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 다중 스프링 배치 작업 (0) | 2019.05.25 |
---|---|
[SPRING] 리스트와 체크 박스를 사용한 Spring MVC 데이터 바인딩 (0) | 2019.05.25 |
[SPRING] 리소스의 엔티티 링크를 포함하지 않는 Spring 데이터 REST (0) | 2019.05.25 |
[SPRING] Springboot TomcatEmbeddedServletContainer KeepAliveTimeout이 작동하지 않습니다. (0) | 2019.05.25 |
[SPRING] Java 8로 WebSphere에서 애플리케이션을 실행할 때 봄 예외 (0) | 2019.05.25 |