Tess4j& Tesseract OCR简介
Tess4j& Tesseract OCR简介
Tess4J 是一个基于 Tesseract OCR 引擎的 Java 接口,可以用来识别图像中的文本。Tesseract 是一个由 Google 开发的开源 OCR 引擎,可以识别多种语言的文本。Tess4J 将 Tesseract 引擎的优势和简单性与 Java 的可移植性和易用性相结合,是一个非常强大的 OCR 解决方案。
Tess4J 提供了丰富的 API,可以很方便地进行图像处理和文本识别。它支持多种格式的图像文件,包括 BMP、PNG、JPEG、GIF 和 TIFF 等格式。Tess4J 还可以进行图像预处理,例如裁剪、缩放和二值化等,以提高文本识别的准确性
tess4J Maven 版本:https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j
Tesseract OCR代码库:https://github.com/tesseract-ocr/
简单实现
引入maven依赖
<dependency>
<groupId>net.sourceforge.tess4j</groupId>
<artifactId>tess4j</artifactId>
<version>4.0.0</version>
</dependency>
添加一个简单的实现方法
System.out.println("=======================================");
ITesseract iTesseract = new Tesseract();
//默认识别英文
//如果需要识别英文之外的语种,需要指定识别语种,并且需要将对应的语言包放进项目中
iTesseract.setDatapath("/usr/local/tesseract/share/tessdata");
iTesseract.setLanguage("chi_sim");
File img = new File(path);
long startTime = System.currentTimeMillis();
//识别结果
String ocrResult = iTesseract.doOCR(img);
上述代码文件路径对应需求更改
语言库下载
语言库下载地址,选择需要的语言即可,下载后在resources下新建data文件夹
到这里一个简单的windows环境,ocr图片识别功能就做完了
Linux环境使用
提示:在Linux环境中我们没法开箱即用,需要安装配置相应的环境
首先安装最基本的依赖 ,如缺少依赖后续安装tesseract和识别时会报错
yum install autoconf automake libtool libjpeg-devel libpng-devel libtiff-devel zlib-devel gcc gcc-c++
环境安装配置
由于tess4j是对tesseract的封装,tesseract又依赖于leptonica。所以我们需要先安装好tesseract与leptonica。
tesseract下载地址:https://github.com/tesseract-ocr/tesseract/releases/tag/4.1.1
leptonica下载地址:http://www.leptonica.org/download.html
下载好后放在自己定义好的服务器文件夹中。这里我们放到/opt/下。
安装命令
cd /opt
mkdir /usr/local/leptonica
tar -xzvf leptonica-1.79.0.tar.gz
cd leptonica-1.79.0
./configure --prefix=/usr/local/leptonica && make && make install //这里的安装位置是/usr/local/leptonica ,看自己心情安装
cd /opt
mkdir /usr/local/tesseract
tar -xzvf 4.1.1.tar.gz
cd tesseract-4.1.1
# 必须先运行autogen.sh文件才会有configuer文件
./autogen.sh
# 编译安装到指定文件夹
./configure --prefix=/usr/local/tesseract && make && make install
配置leptonica环境变量
vim /etc/profile
在开头或者末尾添加 注意替换成自己的安装路径
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/leptonica/lib/pkgconfig
export PKG_CONFIG_PATH
CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/local/leptonica/include/leptonica
export CPLUS_INCLUDE_PATH
C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/leptonica/include/leptonica
export C_INCLUDE_PATH
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/leptonica/lib
export LD_LIBRARY_PATH
LIBRARY_PATH=$LIBRARY_PATH:/usr/local/leptonica/lib
export LIBRARY_PATH
LIBLEPT_HEADERSDIR=/usr/local/leptonica/include/leptonica
export LIBLEPT_HEADERSDIR
配置tesseract环境变量:
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/leptonica/lib:/usr/local/tesseract/lib
export LD_LIBRARY_PATH
LIBRARY_PATH=$LIBRARY_PATH:/usr/local/leptonica/lib:/usr/local/tesseract/lib
export LIBRARY_PATH
LIBLEPT_HEADERSDIR=/usr/local/leptonica/include/leptonica
export LIBLEPT_HEADERSDIR
PATH=$PATH:/usr/local/tesseract/bin
export PATH
export TESSDATA_PREFIX=/usr/local/xxx/xxxx ##注意:该位置是训练库所在文件目录
export PATH=$PATH:$TESSDATA_PREFIX
环境生效:
source /etc/profile
测试是否安装成功:
tesseract --version
出现一下信息即为安装成功
测试一下识别本地图片:tesseract 222.jpg out -l chi_sim
springboot 调用代码识别:
踩坑记录
报错信息:
Could not initialize class net.sourceforge.tess4j.TessAPI] with root cause
java.lang.ExceptionInInitializerError: Exception java.lang.UnsatisfiedLinkError: Unable to load library 'tesseract':
libtesseract.so: 错误 ELF 类: ELFCLASS64
libtesseract.so: 错误 ELF 类: ELFCLASS64
/usr/lib/libtesseract.so.4: 错误 ELF 类: ELFCLASS64
Native library (linux-x86/libtesseract.so) not found in resource path ([jar:file:/opt/czsj/chuzhou-audit-robot-base-1.1.0.jar!/BOOT-INF/classes!/
jdk 版本装错了 要装64位的
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00007f7ab74ecef9, pid=5614, tid=0x00007f7adb2fe700
#
# JRE version: Java(TM) SE Runtime Environment (8.0_391) (build 1.8.0_391-b13)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.391-b13 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# C [libtesseract.so+0x26bef9] ERRCODE::error(char const*, TessErrorLogCode, char const*, ...) const+0x129
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# An error report file with more information is saved as:
# /opt/czsj/hs_err_pid5614.log
#
# If you would like to submit a bug report, please visit:
# http://bugreport.java.com/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#
jvm报错程序崩溃:
解决方案:好像是因为tess4j 版本和tesseract 版本不匹配 可以更换版本尝试是否能够解决,个人由 4.5.4 配 tesseract 4.0.0 换成了 4.5.1 配 4.1.1 就可以了
完结撒花