当前位置: 首页 > article >正文

SpringBoot + Tess4J 实现本地与远程图片的文字识别

1 前言

1.1 概要

在本文中,我们将探讨如何在Spring Boot应用程序里集成Tess4J来实现OCR(光学字符识别),以识别出本地和远程图片中的文字。

我们将从添加依赖说起,然后创建服务类以实现OCR,最后展示如何处理用户上传的本地图片和远程图片URL进行文字识别。

1.2 背景

随着信息技术的不断进步,图片中的文字提取已经越来越多地应用于数据输入和自动化处理过程。Tess4J,作为Tesseract OCR引擎的Java JNA封装,提供了一个能力强大的接口来实现这一功能。

在Spring Boot中整合Tess4J,我们可以快速地在Java应用中优雅地实现文字识别。本文将在Spring Boot项目中实现这一功能。

2 代码实战

2.1 第1部分:环境搭建

在开始之前,请确保有以下环境配置:

  • JDK 1.8或更高版本
  • Maven
  • 最新版的Spring Boot
  • Tess4J版本4.x或更高

2.2 第2部分:添加依赖

在pom.xml中加入以下依赖,以便于使用Tess4J:

<dependencies>
    <dependency>
        <groupId>net.sourceforge.tess4j</groupId>
        <artifactId>tess4j</artifactId>
        <version>4.5.4</version>
    </dependency>
    <!-- 其他依赖 -->
</dependencies>

确保以上版本是最新的,或者是适配当前开发环境的版本。

2.3 第3部分:添加Tessdata语言库

百度网盘下载:

链接:https://pan.baidu.com/s/1rzOYZz3gfrbWmGRUolflqQ
提取码:em4z

在这里插入图片描述

2.4 第4部分:创建OCR服务类

@Service
public class OcrService {

    public String recognizeText(File imageFile) throws TesseractException {
        Tesseract tesseract = new Tesseract();
        
        // 设定训练文件的位置(如果是标准英文识别,此步可省略)
        tesseract.setDatapath("tessdata各语言集合包地址");
        tesseract.setLanguage("chi_sim");
        return tesseract.doOCR(imageFile);
    }

    public String recognizeTextFromUrl(String imageUrl) throws Exception {
        URL url = new URL(imageUrl);
        InputStream in = url.openStream();
        Files.copy(in, Paths.get("downloaded.jpg"), StandardCopyOption.REPLACE_EXISTING);

        File imageFile = new File("downloaded.jpg");
        return recognizeText(imageFile);
    }
}

在这段代码中,recognizeText(File imageFile)方法负责执行对本地文件的OCR任务,而recognizeTextFromUrl(String imageUrl)方法则先将远程图片下载到本地,然后再执行OCR。

2.5 第5部分:建立REST控制器

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

    private final OcrService ocrService;

    // 使用构造器注入OcrService
    public OcrController(OcrService ocrService) {
        this.ocrService = ocrService;
    }

    @PostMapping("/upload")
    public ResponseEntity<String> uploadImage(@RequestParam("file") MultipartFile file) {
        try {
            File convFile = new File(System.getProperty("java.io.tmpdir")+"/"+file.getOriginalFilename());
            file.transferTo(convFile);
            String result = ocrService.recognizeText(convFile);
            return ResponseEntity.ok(result);
        } catch (Exception e) {
            e.printStackTrace();
            return ResponseEntity.badRequest().body("识别发生错误:" + e.getMessage());
        }
    }

    @GetMapping("/recognize-url")
    public ResponseEntity<String> recognizeFromUrl(@RequestParam("imageUrl") String imageUrl) {
        try {
            String result = ocrService.recognizeTextFromUrl(imageUrl);
            return ResponseEntity.ok(result);
        } catch (Exception e) {
            e.printStackTrace();
            return ResponseEntity.badRequest().body("从URL识别发生错误:" + e.getMessage());
        }
    }
}

在这个控制器中,我们创建了两个端点:/api/ocr/upload用于处理用户上传的本地图片,而/api/ocr/recognize-url则处理给定URL的远程图片。

3 测试

使用Postman直接请求:

在这里插入图片描述

4 小结

通过以上步骤,现在拥有了一个能够处理本地和远程图片文字识别的Spring Boot服务。在实践中,可能需要根据实际情况调整配置,例如在多语言环境中设置正确的语言包等。

尽管OCR技术仍然有提升空间,但通过Tess4J,可以取得非常不错的起点。


http://www.kler.cn/a/231798.html

相关文章:

  • Restful API接⼝简介及为什么要进⾏接⼝压测
  • Django5 2024全栈开发指南(一):框架简介、环境搭建与项目结构
  • 【MySQL】优化方向+表连接
  • 【STM32】USB 简要驱动软件架构图
  • 活着就好20241118
  • Cursor安装Windows / Ubuntu
  • 优化Mac电脑文件管理工具cleanmymac2024
  • 机器学习中常用的性能度量—— ROC 和 AUC
  • 【华为云】容灾方案两地三中心实践理论
  • Pymysql之Cursor常用API
  • 服务器安装Docker (ubuntu)
  • 《Docker极简教程》--Docker基础--Docker的基本概念
  • 【大数据】Flink on YARN,如何确定 TaskManager 数
  • React+Antd实现省、市区级联下拉多选组件(支持只选省不选市)
  • 有趣的CSS - 多彩变化的按钮
  • Spark安装(Yarn模式)
  • Prime(VulnHub)
  • 26、Makefile/shell/字符串处理相关练习20240208
  • Spring 的奇幻起源:从 IoC 容器到 Bean 的魔法世界 ✨
  • 《MySQL 简易速速上手小册》第1章:MySQL 基础和安装(2024 最新版)
  • Leetcode第123场双周赛
  • 【MySQL】学习和总结DCL的权限控制
  • 智慧自助餐饮系统(SpringBoot+MP+Vue+微信小程序+JNI+ncnn+YOLOX-Nano)
  • SASS 官方文档速通
  • TCP和UDP相关问题(重点)(5)——5.TCP三次握手和四次挥手(非常重要)
  • 移动云ONAIR媒体云全解读!媒体内容数字化融合一站式解决方案