SpringBoot开发——集成Tess4j实现OCR图像文字识别

文章目录

  • 1、准备工作
  • 2、配置Tess4j
  • 3、编写OCR服务
  • 4、创建控制器
  • 5、测试集成
  • 6、处理多语言与自定义字体
  • 7、总结

随着数字化转型的推进,光学字符识别( OCR, Optical Character Recognition)技术在各种应用场景中变得愈发重要。 OCR技术可以将扫描的文档、图片中的文字内容提取出来,转化为可编辑的文本数据。这一功能在自动化文档处理、数据输入优化等领域有着广泛的应用。

Java生态中,Tess4j是一个流行的OCR库,它是对Tesseract OCR引擎的Java封装。通过Spring Boot,开发者可以轻松地将Tess4j集成到应用中,打造具备OCR功能的Java应用。

本文将介绍如何在Spring Boot项目中集成Tess4j,并展示如何使用它来处理图片中的文本。

1、准备工作

首先,确保你已经安装了Tesseract OCR引擎。你可以从TesseractGitHub页面下载并安装适合你操作系统的版本。安装完成后,请确保你能通过命令行访问tesseract令。

然后,你需要创建一个Spring Boot项目,并将Tess4j依赖添加到pom.xml文件中:

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

2、配置Tess4j

Tess4j需要Tesseract的安装路径以及语言数据文件的路径。通常,这些文件会在Tesseract的安装目录下找到。你可以通过Spring Boot的配置文件来指定这些路径。

application.propertiesapplication.yml中添加以下配置:

bash 复制代码
tesseract.data.path=C:/Program Files/Tesseract-OCR/tessdata
tesseract.language=eng

application.yml中:

yaml 复制代码
tesseract:
  data:
    path: "C:/Program Files/Tesseract-OCR/tessdata"
  language: "eng"

3、编写OCR服务

接下来,我们将创建一个简单的服务类,使用Tess4j来处理OCR任务。

java 复制代码
import net.sourceforge.tess4j.ITesseract;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.io.File;

@Service
public class OcrService {

    @Value("${tesseract.data.path}")
    private String tessDataPath;

    @Value("${tesseract.language}")
    private String language;

    public String extractTextFromImage(File imageFile) {
        ITesseract tesseract = new Tesseract();
        tesseract.setDatapath(tessDataPath);
        tesseract.setLanguage(language);

        try {
            return tesseract.doOCR(imageFile);
        } catch (TesseractException e) {
            throw new RuntimeException("Error while performing OCR", e);
        }
    }
}

这个OcrService类提供了一个extractTextFromImage方法,接受一个图片文件,并返回提取的文本内容。我们通过@Value注解将配置文件中的路径和语言信息注入到服务中。

4、创建控制器

为了演示如何通过HTTP请求触发OCR任务,我们可以创建一个简单的Spring MVC控制器。

java 复制代码
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;

@RestController
@RequestMapping("/api/ocr")
public class OcrController {

    @Autowired
    private OcrService ocrService;

    @PostMapping("/extract-text")
    public ResponseEntity<String> extractText(@RequestParam("image") MultipartFile image) {
        try {
            File convFile = new File(System.getProperty("java.io.tmpdir") + "/" + image.getOriginalFilename());
            image.transferTo(convFile);
            String extractedText = ocrService.extractTextFromImage(convFile);
            return new ResponseEntity<>(extractedText, HttpStatus.OK);
        } catch (IOException e) {
            return new ResponseEntity<>("Failed to process image", HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }
}

在这个控制器中,extractText方法接收一个Multipart件作为参数,处理上传的图片,并通过OcrService提取图片中的文本。提取的文本内容将以HTTP响应的形式返回。

5、测试集成

在启动Spring Boot应用后,你可以使用curlPostman等工具来测试OCR功能

使用curl命令上传图片并获取文本:

bash 复制代码
curl -F "image=@path_to_your_image.png" http://localhost:8080/api/ocr/extract-text

如果配置正确,你将看到提取的文本内容返回。

6、处理多语言与自定义字体

Tesseract支持多语言OCR。如果你需要处理不同语言的文本,只需在application.properties中修改语言配置,例如:

bash 复制代码
tesseract.language=chi_sim+eng

这个配置将同时处理简体中文和英文。此外,Tesseract还支持训练自定义字体,适用于特定需求的OCR任务。训练自定义字体超出了本文的范围,但你可以参考Tesseract的官方文档来学习如何进行训练。

7、总结

通过Spring Boot集成Tess4j,Java开发者可以轻松实现OCR功能。本文介绍了如何配置Tess4j、编写OCR服务、创建REST API,以及处理多语言OCR等内容。这种集成方式不仅简化了复杂的OCR操作,还为你提供了扩展和优化的灵活性。无论是在处理文档自动化,还是在开发智能应用,Tess4j都是一个强大且易于使用的工具。

相关推荐
工业甲酰苯胺2 分钟前
Spring Boot 整合 MyBatis 的详细步骤(两种方式)
spring boot·后端·mybatis
豆浩宇2 小时前
Halcon OCR检测 免训练版
c++·人工智能·opencv·算法·计算机视觉·ocr
转身之后才不会2 小时前
OCR两篇革命之作
ocr
flying jiang2 小时前
Spring Boot 入门面试五道题
spring boot
小菜yh2 小时前
关于Redis
java·数据库·spring boot·redis·spring·缓存
爱上语文3 小时前
Springboot的三层架构
java·开发语言·spring boot·后端·spring
荆州克莱3 小时前
springcloud整合nacos、sentinal、springcloud-gateway,springboot security、oauth2总结
spring boot·spring·spring cloud·css3·技术
serve the people3 小时前
springboot 单独新建一个文件实时写数据,当文件大于100M时按照日期时间做文件名进行归档
java·spring boot·后端
罗政9 小时前
[附源码]超简洁个人博客网站搭建+SpringBoot+Vue前后端分离
vue.js·spring boot·后端