暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

拾荒的小海螺 2024-07-23
780

1、简述

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


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上进行安装:


      安装完成将需要的语言包放在自己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,值为要上传的图片文件。


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



            七、总结

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

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


            文章转载自拾荒的小海螺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

            评论