在Java通过Tess4j使用Tesseract-OCR技术时,须加载对应操作系统所使用的动态链接文件。在Linux下是.so文件,而在Win下是.dll文件。官方规定可以将这些文件以特定的命名及路径放置在项目的classpath路径下,例如这个样子
这样, 系统在要加载Tesseract时会先把动态链接库加载到内存中以便使用,这种做法在Win上跑是没有问题的,项目启动Tess4j会自动去Classpath下找到动态链接库并加载进内存。但在Linux上就不同了,Linux下Tess4j虽然会去Classpath下加载libtesseratc.so文件,但liblept.so文件并不会自动加载,这样在调用Tesseract类中的方法doOCR进行图像识别时就会报错。错误信息大概是这样
ERROR 16902 --- [nio-8080-exec-3] o.s.b.w.servlet.support.ErrorPageFilter : Forwarding to error page from request [/imageToText] due to exception [Could not initialize class net.sourceforge.tess4j.TessAPI]
或者是
liblept.so.5: cannot open shared object file: No such file or directory
大致意思就是加载liblept.so.5的类库失败了,所以调用失败了。
解决方案:
1. 在服务器上将liblept.so文件放到/usr/local/lib下(也可以命名不为liblept.so,可根据报错信息调整为相应的命名文件始终为此文件),这里的动态链接会被加载。而classpath下的Linux-x86-64下只