基于SpringBoot+Tess4j实现图像文字识别功能
1. 什么是 Tess4j
1.1 OCR
OCR 是 "Optical Character Recognition"(光学字符识别)的缩写,它是一种技术,能够将不同形式的文档(如纸质文档、PDF 文件或图像)中的打印文本、手写文本或其他类型的数据转换为机器可编辑和可搜索的数据格式,如文本文件或电子文档。
OCR 技术的工作流程通常包括以下几个步骤:
- 图像预处理: 这一步包括图像的获取、二值化、去噪、旋转校正、分割等,以提高后续识别的准确性。
- 文本检测: 在图像中定位文本的位置,通常是通过检测文本的行、单词或字符边界。
- 特征提取: 从图像中提取文本的特征,这些特征将用于识别过程。
- 字符识别: 这一步涉及将提取的特征与已知字符的模式进行匹配,以识别每个字符。
- 后处理: 这一步包括对识别结果进行校对、格式化、布局分析等,以提高整体的可读性和准确性。
OCR 技术的应用非常广泛,包括:
- 文档管理: 将纸质文档转换为电子文档,便于存储和搜索。
- 数据输入: 自动从表格、表单等文档中提取数据,减少手动输入的工作量。
- 内容分析: 从大量文档中提取信息,用于数据分析或知识管理。
- 辅助技术: 帮助视力障碍人士通过语音合成将文本转换为语音。
1.2 Tesseract OCR
Tesseract OCR(光学字符识别)是一个开源的 OCR 引擎,最初由 HP 实验室开发,并在 2005 年开源,之后由 Google 赞助并继续开发。它是目前最准确、最流行的开源 OCR 工具之一。
1.3 Tess4j
Tess4J 是一个 Java 库,它是 Tesseract OCR 引擎的 Java 封装器。Tess4J 允许 Java 开发者轻松地将 Tesseract OCR 的功能集成到他们的 Java 应用程序中。通过 Tess4J,Java 程序可以调用 Tesseract 来执行光学字符识别(OCR)任务,即将图像中的文字转换为可编辑和可搜索的文本格式。
Tess4j 的特点:
- 易于集成: Tess4J 提供了简单的 API,使得在 Java 应用程序中使用 Tesseract 变得非常容易。
- 跨平台: Tess4J 可以在任何支持 Java 的操作系统上运行,包括 Windows、macOS 和 Linux。
- 功能丰富: Tess4J 支持 Tesseract 的所有主要功能,包括多语言识别、自定义训练等。
- 社区支持: 作为一个开源项目,Tess4J 拥有一个活跃的社区,提供支持和更新。
2. 下载字体库
下载地址:
https://github.com/tesseract-ocr/tessdata
2.1 中文字体库
点击 chi_sim.traineddata

中文字体库下载
接着点击下载按钮

下载按钮
2.2 英文字体库
点击 eng.traineddata

英文字体库下载
接着点击下载按钮

英文字体库下载按钮
3. 在 SpringBoot 项目中集成 Tess4j
本次演示的环境为:JDK 17.0.7 + SpringBoot 3.0.2
3.1 引入依赖
<dependency>
<groupId>net.sourceforge.tess4j</groupId>
<artifactId>tess4j</artifactId>
<version>4.1.1</version>
</dependency>3.2 编写配置文件
将 F:/HeiMaTouTiao/tessdata 更换为你存放字体库文件的目录(使用绝对路径)
application.yml
server: port: 11014 tess4j: data-path: F:/HeiMaTouTiao/tessdata chinese-train-data: chi_sim english-train-data: eng
3.3 编写配置类
Tess4jConfiguration.java
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Configuration
@ConfigurationProperties(prefix = "tess4j")
publicclass Tess4jConfiguration {
private String dataPath;
private String chineseTrainData;
private String englishTrainData;
public String getDataPath() {
return dataPath;
}
public void setDataPath(String dataPath) {
this.dataPath = dataPath;
}
public String getChineseTrainData() {
return chineseTrainData;
}
public void setChineseTrainData(String chineseTrainData) {
this.chineseTrainData = chineseTrainData;
}
public String getEnglishTrainData() {
return englishTrainData;
}
public void setEnglishTrainData(String englishTrainData) {
this.englishTrainData = englishTrainData;
}
}
4. 测试图像识别功能
4.1 中文
4.1.1 测试代码
import cn.edu.scau.config.Tess4jConfiguration;
import net.sourceforge.tess4j.ITesseract;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.io.File;
@SpringBootTest
publicclass Tess4jApplicationTests {
@Autowired
private Tess4jConfiguration tess4jConfiguration;
@Test
public void testChinese() throws TesseractException {
long start = System.currentTimeMillis();
ITesseract iTesseract = new Tesseract();
// 设置字体库路径
iTesseract.setDatapath(tess4jConfiguration.getDataPath());
// 设置语言
iTesseract.setLanguage(tess4jConfiguration.getChineseTrainData());
File file = new File("F:/HeiMaTouTiao/tessdata/CaiXuKun-Chinese.png");
// 识别图片
String result = iTesseract.doOCR(file);
long end = System.currentTimeMillis();
System.err.println("耗时:" + (end - start) + "ms");
System.out.println(result);
}
}
4.1.2 测试图片

