java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringBoot Tess4j图像文字识别

基于SpringBoot+Tess4j实现图像文字识别功能

作者:皮皮林551

文章介绍了Tesseract OCR技术及其Java封装库Tess4j,并详细描述了如何在SpringBoot项目中集成和使用Tess4j进行图像识别,文章涵盖了下载字体库、配置SpringBoot项目、编写测试代码及图片识别测试等步骤,并提供了中文、英文及中英混合识别的实战示例,需要的朋友可以参考下

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 的特点:

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图像文字识别的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文