• Java也能做OCR!SpringBoot 整合 Tess4J 实现图片文字识别



    在这里插入图片描述

    🎉欢迎来到SpringBoot框架学习专栏~



    光学字符识别(OCR)技术能够将图片中的文字转换为可编辑的文本,这在文档管理、票据处理等领域有广泛的应用。Tesseract 是一个开源的OCR引擎,Tess4J 则是 Tesseract 的 Java 封装库。本文将介绍如何使用 Spring Boot 整合 Tess4J,实现图片文字识别功能。

    在这里插入图片描述

    1. 环境准备

    在开始之前,请确保已安装以下工具和库:

    • JDK 8 或更高版本
    • Maven 3.6 或更高版本
    • Spring Boot 2.4 或更高版本
    • Tesseract OCR 引擎
    • Tess4J 库
    1.1 安装 Tesseract OCR 引擎

    请根据你的操作系统选择合适的安装方式。

    • Windows:下载 Tesseract OCR Windows 版本 并安装。

    • Mac:使用 Homebrew 安装:

      brew install tesseract
      
    • Linux:使用包管理器安装,例如在 Ubuntu 上:

      sudo apt-get install tesseract-ocr
      
    1.2 引入 Tess4J 依赖

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

    <dependency>
        <groupId>net.sourceforge.tess4jgroupId>
        <artifactId>tess4jartifactId>
        <version>4.5.4version>
    dependency>
    

    2. 创建 Spring Boot 项目

    2.1 初始化项目

    使用 Spring Initializr 创建一个新的 Spring Boot 项目,选择以下依赖:

    • Spring Web
    • Spring Boot DevTools
    2.2 目录结构

    创建一个基本的目录结构:

    src/main/java/com/example/ocr
        ├── OcrApplication.java
        ├── controller
        │   └── OcrController.java
        └── service
            └── OcrService.java
    

    3. 编写 OCR 功能代码

    3.1 创建服务层

    service 包中创建 OcrService 类,负责处理图片文字识别的逻辑:

    package com.example.ocr.service;
    
    import net.sourceforge.tess4j.Tesseract;
    import net.sourceforge.tess4j.TesseractException;
    import org.springframework.stereotype.Service;
    
    import java.io.File;
    
    @Service
    public class OcrService {
    
        private final Tesseract tesseract;
    
        public OcrService() {
            tesseract = new Tesseract();
            // 设置 Tesseract OCR 引擎的数据路径
            tesseract.setDatapath("tessdata");
            // 设置识别语言
            tesseract.setLanguage("eng");
        }
    
        public String extractText(File imageFile) {
            try {
                return tesseract.doOCR(imageFile);
            } catch (TesseractException e) {
                e.printStackTrace();
                return "Error: " + e.getMessage();
            }
        }
    }
    
    3.2 创建控制器层

    controller 包中创建 OcrController 类,处理前端的请求:

    package com.example.ocr.controller;
    
    import com.example.ocr.service.OcrService;
    import org.springframework.beans.factory.annotation.Autowired;
    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("file") MultipartFile file) {
            if (file.isEmpty()) {
                return ResponseEntity.badRequest().body("File is empty");
            }
    
            try {
                // 将上传的文件转换为临时文件
                File tempFile = File.createTempFile("ocr-", ".tmp");
                file.transferTo(tempFile);
                tempFile.deleteOnExit();
    
                // 调用 OCR 服务提取文字
                String extractedText = ocrService.extractText(tempFile);
                return ResponseEntity.ok(extractedText);
            } catch (IOException e) {
                e.printStackTrace();
                return ResponseEntity.status(500).body("Error: " + e.getMessage());
            }
        }
    }
    

    4. 配置 Tesseract 语言包

    确保你的项目根目录有一个 tessdata 文件夹,其中包含 Tesseract OCR 的语言数据文件(例如 eng.traineddata 用于英文识别)。如果没有,可以从 Tesseract 语言数据文件 下载。

    5. 运行和测试

    5.1 启动 Spring Boot 应用

    运行 OcrApplication 类中的 main 方法,启动 Spring Boot 应用。

    package com.example.ocr;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class OcrApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(OcrApplication.class, args);
        }
    }
    
    5.2 使用 Postman 或 cURL 进行测试

    使用 Postman 或 cURL 发送一个 POST 请求到 /api/ocr/extract-text,上传一张图片,检查返回结果是否正确识别了图片中的文字。

    使用 cURL 示例:

    curl -X POST http://localhost:8080/api/ocr/extract-text -F "file=@path/to/your/image.jpg"
    

    6. 处理常见问题

    6.1 图片格式不支持

    确保上传的图片是Tesseract支持的格式(如JPEG、PNG、GIF等)。如果不支持,返回适当的错误信息。

    6.2 识别率低

    识别率低可能是由于图片质量差或者没有使用适当的语言数据文件。可以尝试以下方法提高识别率:

    • 使用高质量的图片;
    • 确保图片中只有需要识别的文字,去除背景噪音;
    • 使用适当的语言数据文件;
    • 尝试不同的前处理技术,如二值化、去噪等。

    7. 总结

    本文详细介绍了如何使用 Spring Boot 整合 Tess4J 实现图片文字识别。通过这一示例,展示了如何在 Java 中利用开源OCR引擎 Tesseract 进行图片文字识别,并将其应用于实际的Web服务中。希望通过本文的介绍,能够帮助开发者更好地理解和应用OCR技术,提升应用程序的功能和用户体验。

    继续保持对新技术的探索和实践,相信你会在开发过程中收获更多的乐趣和成就感。如果你有任何问题或建议,欢迎在评论区留言讨论。


    🧸结尾 ❤️ 感谢您的支持和鼓励! 😊🙏
    📜您可能感兴趣的内容:

    在这里插入图片描述

  • 相关阅读:
    使用gateway对用户认证(用于确定用户是否登录)
    端口被占用怎么解决
    JAVA学习笔记28(常用类)
    [跨数据库、微服务] FreeSql 分布式事务 TCC/Saga 编排重要性
    https到底把什么加密了?
    IDL学习:语法基础-对象、哈希表
    程序流程控制
    [附源码]java毕业设计电子病历信息管理系统
    使用canal解决Mysql和Redis数据同步(TCP)
    不要老想着重置!当你忘记Wi-Fi密码时,可以尝试这些办法
  • 原文地址:https://blog.csdn.net/qq_43546721/article/details/139879053