• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Bear Bibeault
  • Ron McLeod
  • Jeanne Boyarsky
  • Paul Clapham
Sheriffs:
  • Tim Cooke
  • Liutauras Vilda
  • Junilu Lacar
Saloon Keepers:
  • Tim Moores
  • Stephan van Hulst
  • Tim Holloway
  • fred rosenberger
  • salvin francis
Bartenders:
  • Piet Souris
  • Frits Walraven
  • Carey Brown

Web Service For Optical Character Recognition

 
Greenhorn
Posts: 5
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I created RestFul Web Service for Optical Character Recognition Using Tesseract OCR Engine with J4L ocr Wrapper. I got javax.servlet.ServletException: java.lang.NoClassDefFoundError: Could not initialize class com.java4less.ocr.tess3.Wrapper
this Error.


My Web Service:

public static String getText(@PathParam("image") String img){

OCRFacade facade=new OCRFacade();
System.out.println("facade object created----------------> "+facade.hashCode());
System.out.println(img);
java.io.File currentDir= new java.io.File(img);

String path=currentDir.getAbsolutePath();
String text=facade.recognizeFile(path+".png", "eng");
System.out.println(text);
return text;
}

Can anyony one solve my problem.


Thanks,
Surya



 
Sheriff
Posts: 21972
106
Eclipse IDE Spring VI Editor Chrome Java Ubuntu Windows
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Welcome to the Ranch!

Please CarefullyChooseOneForum. This forum is about user interface questions; I don't see any user interface specific issue in your question. I'll move this thread to a better location.

The cause of the problem is a missing library on the class path. The class com.java4less.ocr.tess3.Wrapper class can be found, but a class it requires cannot. Check the website for all dependencies, and add those to the web application's WEB-INF/lib folder as well.
 
prakash manem
Greenhorn
Posts: 5
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
My Web services is working fine for J4L wrapper on Tesseract .Now I added another method for Tess4j wrapper on Tesseract.But its not working.I got Exceptions like:



23 Nov, 2011 3:47:29 PM com.sun.jersey.spi.container.ContainerResponse mapMappableContainerException
SEVERE: The RuntimeException could not be mapped to a response, re-throwing to the HTTP container
java.util.NoSuchElementException
at javax.imageio.spi.FilterIterator.next(ServiceRegistry.java:808)
at javax.imageio.ImageIO$ImageWriterIterator.next(ImageIO.java:816)
at javax.imageio.ImageIO$ImageWriterIterator.next(ImageIO.java:801)
at net.sourceforge.vietocr.ImageIOHelper.getImageByteBuffer(ImageIOHelper.java:189)
at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:133)
at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:88)
at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:75)
at org.ocr.OcrDAO.ocrTess4j(OcrDAO.java:141)
at org.ocr.OcrResource.getTess4jText(OcrResource.java:44)
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 com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:185)
at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:288)
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1469)
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1400)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1349)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1339)
at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:699)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:851)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:278)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:300)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
23 Nov, 2011 3:47:29 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [Jersey] in context with path [/OcrWebService] threw exception
java.util.NoSuchElementException
at javax.imageio.spi.FilterIterator.next(ServiceRegistry.java:808)
at javax.imageio.ImageIO$ImageWriterIterator.next(ImageIO.java:816)
at javax.imageio.ImageIO$ImageWriterIterator.next(ImageIO.java:801)
at net.sourceforge.vietocr.ImageIOHelper.getImageByteBuffer(ImageIOHelper.java:189)
at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:133)
at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:88)
at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:75)
at org.ocr.OcrDAO.ocrTess4j(OcrDAO.java:141)
at org.ocr.OcrResource.getTess4jText(OcrResource.java:44)
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 com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:185)
at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:288)
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1469)
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1400)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1349)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1339)
at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:699)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:851)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:278)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:300)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)

My code:

