SpringBoot/Java中OCR实现,集成Tess4J实现图片文字识别

场景

Tesseract

Tesseract是一个开源的光学字符识别(OCR)引擎,它可以将图像中的文字转换为计算机可读的文本。

支持多种语言和书面语言,并且可以在命令行中执行。它是一个流行的开源OCR工具,可以在许多不同的操作系统上运行。

GitHub - tesseract-ocr/tesseract: Tesseract Open Source OCR Engine (main repository)

Tess4J

Tess4J是一个基于Tesseract OCR引擎的Java接口,可以用来识别图像中的文本,说白了,就是封装了它的API,让Java可以直接调用。

中文文字训练集下载

Tesseract引擎默认是无法识别中文的,只能识别数字或者英文。如果我们想实现中文的识别就得去下载对应的训练集。

GitCode - 开发者的代码家园

下载之后找到中文简体训练集文件

将chi_sim.traineddata复制到某磁盘路径下,这里放在D盘tessdata目录下

注:

博客:
霸道流氓气质-CSDN博客

实现

1、搭建SpringBoot项目后,添加Tess4J依赖

        <dependency>
            <groupId>net.sourceforge.tess4j</groupId>
            <artifactId>tess4j</artifactId>
            <version>4.5.4</version>
        </dependency>

2、在配置文件application.yml中添加训练集文件夹的路径

# 训练数据文件夹的路径
tess4j:
  datapath: D:/tessdata

3、新增配置类,读取配置文件内容,并初始化Tesseract类,交给Spring管理

import net.sourceforge.tess4j.Tesseract;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class TesseractOcrConfiguration {

    @Value("${tess4j.datapath}")
    private String dataPath;

    @Bean
    public Tesseract tesseract() {

        Tesseract tesseract = new Tesseract();
        // 设置训练数据文件夹路径
        tesseract.setDatapath(dataPath);
        // 设置为中文简体
        tesseract.setLanguage("chi_sim");
        return tesseract;
    }
}

4、编写Service接口层

import java.io.InputStream;

public interface IOcrService {
    String recognizeText(InputStream sbs);
}

5、编写ServiceImpl

import com.ruoyi.system.service.IOcrService;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.InputStream;

@Service
public class OcrServiceImpl implements IOcrService {

    @Autowired
    private Tesseract tesseract;

    @Override
    public String recognizeText(InputStream sbs) {
        // 转换
        try {
            BufferedImage bufferedImage = ImageIO.read(sbs);
            // 对图片进行文字识别
            return tesseract.doOCR(bufferedImage);
        } catch (IOException | TesseractException e) {
            e.printStackTrace();
            return null;
        }
    }
}

6、编写单元测试

import com.ruoyi.system.service.IOcrService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = RuoYiApplication.class,webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class Tess4JOcrTest {

    @Autowired
    private IOcrService iOcrService;

    @Test
    public void ocrLocalPng() {
        try {
            InputStream inputStream=new FileInputStream("D://tess4j.png");
            String result = iOcrService.recognizeText(inputStream);
            System.out.println(result);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

7、这里的png文件随便截图并放在磁盘路径下,运行单元测试

识别效果可能存在不准确的情况。

其它使用场景,比如前端上传照片,后台识别返回结果等可自己进行扩展。

  • 11
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java可以使用Tesseract OCR库来实现OCR图片识别。下面是一个简单的示例: 1. 下载Tesseract OCR库。可以从官网(https://github.com/tesseract-ocr/tesseract)下载最新版本的Tesseract OCR库。 2. 导入Tesseract OCR库。将下载的Tesseract OCR库导入Java项目。 3. 安装语言数据。Tesseract OCR库需要使用语言数据才能进行识别。可以从官网下载相应语言的数据文件,并在项目指定语言数据的路径。 4. 编写Java代码。以下是一个简单的Java代码示例: ```java import net.sourceforge.tess4j.*; public class OCRTest { public static void main(String[] args) { ITesseract instance = new Tesseract(); // JNA Interface Mapping instance.setDatapath("C:/tessdata"); //设置语言数据路径 instance.setLanguage("chi_sim"); //设置识别语言为简体文 try { String result = instance.doOCR(new File("test.png")); //识别图片 System.out.println(result); //输出识别结果 } catch (TesseractException e) { System.err.println(e.getMessage()); } } } ``` 在上面的代码,首先创建了一个Tesseract实例,并设置语言数据路径和识别语言。然后使用doOCR方法识别指定的图片,并输出识别结果。 5. 运行代码。将以上代码保存为OCRTest.java文件,然后在命令行执行以下命令编译和运行代码: ``` javac -cp tess4j.jar OCRTest.java java -cp tess4j.jar;. OCRTest ``` 其tess4j.jar是Tesseract OCR库的Java包。注意需要将tess4j.jar和OCRTest.class文件放在同一目录下,并在命令行设置类路径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

霸道流氓气质

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值