作者:cndz 围观群众:587 更新于 标签:tess4jocr图片文字识别linux 下 文字识别
在做工具站的时候想给网站添加个图片OCR功能,最终选择tess4j来实现。在使用过程中遇到了一些问题。在此记录下。
1.引入maven
<dependency>
<groupId>net.sourceforge.tess4j</groupId>
<artifactId>tess4j</artifactId>
<version>5.3.0</version>
</dependency>
工具类代码
package util;
import net.sourceforge.tess4j.ITesseract;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.Tesseract1;
import net.sourceforge.tess4j.TesseractException;
import java.io.File;
/**
* @author:zzy
* @date:Created in 2023/4/14 21:32
* @modified By:zzy
*/
public class JavaOcrUtil {
public static String doOcr(String filePath,String language){
// 执行OCR识别
File file = new File(filePath);
Tesseract1 instance = new Tesseract1();
// 设置语言
instance.setLanguage(language);
try {
String result = instance.doOCR(file);
return result;
} catch (TesseractException e) {
throw new IllegalArgumentException("ocr出错");
}
}
public static void main(String[] args) {
System.out.println(doOcr("d://test/test.jpg","jpn"));
}
}
tessdata模型文件下载地址 https://github.com/tesseract-ocr/tessdata
1.在windows下添加环境变量。模型文件存放位置。
2.Tess4j 不是夸平台的。只对windows开箱即用。
打包部署到linux系统。突然发现调用工具类方法的时候突然报错了。在查询一些资料后发现tess4j本身并不是跨平台的。我的服务器使用的是linux系统。所以需要进行单独配置。
yum install gcc gcc-c++ make
yum install autoconf automake libtool
yum install libjpeg-devel libpng-devel libtiff-devel zlib-devel
wget https://github.com/DanBloomberg/leptonica/releases/download/1.82.0/leptonica-1.82.0.tar.gz
tar -xzvf leptonica-1.82.0.tar.gz
cd leptonica-1.82.0
./configure
make && make install
vim /etc/profile
在最后插入
export LD_LIBRARY_PATH=$LD_LIBRARY_PAYT:/usr/local/lib
export LIBLEPT_HEADERSDIR=/usr/local/include
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
保存退出后执行下面命令 让配置生效
source /etc/profile
wget https://github.com/tesseract-ocr/tesseract/archive/refs/tags/5.2.0.tar.gz
重名名下压缩包
mv 5.2.0.tar.gz tesseract-5.2.0.tar.gz
tar -xzvf tesseract-5.2.0.tar.gz
cd tesseract-5.2.0/
./autogen.sh
./configure
make && make install
sudo ldconfig
复制tess4j要的一些so文件复制到 lib64下。
cp /usr/local/lib/*.so.* /usr/lib64/
检查下是否安装成功
也可以使用下面命令直接进行ocr。查看结果验证程序是否安装完成。
tesseract card.jpg c -l chi_sim
3.第二步执行完毕后。发现调用程序还是报错。甚至会把整个程序宕掉。提示信息如下。将环境变量TESSDATA_PREFIX配置到/etc/profile中刷新配置文件发现并没有作用。
Note: further occurrences of this error will be logged at DEBUG level.
Error opening data file ./chi_sim.traineddata
Please make sure the TESSDATA_PREFIX environment variable is set to your "tessdata" directory.
Failed loading language 'chi_sim'
Tesseract couldn't load any languages!
解决办法:在工具类中指定模型文件所在位置。
public class JavaOcrUtil {
public static String doOcr(String filePath,String language){
// 执行OCR识别
File file = new File(filePath);
Tesseract1 instance = new Tesseract1();
// 设置语言
instance.setLanguage(language);
instance.setDatapath("/usr/tessocr/tesseract-5.2.0/tessdata");
try {
String result = instance.doOCR(file);
return result;
} catch (TesseractException e) {
throw new IllegalArgumentException("ocr出错");
}
}
public static void main(String[] args) {
System.out.println(doOcr("d://test/test.jpg","jpn"));
}
}
第三点问题到最终也不知道为什么。如果有哪位大佬知道原因。可以在评论指导下。
最后希望这篇文章能给需要的朋友们提供一点点帮助吧。