public static String ocrTess4j(HttpServletRequest req) throws Exception
{
// InputStream uploadedInputStream = null;
if (ServletFileUpload.isMultipartContent(req)) {

FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem> items = null;
try {

items = upload.parseRequest(req);

if (items != null) {
Iterator<FileItem> iter = items.iterator();
while (iter.hasNext()) {
FileItem item = iter.next();
if (!item.isFormField() && item.getSize() > 0) {
fileName = item.getName();
InputStream is = item.getInputStream();
System.out.println("Image Name------------>"+fileName);

String uploadedFileLocation = "D://OCR_Images/"; + fileName;


// save it
writeToFile(is, uploadedFileLocation);

//String output = "File uploaded to : " + uploadedFileLocation;
System.out.println("Image Path-------------->"+uploadedFileLocation);


File imageFile = new File("D://OCR_Images/"+fileName);
System.out.println("-----------------"+imageFile);
Tesseract instance = Tesseract.getInstance();

text = instance.doOCR(imageFile);
System.out.println("result:\n"+text);

saveText();

}
}
}
}
catch (TesseractException e) {

System.err.println(e.getMessage());
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

return text;

}
 
Ranch Hand
Posts: 146
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Where is stack trace pointing to?is it this line -
FileItem item = iter.next();

?
 
prakash manem
Greenhorn
Posts: 5
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I got problem here:

text = instance.doOCR(imageFile);


When I run this java file using standalone application this ocr process is working fine and give the output.But when i integrated this code to Web Services its getting problem in the above line.




thanks,

Surya
 
Jitesh Sinha
Ranch Hand
Posts: 146
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
What I meant was the line number that is coming in your exception stack trace is pointing to which line in your code.
how can "text = instance.doOCR(imageFile);" this line result in this error -

java.util.NoSuchElementException
at javax.imageio.spi.FilterIterator.next(ServiceRegistry.java:808)
at javax.imageio.ImageIO$ImageWriterIterator.next(ImageIO.java:816)
at javax.imageio.ImageIO$ImageWriterIterator.next(ImageIO.java:801)


I basically want you to look at this line - "at org.ocr.OcrDAO.ocrTess4j(OcrDAO.java:141) " - the exception is pointing to 141st line of OcrDAO.java.
 
prakash manem
Greenhorn
Posts: 5
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator

Hi thanks for your Reply.

public static String ocrTess4j(HttpServletRequest req) throws Exception
{
// InputStream uploadedInputStream = null;
if (ServletFileUpload.isMultipartContent(req)) {

FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem> items = null;
try {

items = upload.parseRequest(req);

if (items != null) {
Iterator<FileItem> iter = items.iterator();
while (iter.hasNext()) {
FileItem item = iter.next();
if (!item.isFormField() && item.getSize() > 0) {
fileName = item.getName();
InputStream is = item.getInputStream();
System.out.println("Image Name------------>"+fileName);

String uploadedFileLocation = "D://OCR_Images/"; + fileName;


// save it
writeToFile(is, uploadedFileLocation);

//String output = "File uploaded to : " + uploadedFileLocation;
System.out.println("Image Path-------------->"+uploadedFileLocation);


File imageFile = new File("D://OCR_Images/"+fileName);
System.out.println("-----------------"+imageFile);
Tesseract instance = Tesseract.getInstance();

text = instance.doOCR(imageFile);


In the above code i got the image file using this line

File imageFile = new File("D://OCR_Images/"+fileName);

I created tesseract instance and pass this file to doOCR() like below:

Tesseract instance = Tesseract.getInstance();

text = instance.doOCR(imageFile); //this is 141 line


But doOCR() cannot process the OCR operation to my imageFile .









 
Jitesh Sinha
Ranch Hand
Posts: 146
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
This seems to be Tesseract api issue - someone who knows about that API would be able to help.
Just one confirmation - The image path is correct ?Are you deploying your code on Windows OS?
 
prakash manem
Greenhorn
Posts: 5
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Thanks Jitesh Sinha .


My ImagePath is Correct and I am using Windows 7.
 
No thanks. We have all the government we need. This tiny ad would like you to leave now:
Building a Better World in your Backyard by Paul Wheaton and Shawn Klassen-Koop
https://coderanch.com/wiki/718759/books/Building-World-Backyard-Paul-Wheaton
    Bookmark Topic Watch Topic
  • New Topic