中文识别测试图片
4.1.3 测试结果
不得不说,图像识别耗时很长

中文识别测试结果
4.2 英文
4.2.1 测试代码
@Test
public void testEnglish() throws TesseractException {
long start = System.currentTimeMillis();
ITesseract iTesseract = new Tesseract();
// 设置字体库路径
iTesseract.setDatapath(tess4jConfiguration.getDataPath());
// 设置语言
iTesseract.setLanguage(tess4jConfiguration.getEnglishTrainData());
File file = new File("F:/HeiMaTouTiao/tessdata/CaiXuKun-English.png");
// 识别图片
String result = iTesseract.doOCR(file);
long end = System.currentTimeMillis();
System.err.println("耗时:" + (end - start) + "ms");
System.out.println(result);
}
4.2.2 测试图片

英文识别测试图片
4.2.3 测试结果

英文识别测试结果
4.3 中英混合
4.3.1 测试代码
中英混合时需要使用中文字体库
@Test
public void testChineseAndEnglish() throws TesseractException {
long start = System.currentTimeMillis();
ITesseract iTesseract = new Tesseract();
// 设置字体库路径
iTesseract.setDatapath(tess4jConfiguration.getDataPath());
// 设置语言
iTesseract.setLanguage(tess4jConfiguration.getChineseTrainData());
File file = new File("F:/HeiMaTouTiao/tessdata/ParagraphWithChineseAndEnglish.png");
// 识别图片
String result = iTesseract.doOCR(file);
long end = System.currentTimeMillis();
System.err.println("耗时:" + (end - start) + "ms");
System.out.println(result);
}
4.3.2 测试图片

中英混合测试图片
4.3.3 测试结果

中英混合测试结果
5. 注意事项
字体库文件的后缀必须是 .traineddata,前缀要与 Java 代码对应

字体库文件命名
以上就是基于SpringBoot+Tess4j实现图像文字识别功能的详细内容,更多关于SpringBoot Tess4j图像文字识别的资料请关注脚本之家其它相关文章!
相关文章
老生常谈spring boot 1.5.4 日志管理(必看篇)
下面小编就为大家带来一篇老生常谈spring boot 1.5.4 日志管理(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧2017-06-06
springBoot 打war包 程序包com.sun.istack.internal不存在的问题及解决方案
这篇文章主要介绍了springBoot 打war包 程序包com.sun.istack.internal不存在的问题及解决方案,亲测试过可以,需要的朋友可以参考下2018-07-07
关于@RequestBody和@RequestParam注解的使用详解
这篇文章主要介绍了关于@RequestBody和@RequestParam注解的使用详解,本文十分具有参考意义,希望可以帮助到你,如果有错误的地方还望不吝赐教2023-03-03
Mybatis-Plus中Mapper的接口文件与xml文件相关的坑记录
这篇文章主要介绍了Mybatis-Plus中Mapper的接口文件与xml文件相关的坑记录,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-01-01


最新评论