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

news2024/9/20 6:15:14

文章目录

  • 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>

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 {

    @Autowired
    private 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.coloradmin.cn/o/2148213.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JSONC:为JSON注入注释的力量

JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;广泛应用于Web开发、配置文件和数据存储等领域。 其简洁的语法和易于解析的特点&#xff0c;使得JSON成为了现代编程中不可或缺的一部分。然而&#xff0c;JSON的一个显著缺点是…

波分技术基础 -- MS-OTN介绍

什么是MS-OTN 由于OTN最小交叉颗粒度为ODU0&#xff0c;承载小颗粒业务时带宽利用率较低&#xff1b;且无法承载分组业务&#xff0c;随着MPLS-TP技术的成熟&#xff0c;MS-OTN时代来临。MS-OTN&#xff08;Multi-Service Optical Transport Network&#xff09;&#xff1a;核…

【论文解读系列】用于自监督点云表示的生成变分对比学习

Generative Variational-Contrastive Learning for Self-Supervised Point Cloud Representation | IEEE Transactions on Pattern Analysis and Machine Intelligence (acm.org) 作者&#xff1a;Bohua Wang; Zhiqiang Tian; Aixue Ye; Feng Wen; Shaoyi Du; Yue Gao 摘要 三…

VS code 查看 ${workspaceFolder} 目录指代路径

VS code 查看 ${workspaceFolder} 目录指代路径 引言正文 引言 在 VS code 创建与运行 task.json 文件 一文中我们已经介绍了如何创建属于自己的 .json 文件。在 VS code 中&#xff0c;有时候我们需要添加一些文件路径供我们导入自定义包使用&#xff0c;此时&#xff0c;我们…

Github Wiki 超链接 转 码云Gitee Wiki 超链接

Github Wiki 超链接 转 码云Gitee Wiki 超链接 Github 是 &#xff1a;[[相对路径]] Gitee 是 &#xff1a;[链接文字](./相对路径) 查找&#xff1a;\[\[(.*?)\]\] 替换&#xff1a;[$1]\(./$1\) 或替换&#xff1a;**[$1]\(./$1\)** &#xff08;码云的超链接&#xff0c;很…

实战18-Card封装

import Card from ../../components/Card/Index; import rvp from ../../utils/resposive/rvIndex;Component export default struct DomesticService {build() {Column() {Card() {//默认插槽Text("DomesticService")}}.width(100%).margin({ top: rvp(43) })} } im…

2024 Python3.10 系统入门+进阶(十五):文件及目录操作

目录 一、文件IO操作1.1 创建或打开文件1.2 读取文件1.2.1 按行读取1.2.2 多行读取1.2.3 完整读取 1.3 写入文件1.3.1 写入字符串1.3.2 写入序列 1.4 上下文管理1.4.1 with语句的使用1.4.2 上下文管理器(拓展----可以学了面向对象之后再回来看) 1.5 文件的遍历 二、os.path模块…

大语言模型-教育方向数据集

大语言模型-教育方向数据集 编号论文数据集1Bitew S K, Hadifar A, Sterckx L, et al. Learning to Reuse Distractors to Support Multiple-Choice Question Generation in Education[J]. IEEE Transactions on Learning Technologies, 2022, 17: 375-390.Televic, NL, https…

79页 PPT华为项目管理经典培训教材(高级)

读者朋友大家好&#xff0c;最近有会员朋友咨询晓雯&#xff0c;需要《79页PPT华为项目管理经典培训教材》资料&#xff0c;欢迎大家文末扫码下载学习。 一、华为项目管理理念方法 &#xff08;一&#xff09;项目管理基本概念与方法 项目启动 明确项目目标&#xff1a;华为…

SAP B1 流程实操 - 营销单据销售部分(上)

背景 在 SAP B1 中&#xff0c;最重要的模块就是【销售】&#xff0c;企业可能不涉及生产和库存&#xff08;贸易公司&#xff09;&#xff0c;甚至不涉及采购&#xff08;服务业&#xff09;&#xff0c;但是一定会有基本的 销售。本文中我们讲解 销售 模块的基本核心&#x…

【QT】基于HTTP协议的网络应用程序

目录 1 HTTP概述 2 QT中实现高层网络操作的类 3 使用HTTP类请求数据 4 基于HTTP协议的网络文件下载 1 HTTP概述 HTTP&#xff08;超文本传输协议&#xff09;是互联网上应用最为广泛的协议之一&#xff0c;它定义了客户端和服务器之间进行通信的规则。HTTP是一种无状态的协议…

rcc 不是内部或外部命令,也不是可运行的程序或批处理文件

D:\Windows Kits\10\bin\10.0.22621.0\x86 将上述路径添加到环境变量中&#xff0c;重启电脑

【微服务-注册中心】

注册中心的作用&#xff1a; 微服务将业务拆分成了一个一个服务&#xff0c;当实现一个业务的时需要调用多个服务&#xff0c;那么每个服务的调用都需要知道它的URL。如何更方便的调用&#xff0c;注册中心就出现了。 我们可以把注册中心当作通讯录&#xff0c;通讯录中记录了服…

【JS】postMessage与MessageChannel

前言 postMessage 和 MessageChannel 都是用来实现跨文档、跨窗口或跨线程&#xff08;Web Worker&#xff09;的消息传递机制。 postMessage 可以在 iframe、同源或跨源窗口之间传递数据&#xff0c;也可以用于主线程与 Web Worker 之间的通信。 postMessage 是一种单向的…

Django 聚合查询

文章目录 一、聚合查询二、使用步骤1.准备工作2.具体使用3.分组查询&#xff08;annotate&#xff09;1.定义2.使用3.具体案例 4.F() 查询1.定义2.使用 5.Q() 查询1.定义2.查询 一、聚合查询 使用聚合查询前要先从 django.db.models 引入 Avg、Max、Min、Count、Sum&#xff0…

VS code EXPLORER 中不显示指定文件及文件夹设置(如.pyc, __pycache__, .vscode 文件)

VS code EXPLORER 中不显示指定文件及文件夹设置 引言正文方法1打开方式1打开方式2 方法2 引言 VS code 号称地表最强轻量级编译器&#xff0c;其最大的优势在于用户可以根据自己的需求下载适合自己的 extension。从而定制个性化的编译器。然而&#xff0c;本人今天遇到了一个…

如何调用API接口:一份简明指南

在软件开发中&#xff0c;调用API接口是一项基本而重要的技能。API&#xff08;应用程序编程接口&#xff09;允许不同程序之间进行交互&#xff0c;使得数据和功能可以跨应用程序共享。本文将为你提供一份简明的指南&#xff0c;帮助你理解如何调用API接口。 什么是API接口&am…

Android中的引用类型:Weak Reference, Soft Reference, Phantom Reference 和 WeakHashMap

在Android开发中&#xff0c;内存管理是一个非常重要的话题。为了更好地管理内存&#xff0c;Java和Android提供了多种引用类型&#xff0c;包括Weak Reference、Soft Reference、Phantom Reference以及WeakHashMap。这些引用类型在不同的场景下可以帮助我们更有效地管理内存&a…

(笔记)mac笔记本调节键盘速率

我在使用neovim的时候&#xff0c;发现按下hjkl或者shift[]来进行移动的时候 开始延迟大概几百毫秒的时间才开始移动 所以我上网找了下方法 发现修改这了可以改变速率 我就直接拉到了fast 芜湖 起飞 local opt vim.opt local o vim.o local g vim.go.timeoutlen 100 o…

论文速递!时序预测!DCSDNet:双卷积季节性分解网络,应用于天然气消费预测过程

本期推文将介绍一种新的时序预测方法:双卷积季节性分解网络&#xff08;Dual Convolution withSeasonal Decomposition Network, DCSDNet&#xff09;在天然气消费预测的应用&#xff0c;这项研究发表于《Applied Energy》期刊。 针对天然气消费的多重季节性和非规律性&#x…