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

server/2024/9/23 22:12:20/

文章目录

  • 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文件中:

<dependency><groupId>net.sourceforge.tess4j</groupId><artifactId>tess4j</artifactId><version>5.4.0</version>
</dependency>

Tess4j_18">2、配置Tess4j

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

tesseract.data.path=C:/Program Files/Tesseract-OCR/tessdata
tesseract.language=eng

application.yml中:

tesseract:data:path: "C:/Program Files/Tesseract-OCR/tessdata"language: "eng"

3、编写OCR服务

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

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控制器。

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 {@Autowiredprivate 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命令上传图片并获取文本:

curl -F "image=@path_to_your_image.png" http://localhost:8080/api/ocr/extract-text

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

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

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

tesseract.language=chi_sim+eng

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

7、总结

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


http://www.ppmy.cn/server/121009.html

相关文章

Redis——C++库redisplusplus在Linux环境下的安装

目录 第一步&#xff0c;安装hiredis第二步&#xff0c;下载redis源码第三步&#xff0c;编译/安装 redis-plus-plus使用redis-plus-plus(以Centos为例)Ubuntu的Makefile 第一步&#xff0c;安装hiredis redis-plus-plus 是基于 hiredis 实现的&#xff0c;而hiredis 是⼀个 C…

【编程基础知识】Mysql的各个索引数据结构及其适用场景

一、引言 在数据库的世界中&#xff0c;索引是提升查询速度的超级英雄。就像图书馔的目录帮助我们快速找到书籍一样&#xff0c;MySQL中的索引加速了数据检索的过程。本文将带你深入了解MySQL索引的多种数据结构、它们的适用场景以及如何巧妙地使用它们来优化性能。 二、索引…

《SmartX ELF 虚拟化核心功能集》发布,详解 80+ 功能特性和 6 例金融实践

《SmartX ELF 虚拟化核心功能集》电子书现已发布&#xff01;本书详细介绍了 SmartX ELF 虚拟化及云平台核心功能&#xff0c;包含虚机服务、容器服务、网络服务、存储服务、运维管理、工具服务、数据保护等各个方面。 即刻下载电子书&#xff0c;了解如何利用基于 SmartX ELF …

如何确保Redis双删的准确性

为了保证Redis双删一致性的准确性&#xff0c;可以采取以下几种策略&#xff1a; 延时双删策略&#xff1a;在更新数据时&#xff0c;先删除缓存&#xff0c;再更新数据库&#xff0c;然后等待一段时间&#xff08;例如几百毫秒到几秒&#xff09;&#xff0c;再次删除缓存。这…

一文入门生成式AI(理解ChatGPT的原理)

一、什么是生成式AI&#xff1f; 以ChatGPT为代表的生成式AI&#xff0c;是对已有的数据和知识进行向量化的归纳&#xff0c;总结出数据的联合概率。从而在生成内容时&#xff0c;根据用户需求&#xff0c;结合关联字词的概率&#xff0c;生成新的内容。 可以这么联想&#x…

独立游戏《Project:Survival》UE5C++开发日志0——游戏介绍

该游戏是《星尘异变》团队的下一款作品&#xff0c;太空科幻题材的生存游戏&#xff0c;我将负责使用C、蓝图实现游戏的基础框架和核心功能&#xff0c;其中还包含使用人工智能算法助力游戏开发或帮助玩家运营 目前已有功能&#xff1a; 1.3D库存系统&#xff1a;所有库存中的物…

C++在Linux实现多线程和多进程的TCP服务器和客户端通信

多进程版本 服务器 #include <arpa/inet.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <sys/wait.h> #include <signal.h> #include <string&…

新峰商城之分类三级联动实现

新峰商城是一个开源电子商务网站&#xff08;SpringBoot项目&#xff09;&#xff0c;本文主要简述它的商品分类中三级联动功能的实现。 一、多层级联动效果的常见场景 二、三级联动或者更多层级的数据联动是常见交互方式&#xff0c;它可以提升用户体验&#xff0c;限制用户随…