用 SpringBoot + Tess4j 优雅实现图像文字识别,真香!

目录

  • 什么是 Tess4j
    • OCR
    • Tesseract OCR
    • Tess4j
  • 下载字体库
    • 中文字体库
    • 英文字体库
  • 在 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. 下载字体库

下载地址:

"

github.com/tesseract-o...

2.1 中文字体库

点击 chi_sim.traineddata

中文字体库下载

接着点击下载按钮

下载按钮

2.2 英文字体库

点击 eng.traineddata

英文字体库下载

接着点击下载按钮

英文字体库下载按钮

3. 在 SpringBoot 项目中集成 Tess4j

本次演示的环境为:JDK 17.0.7 + SpringBoot 3.0.2

3.1 引入依赖

xml 复制代码
<dependency>
    <groupId>net.sourceforge.tess4j</groupId>
    <artifactId>tess4j</artifactId>
    <version>4.1.1</version>
</dependency>

3.2 编写配置文件

将 F:/HeiMaTouTiao/tessdata 更换为你存放字体库文件的目录(使用绝对路径)

application.yml

kotlin 复制代码
server:
  port: 11014

tess4j:
  data-path: F:/HeiMaTouTiao/tessdata
  chinese-train-data: chi_sim
  english-train-data: eng

3.3 编写配置类

Tess4jConfiguration.java

typescript 复制代码
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 测试代码
ini 复制代码
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 测试代码
ini 复制代码
@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 测试代码

中英混合时需要使用中文字体库

ini 复制代码
@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 代码对应

字体库文件命名

相关推荐
省钱兄--zs1 小时前
西安24小时自助健身房解决方案实战:系统开发与部署全流程指南
java·spring boot·系统架构·intellij-idea·需求分析
ly76893 小时前
Spring Boot 集成 Elasticsearch 的生产实践:客户端选型、索引生命周期与批量写入容错
spring boot·elasticsearch·索引生命周期·java api client·批量写入
程序猿_极客3 小时前
【免费】分享一套优质的基于SpringBoot的服装商城管理系统的设计与实现(带可视化图表、协同过滤功能),源码+文档+视频详解(讲解)
java·spring boot·后端·服装商城管理系统
bug菌4 小时前
🤔同事突然问我:Spring的注解 @Component 和 @Service 有何不同?
java·spring boot·后端
Lonely丶墨轩5 小时前
用 Vue + Spring Boot + Python 做一个 AI 双人海龟汤游戏:从出题、联机到自动审稿等核心技术设计与实现
spring boot·后端·游戏
她的男孩6 小时前
打印模板草稿能保存,一点发布就报主从关系:我们把校验拆成了两档
java·spring boot·后端
wno7047 小时前
Spring Boot整合Quartz
java·spring boot·后端
萧瑟余晖8 小时前
Spring Boot Actuator监控运维详解
spring boot
vipxieliang10 小时前
ValidX 财务系统发票验证:发票号、税号、金额校验
java·spring boot
天空鸟_时光不老10 小时前
06-给AI流程加一道人工闸门
java·人工智能·spring boot·后端·spring·spring cloud·架构