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

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

文章目录

      • 1. 环境准备
        • 1.1 安装 Tesseract OCR 引擎
        • 1.2 引入 Tess4J 依赖
      • 2. 创建 Spring Boot 项目
        • 2.1 初始化项目
        • 2.2 目录结构
      • 3. 编写 OCR 功能代码
        • 3.1 创建服务层
        • 3.2 创建控制器层
      • 4. 配置 Tesseract 语言包
      • 5. 运行和测试
        • 5.1 启动 Spring Boot 应用
        • 5.2 使用 Postman 或 cURL 进行测试
      • 6. 处理常见问题
        • 6.1 图片格式不支持
        • 6.2 识别率低
      • 7. 总结

在这里插入图片描述

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


  • ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹
  • ✨博客主页:IT·陈寒的博客
  • 🎈该系列文章专栏:SpringBoot
  • 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习
  • 🍹文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏
  • 📜 欢迎大家关注! ❤️

光学字符识别(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.tess4j</groupId><artifactId>tess4j</artifactId><version>4.5.4</version>
</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 {@Autowiredprivate 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技术,提升应用程序的功能和用户体验。

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


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

  • 【Java面试技巧】Java面试八股文 - 掌握面试必备知识(目录篇)
  • 【Java学习路线】2023年完整版Java学习路线图
  • 【AIGC人工智能】Chat GPT是什么,初学者怎么使用Chat GPT,需要注意些什么
  • 【Java实战项目】SpringBoot+SSM实战:打造高效便捷的企业级Java外卖订购系统
  • 【数据结构学习】从零起步:学习数据结构的完整路径

在这里插入图片描述

相关文章:

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

文章目录 1. 环境准备1.1 安装 Tesseract OCR 引擎1.2 引入 Tess4J 依赖 2. 创建 Spring Boot 项目2.1 初始化项目2.2 目录结构 3. 编写 OCR 功能代码3.1 创建服务层3.2 创建控制器层 4. 配置 Tesseract 语言包5. 运行和测试5.1 启动 Spring Boot 应用5.2 使用 Postman 或 cURL…...

微信小程序常用标签及其用法

大家好&#xff0c;我是linzi&#xff0c;今天我来给大家分享一下微信小程序一些个常用的标签及其用法 1. <view> 标签 <view> 标签是小程序中最常用的标签之一&#xff0c;用于组织和布局页面上的内容&#xff0c;类似于HTML中的 <div> 标签。 <view …...

开发查询订单信息fastGPT智能体工作流 将工作流接入到人工客服系统

我在抖音上发布了视频 https://www.douyin.com/video/7382446337482099977 下面是主要内容介绍 【视频标题&#xff1a;】开发查询订单信息fastGPT智能体工作流 将工作流接入到人工客服系统 #智能体 #FastGPT #客服系统-----------【视频行业分类&#xff1a;】<3C数码>-…...

Flink集群运行模式

我们了解了flink的一个集群的一个基础架构&#xff0c;包括里面核心的一些组件&#xff0c;比如说job manager&#xff0c;task manager等一些组件的一些主要的一些组成。本节课程开始我们学习flink的一个集群部署模式。首先我们来看一下flink集群部署模式究竟应该有哪一些种类…...

XSS 安全漏洞介绍及修复方案

简介 XSS&#xff08;Cross Site Scripting&#xff09;是一种常见的 Web 安全漏洞&#xff0c;攻击者通过在网页中注入恶意脚本代码&#xff0c;使得网页在用户端执行这些脚本&#xff0c;从而窃取用户信息或者进行其他恶意操作。为了防止 XSS 攻击&#xff0c;可以使用正则表…...

基于STM32的智能仓库管理系统

目录 引言环境准备智能仓库管理系统基础代码实现&#xff1a;实现智能仓库管理系统 4.1 数据采集模块4.2 数据处理与分析4.3 通信模块实现4.4 用户界面与数据可视化应用场景&#xff1a;仓库管理与优化问题解决方案与优化收尾与总结 1. 引言 智能仓库管理系统通过使用STM32嵌…...

LeetCode —— 只出现一次的数字

只出现一次的数字 I 本题依靠异或运算符的特性&#xff0c;两个相同数据异或等于0&#xff0c;数字与0异或为本身即可解答。代码如下: class Solution { public:int singleNumber(vector<int>& nums) {int ret 0;for (auto e : nums){ret ^ e;}return ret;} };只出…...

python遍历文件夹中所有图片

python遍历文件夹中的图片-CSDN博客 这个是之前的版本&#xff0c;现在这个版本会更好&#xff0c;直接进来就在列表中 path glob.glob("1/*.jpg")print(path)print(len(path))path_img glob.glob("1/*.jpg")path_img.extend(path)print(len(path_img))…...

速盾:DDOS能打死高防ip吗?

DDoS攻击是一种利用大量计算机或设备发起的分布式拒绝服务攻击。它的目标是通过发送大量流量或请求&#xff0c;使目标服务器或网络资源无法正常工作。高防IP是一种具有强大防御能力的网络服务&#xff0c;能够抵御各种形式的网络攻击&#xff0c;包括DDoS攻击。然而&#xff0…...

3dsMax怎样让渲染效果更逼真出色?三套低中高参数设置

渲染是将精心构建的3D模型转化为逼真图像的关键步骤。但要获得令人惊叹的渲染效果&#xff0c;仅仅依赖默认设置是不够的。 实现在追求极致画面效果的同时&#xff0c;兼顾渲染速度和时间还需要进行一些调节设置&#xff0c;如何让渲染效果更加逼真&#xff1f; 一、全局照明与…...

Android的OverlayFS原理与作用

标签: OverlayFS; Android;Overlay Filesystem; Android的OverlayFS原理与作用 概述 OverlayFS(Overlay Filesystem)是一种联合文件系统,允许将一个或多个文件系统叠加在一起,使它们表现为一个单一的文件系统。Android系统利用OverlayFS来实现动态文件系统的叠加和管…...

奇点临近:人类与智能时代的未来

在信息爆炸的时代&#xff0c;我们每天都被海量的信息所淹没&#xff0c;如何才能在这个嘈杂的世界中找到真正有价值的信息&#xff1f;如何才能利用信息的力量&#xff0c;提升我们的认知水平&#xff0c;重塑我们的未来&#xff1f; 这些问题的答案&#xff0c;或许都能在雷…...

NAS教程丨铁威马如何登录 SSH终端?

适用型号&#xff1a; 所有TNAS 型号 如您有特殊操作需要通过 SSH 终端登录 TNAS&#xff0c;请参照以下指引&#xff1a; (注意: 关于以下操作步骤中的"cd /"的指令,其作用是使当前 SSH/Telnet 连接的位置切换到根目录,以免造成对卷的占用.请不要遗漏它.) Windows…...

2024-06-24 百度地图的使用及gps定位坐标获取

1.百度地图的使用教程 2. 定位功能的实现 第一种&#xff1a;通过h5自带定位获取当前gps坐标 var options {enableHighAccuracy: true,timeout: 5000,maximumAge: 0};function success(pos) {var crd pos.coords;alert(crd.latitude---crd.longitude---crd.accuracy);conso…...

Python二级考试试题②

1. 以下关于程序设计语言的描述&#xff0c;错误的选项是&#xff1a; A Python语言是一种脚本编程语言 B 汇编语言是直接操作计算机硬件的编程语言 C 程序设计语言经历了机器语言、汇编语言、脚本语言三个阶段 D 编译和解释的区别是一次性翻译程序还是每次执行时都要翻…...

安装和使用nvm安装Nodejs

文章目录 安装和使用 nvm1. 安装 nvm2. 重新加载终端配置3. 安装所需的 Node.js 版本4. 使用安装的 Node.js 版本 nvm 常用命令 安装和使用 nvm 以下是安装 nvm 并使用它来安装 Node.js 的步骤&#xff1a; 1. 安装 nvm 首先&#xff0c;您需要安装 nvm。您可以使用 curl 或…...

非遗!四川省21市非遗大师工作室申报认定条件程序和认定补贴经费支持(管理办法)

第一章总则 第一条贯彻落实中共中央办公厅、国务院办公厅《关于进一步加强非物质文化遗产保护工作的意见》&#xff08;厅字〔2021〕31号&#xff09;、四川省文化和旅游厅等12部门《关于进一步加强非物质文化遗产保护工作的实施意见》&#xff08;川文旅发〔2022〕25号&#…...

uni-app系列:uni.navigateTo传值跳转

文章目录 1. 使用URL参数2. 使用页面栈注意事项&#xff1a;uni.navigateTo API 参数详细说明回调函数参数 在uni-app中&#xff0c;如果想要通过uni.navigateTo方法跳转到另一个页面并传递参数&#xff0c;可以使用页面路由的URL参数或者页面栈的方式来传递。但是&#xff0c;…...

6.3万美刀BTC的车还能上吗?

原创 | 刘教链 隔夜BTC接连下挫&#xff0c;一度击穿63k(6.3万美刀)。[昨夜6.23内参说到了几个导致近期行情低迷的原因&#xff0c;比如&#xff0c;仅6月份以来&#xff0c;BTC矿工们就以一年来最快的速度&#xff0c;向市场倾泻了几十亿美刀的现货]。 其实&#xff0c;矿工慌…...

在 Vue 3 中设置 `@` 指向根目录的方法汇总

在 Vue 3 项目开发中&#xff0c;为了方便管理和引用文件路径&#xff0c;设置 指向根目录是一项常见的需求。以下为您总结了几种常见的实现方式。 方法一&#xff1a;使用 Vite 配置&#xff08;适用于 Vite 构建的项目&#xff09; 在项目根目录创建 vite.config.js 文件&a…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用

一、方案背景​ 在现代生产与生活场景中&#xff0c;如工厂高危作业区、医院手术室、公共场景等&#xff0c;人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式&#xff0c;存在效率低、覆盖面不足、判断主观性强等问题&#xff0c;难以满足对人员打手机行为精…...

【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验

Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...

云原生周刊:k0s 成为 CNCF 沙箱项目

开源项目推荐 HAMi HAMi&#xff08;原名 k8s‑vGPU‑scheduler&#xff09;是一款 CNCF Sandbox 级别的开源 K8s 中间件&#xff0c;通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度&#xff0c;为容器提供统一接口&#xff0c;实现细粒度资源配额…...