侧边栏壁纸
博主头像
拾荒的小海螺博主等级

只有想不到的,没有做不到的

  • 累计撰写 140 篇文章
  • 累计创建 15 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

JAVA:Spring Boot 集成 Tess4J 实现文字识别的技术指南

拾荒的小海螺
2024-08-08 / 0 评论 / 0 点赞 / 19 阅读 / 6181 字

1、简述

图片文字识别(Optical Character Recognition, OCR)是一项将图像中的文字转换为可编辑文本的技术。Tess4J 是 Tesseract OCR 引擎的一个 Java 封装,使其在 Java 应用程序中更易于使用。本文将介绍如何在 Spring Boot 项目中集成 Tess4J 实现图片文字识别。

1723101701766.jpg

GitHub:https://github.com/tesseract-ocr/tesseract.git
语言包GitHub:https://github.com/tesseract-ocr/tessdata.git

2、环境准备

  • JDK:确保已安装 JDK 8 或更高版本。
  • Maven:确保已安装 Maven,用于管理项目依赖。
  • Spring Boot:使用 Spring Initializr 创建一个新的 Spring Boot 项目。

在项目的 pom.xml 文件中添加 Tess4J 的 Maven 依赖:

<dependency>
    <groupId>net.sourceforge.tess4j</groupId>
    <artifactId>tess4j</artifactId>
    <version>5.4.0</version>
</dependency>
<dependency>
    <groupId>net.java.dev.jna</groupId>
    <artifactId>jna</artifactId>
    <version>5.6.0</version>
</dependency>
<dependency>
    <groupId>net.java.dev.jna</groupId>
    <artifactId>jna-platform</artifactId>
    <version>5.6.0</version>
</dependency>

3、下载 Tesseract OCR 引擎

tesseract-ocr目前训练的数据是放在tessdata文件夹下,后缀为traineddata文件,目前支持100多种语言。今天安装的为第三方支持的安装包。

https://github.com/UB-Mannheim/tesseract/wiki

到当前下载指定的版本,在window上进行安装:

1723101723467.jpg

安装完成将需要的语言包放在自己OCR安装目录tessdata下。

安装的软件可以直接使用tesseract.exe进行命令行执行文字识别。进入到exe存在的目录下。cmd进入到命命令执行框:

//官方
tesseract imagename outputbase [-l lang] [--oem ocrenginemode] [--psm pagesegmode] [configfiles...]
  • imagename :图片的位置
  • outputbase:输出的文件名字,不加后缀保存为txt格式
  • -l lang:识别的语言类型,不加默认为英文,中文使用-l chi_sim,使用多种语言识别如 -l eng+deu
  • –psm pagesegmode:参数
  • –oem:使用识别的引擎,新版都是用 --oem 1(LSTM模式)
  • configfiles: 可以执行输入的格式如 pdf, hocr ,tsv

4、编写图片文字识别代码

在项目中创建一个用于文字识别的服务类:

package com.example.springbootclient.service;

import net.sourceforge.tess4j.ITesseract;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;
import org.springframework.stereotype.Service;

import java.io.File;

@Service
public class OcrService {
    public String recognizeText(File imageFile) {
        ITesseract instance = new Tesseract();
        instance.setDatapath("D:\\wlsoft\\Tesseract-OCR\\tessdata"); // 设置Tesseract的tessdata路径
        instance.setLanguage("chi_sim"); // 设置识别语言

        try {
            return instance.doOCR(imageFile);
        } catch (TesseractException e) {
            e.printStackTrace();
            return "Error: " + e.getMessage();
        }
    }
}

在 tessdata 目录下存放 Tesseract 的语言数据文件(如 chi_sim.traineddata),该目录应放置在项目的资源目录下。

5、编写控制器

创建一个控制器,用于处理上传的图片并调用 OCR 服务:

package com.example.springbootclient.controller;

import com.example.springbootclient.service.OcrService;
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("/ocr")
public class OcrController {

    @Autowired
    private OcrService ocrService;

    @PostMapping("/upload")
    public ResponseEntity<String> uploadImage(@RequestParam("file") MultipartFile file) {
        if (file.isEmpty()) {
            return new ResponseEntity<>("File is empty", HttpStatus.BAD_REQUEST);
        }

        try {
            // 将文件保存到本地
            File convFile = new File(System.getProperty("java.io.tmpdir") + "/" + file.getOriginalFilename());
            file.transferTo(convFile);

            // 调用OCR服务识别文字
            String result = ocrService.recognizeText(convFile);

            return new ResponseEntity<>(result, HttpStatus.OK);
        } catch (IOException e) {
            return new ResponseEntity<>("File upload error: " + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }
}

6、测试

启动 Spring Boot 应用,使用 Postman 或其他工具发送图片文件到 http://localhost:8080/ocr/upload 进行测试。以下是一个示例请求:

  • 请求类型:POST
  • URL:http://localhost:8080/ocr/upload
  • 请求体:选择 form-data,键为 file,值为要上传的图片文件。

如果一切配置正确,服务器将返回识别出的文本。

1723101746954.jpg

7、总结

通过本文的介绍,我们学习了如何在 Spring Boot 项目中集成 Tess4J 实现图片文字识别。我们介绍了如何配置项目、添加依赖、下载和配置 Tesseract OCR 引擎,以及编写识别服务和控制器。希望本文能帮助你更好地理解和使用 OCR 技术,并将其应用到实际项目中。

如果有任何问题或建议,欢迎在下方留言讨论。

0

评论区