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

Spring Boot应用程序里集成Tess4J来实现OCR(光学字符识别),以识别出本地和远程图片中的文字

一、添加依赖

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

二、添加Tessdata语言库

github:https://gitcode.com/tesseract-ocr/tessdata/tree/main
百度云盘下:https://pan.baidu.com/s/1uuSTBNo3byJib4f8eRSIFw 密码:8v8u
在这里插入图片描述

三、创建OCR服务类

@Service
public class OcrService{
	
	/**
		负责执行对本地文件的OCR任务
	*/
	public String recognizeText(File imageFile)throws TesseractException{
		
		Tesseract tesseract = new Tesseract();

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

	/**
		则先将远程图片下载到本地,然后再执行OCR
	*/
	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);
	}
}

四、建立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());
		}
	}

	//处理给定URL的远程图片
	@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());
        }
    }
}

五、测试

本地测试:
在这里插入图片描述
远程测试:
在这里插入图片描述
根据实际情况调整配置,例如在多语言环境中设置正确的语言包等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/387848.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux信号集与信号集相关函数

阻塞信号集和未决信号集&#xff1a; 例如&#xff1a;当进程收到SIGINT信号后&#xff0c;首先被保留在未决信号集中&#xff0c;此时标识位为1&#xff0c;当这个信号被处理之前&#xff0c;先检查阻塞信号集中对应的编号的位上的标识是否为1&#xff1b; 为1表示该信号被当…

ChatGPT高效提问—prompt实践(法律助手)

ChatGPT高效提问—prompt实践&#xff08;法律助手&#xff09; ​ 作为现代法治国家的公民&#xff0c;无论我们是否从事法律相关的工作&#xff0c;都难免会遇到法律问题&#xff0c;那么如何争取自身合法利益最大化呢&#xff1f;很多人大概率会第一时间查询相关的法律知识…

Java奇缘:林浩然与杨凌芸的数学冒险记

Java奇缘&#xff1a;林浩然与杨凌芸的数学冒险记 Java Adventure: The Mathematical Odyssey of Lin Haoran and Yang Lingyun 在Java编程世界的某一个角落&#xff0c;住着两位才华横溢的程序员——林浩然和杨凌芸。林浩然&#xff0c;人称“算法大侠”&#xff0c;对Java Ma…

C语言中整数除法的特性

目录 介绍 解决方法 例1 例2 介绍 在 C 语言中&#xff0c;整数除法有一个特性&#xff0c;即它会对结果进行截断而不是四舍五入。这意味着无论结果是正数还是负数&#xff0c;除法的结果都将向零取整。这也就是说&#xff0c;C 语言中的整数除法会直接截断小数部分&#x…

Spring Boot 笔记 021 项目部署

1.1 引入坐标&#xff0c;并双击package打包成jar包 1.2 在服务器上运行jar包 1.3 使用postman测试 2.1 运行配置 2.1.1 命令更改端口 java -jar big-event-1.0-SNAPSHOT.jar --server.port7777 2.1.2 环境变量更新&#xff08;略&#xff09; 2.1.3 外部配置文件&#xff0c…

LeetCode:118.杨辉三角

118. 杨辉三角 - 力扣&#xff08;LeetCode&#xff09;&#xff0c; 前言&#xff1a;平平无奇的实现&#xff0c;数组理清了的话就很easy&#xff0c;值得说的是给定的参数 int* returnSize, int** returnColumnSizes 是什么意思&#xff0c;还得熟悉适应&#xff0c;博主…

深入了解pip和conda:高效Python环境管理的必备指南

pip相关命令: 更新包之前最好更新一下pip&#xff0c;因为更新其他包底层是依赖 pip pip show pippython -m pip install --upgrade pippython更新包&#xff1a; - ​ pip install --upgrade 包 pip install pandas- ​ pip install --upgrade 包名称版本号查看那些包需要更…

【leetcode热题100】交错字符串

给定三个字符串 s1、s2、s3&#xff0c;请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。 两个字符串 s 和 t 交错 的定义与过程如下&#xff0c;其中每个字符串都会被分割成若干 非空 子字符串&#xff1a; s s1 s2 ... snt t1 t2 ... tm|n - m| < 1交错 是 s1 …

CAN通讯协议学习

介绍 它是一种异步通讯&#xff0c;can_high和can_low两条线利用的是电位差传输信号&#xff0c;抗干扰能力强&#xff0c;但是必须要有can控制器如TJA1050&#xff08;我的开发板&#xff09; 当 CAN 节点需要发送数据时&#xff0c;控制器把要发送的二进制编码通过 CAN_Tx 线…

