对比了apache的tika以及Tesseract,发现同样的图片,Tesseract识别率更高,所以采用Tesseract识别。
注意:Windows环境可以在没有安装Tesseract引擎的情况下运行,Linux环境必须安装Tesseract引擎
1.Windows
1.1 添加tess4j依赖
<dependency><groupId>net.sourceforge.tess4j</groupId><artifactId>tess4j</artifactId><version>5.11.0</version>
</dependency>
1.2 下载训练文件
chi_sim.traineddata、eng.traineddata,
下载地址:GitHub - tesseract-ocr/tessdata: Trained models with fast variant of the "best" LSTM models + legacy models
1.3 编写代码
String imageBase64 = Base64后的图片信息;
String imageText = "";
try {ITesseract tesseract = new Tesseract();tesseract.setDatapath("***"); //这里是训练文件所在的路径tesseract.setLanguage("chi_sim");imageText = tesseract.doOCR(ImgUtil.toImage(imageBase64));log.debug("ocr={}", imageText);
} catch (Exception e) {log.error("Tesseract解析图片出现异常", e);throw new AiBusinessException("Tesseract解析图片出现异常", e);
}
1.4 测试
修改对应的代码,运行测试程序就可以查看运行结果了。
2.Linux
因为服务是使用Docker发布的,所以需要将Tesseract引擎安装在docker镜像中。
2.1 编写Dockerfile
# 使用官方支持Java8的Alpine镜像(2025年验证有效)
FROM eclipse-temurin:8-jdk-alpine# 安装glibc兼容层(必须步骤)
RUN wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub \&& wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.35-r3/glibc-2.35-r3.apk \&& apk add --no-cache glibc-2.35-r3.apk# 安装Tesseract OCR组件
RUN apk add --no-cache \tesseract-ocr=5.0.1-r0 \tesseract-ocr-data-eng=4.1.3-r0 \tesseract-ocr-data-chi_sim=4.1.3-r0 \leptonica-dev=1.82.0-r0 \libstdc++=12.2.1_git20220924-r4# 强制创建符号链接(Alpine特有路径)
RUN ln -sv /usr/lib/libtesseract.so.5 /usr/lib/libtesseract.so# 配置环境变量
ENV LD_LIBRARY_PATH="/usr/lib:$LD_LIBRARY_PATH"
2.2 打包镜像
这个需要较长时间,我本地执行了10分钟:
docker build -t tesseract-jdk8:v1 .
2.3 制作应用镜像
将SpringBoot应用打好jar包,并将训练文件放在tessdata目录下,编写如下应用Dockerfile
FROM tesseract-jdk8:v1ENV TIME_ZONE Asia/ShanghaiRUN ln -snf /usr/share/zoneinfo/$TIME_ZONE /etc/localtime# 部署应用
COPY ./app.jar /app.jar
ADD ./tessdata /tessdataEXPOSE 9078ENTRYPOINT ["java","-Xmx512m","-Xms512m","-XX:+PrintGCDetails","-jar","/app.jar"]
docker build -t tesseract-test:v1 .
2.4 运行docker服务
docker run -d -p 9078:9078 --name tesseract-test tesseract-test
2.5 测试
测试在发布后的服务能否进行图片文字识别