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

使用Spring Boot和Tess4J实现本地与远程图片的文字识别

概要
在本文中,我们将探讨如何在Spring Boot应用程序里集成Tess4J来实现OCR(光学字符识别),以识别出本地和远程图片中的文字。我们将从添加依赖说起,然后创建服务类以实现OCR,最后展示如何处理用户上传的本地图片和远程图片URL进行文字识别。

正文

引言
随着信息技术的不断进步,图片中的文字提取已经越来越多地应用于数据输入和自动化处理过程。Tess4J,作为Tesseract OCR引擎的Java JNA封装,提供了一个能力强大的接口来实现这一功能。在Spring Boot中整合Tess4J,我们可以快速地在Java应用中优雅地实现文字识别。本指南将手把手教你在Spring Boot项目中实现这一功能。

第1部分:环境搭建

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

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

第2部分:添加依赖

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

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

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

添加Tessdata语言库
github下:https://gitcode.com/tesseract-ocr/tessdata/tree/main?utm_source=csdn_github_accelerator&isLogin=1

百度云盘下 :https://pan.baidu.com/s/1uuSTBNo3byJib4f8eRSIFw 密码:8v8u
在这里插入图片描述

第3部分:创建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。

第4部分:建立REST控制器

@RestController
@RequestMapping("/api/ocr")
public class OcrController {private final OcrService ocrService;// 使用构造器注入OcrServicepublic 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的远程图片。
第5部分:测试
本地测试:

远程测试
在这里插入图片描述

结尾
通过以上步骤,你现在拥有了一个能够处理本地和远程图片文字识别的Spring Boot服务。在实践中,你可能需要根据实际情况调整配置,例如在多语言环境中设置正确的语言包等。尽管OCR技术仍然有提升空间,但通过Tess4J,你可以取得非常不错的起点。

相关文章:

  • SVN 常用命令汇总(2024)
  • 上位机图像处理和嵌入式模块部署(自定义算法)
  • React16源码: React中commit阶段的commitRoot的主流程源码实现
  • 单片机学习笔记---矩阵键盘
  • 源 “MySQL 5.7 Community Server“ 的 GPG 密钥已安装,但是不适用于此软件包。请检查源的公钥 URL 是否配置正确。
  • [UI5 常用控件] 03.Icon, Avatar,Image
  • 数据验证方法补充ValidationRule
  • 《动手学深度学习(PyTorch版)》笔记2
  • Ubuntu20.04安装cuda12.11
  • 当一个json存在id 和_id 的时候,使用JSONObject.parseObject进行序列号操作,映射错误
  • HCIA学习作业二
  • 【C语言/数据结构】排序(直接插入排序|希尔排序)
  • 单片机设计_智能蓝牙电子秤(51单片机、HX711AD)
  • 快速上手!使用Docker和Nginx部署Web服务的完美指南
  • Ubuntu 22.04 apt 安装 ros1 ros Noetic Ninjemys
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • classpath对获取配置文件的影响
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • JavaScript异步流程控制的前世今生
  • Promise面试题,控制异步流程
  • Spring Boot快速入门(一):Hello Spring Boot
  • WePY 在小程序性能调优上做出的探究
  • 闭包,sync使用细节
  • 官方解决所有 npm 全局安装权限问题
  • 汉诺塔算法
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 使用Gradle第一次构建Java程序
  • 小程序测试方案初探
  • (3)选择元素——(17)练习(Exercises)
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (二)hibernate配置管理
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (五)MySQL的备份及恢复
  • (一)RocketMQ初步认识
  • (一)基于IDEA的JAVA基础1
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转)h264中avc和flv数据的解析
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • .Net CoreRabbitMQ消息存储可靠机制
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
  • @NestedConfigurationProperty 注解用法
  • [.NET]桃源网络硬盘 v7.4
  • [AIGC] MySQL存储引擎详解
  • [ai笔记3] ai春晚观后感-谈谈ai与艺术
  • [BROADCASTING]tensor的扩散机制
  • [C#7] 1.Tuples(元组)
  • [C/C++] C/C++中数字与字符串之间的转换
  • [C++] Boost智能指针——boost::scoped_ptr(使用及原理分析)
  • [C++] 默认构造函数、参数化构造函数、拷贝构造函数、移动构造函数及其使用案例