牛客JZ 36二叉搜索树与双向链表

描述 输入一棵二叉搜索树&#xff0c;将该二叉搜索树转换成一个排序的双向链表。如下图所示 数据范围&#xff1a;输入二叉树的节点数 0≤n≤10000≤n≤1000&#xff0c;二叉树中每个节点的值 0≤val≤10000≤val≤1000 要求&#xff1a;空间复杂度O(1)&#xff08;即在原树上…

计算机毕业设计分享-SSM实验室耗材管理系统 13205(赠送源码数据库)JAVA、PHP,node.js,C++、python,大屏数据可视化等

SSM实验室耗材管理系统 摘 要 本课题研究的实验室耗材管理系统&#xff0c;主要功能模块包括用户管理、耗材管理、入库记录、出库记录、报废登记、供应商管理、耗材类别、实验室管理等&#xff0c;采取面对对象的开发模式进行软件的开发和硬体的架设&#xff0c;能很好的满足实…

CSS设置盒子阴影

语法 box-shadow: *h-shadow v-shadow blur spread color* inset; 注释: box-shadow向框添加一个或多个阴影. 该属性是由逗号分隔的阴影列表,每个阴影由2-4个长度值、可选的颜色值及可选的inset关键词来规定。省略长度的值是0。 外阴影 a、给元素右边框和下边框加外阴影——把…

Git基础使用

Git 要想了解Git&#xff0c;首先需要我们了解一下VCS——版本控制系统&#xff08;version control system&#xff09; VCS 版本控制是一种记录一个或若干文件内容变化&#xff0c;以便将来查阅特定版本修订情况的系统。版本控制系统不仅可以应用于软件源代码的文本文件&a…

【机器学习案例3】从科学论文图片中提取标题、作者和摘要【含源码】

在这个项目中,我的目标是从科学论文图片中提取某些部分(标题、作者和摘要)。预期提取部分是科学论文中常见的部分,例如标题、摘要和作者。输入与最终结果。我的输入是将第一页纸转换成图像。最终结果是一个 txt 文件,其中包含标题、作者和摘要部分,如下图1和图2所示。我将…

《区块链公链数据分析简易速速上手小册》第9章:区块链数据工具和资源(2024 最新版)

文章目录 9.1 数据获取工具9.1.1 基础知识9.1.2 重点案例&#xff1a;使用web3.py获取以太坊交易数据准备工作实现步骤步骤1: 连接到以太坊网络步骤2: 获取特定地址的交易数据 扩展应用结语 9.1.3 拓展案例 1&#xff1a;使用 Etherscan API 获取交易数据准备工作实现步骤步骤1…

【AI视野·今日CV 计算机视觉论文速览 第295期】Tue, 23 Jan 2024

AI视野今日CS.CV 计算机视觉论文速览 Tue, 23 Jan 2024 Totally 134 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computer Vision Papers Exploring Simple Open-Vocabulary Semantic Segmentation Authors Zihang Lai开放词汇语义分割模型旨在从一组任意开放词…

专业140+总分420+东北大学841通信专业基础考研经验东大电子信息与通信工程,真题,大纲,参考书。

今年考研顺利上岸&#xff0c;被东北大学通信工程录取&#xff0c;其中专业课841通信专业基础140&#xff0c;数二140&#xff0c;总分420&#xff0c;整体每门课都还是比较均衡&#xff0c;刚开始考研前也和大家一样&#xff0c;焦虑&#xff0c;紧张&#xff0c;面对考研怕失…

本地存储云存储使用量对比

目录 块存储 文件存储 对象存储 使用传统式存储&#xff0c;需要购买新的存储系统、存储容量&#xff0c;还需要为未来的发展预留一部分容量&#xff0c;同时未来如果业务量规模扩大&#xff0c;还可能需要在数据中心托管并维护总容量&#xff0c;这都将大大增加成本。 使用…

【Linux笔记】进程间通信之管道

一、匿名管道 我们在之前学习进程的时候就知道了一个概念&#xff0c;就是进程间是互相独立的&#xff0c;所以就算是两个进程是父子关系&#xff0c;其中一个进程退出了也不会影响另一个进程。 也因为进程间是互相独立的&#xff0c;所以两个进程间就不能直接的传递信息或者…

算法沉淀——栈(leetcode真题剖析)

算法沉淀——栈 01.删除字符串中的所有相邻重复项02.比较含退格的字符串03.基本计算器 II04.字符串解码05.验证栈序列 栈&#xff08;Stack&#xff09;是一种基于先进后出&#xff08;Last In, First Out&#xff0c;LIFO&#xff09;原则的数据结构。栈具有两个主要的操作&am…