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

SpringBoot/Java中OCR实现,集成Tess4J实现图片文字识别

场景

Tesseract

Tesseract是一个开源的光学字符识别(OCR)引擎,它可以将图像中的文字转换为计算机可读的文本。

支持多种语言和书面语言,并且可以在命令行中执行。它是一个流行的开源OCR工具,可以在许多不同的操作系统上运行。

GitHub - tesseract-ocr/tesseract: Tesseract Open Source OCR Engine (main repository)

Tess4J

Tess4J是一个基于Tesseract OCR引擎的Java接口,可以用来识别图像中的文本,说白了,就是封装了它的API,让Java可以直接调用。

中文文字训练集下载

Tesseract引擎默认是无法识别中文的,只能识别数字或者英文。如果我们想实现中文的识别就得去下载对应的训练集。

GitCode - 开发者的代码家园

下载之后找到中文简体训练集文件

将chi_sim.traineddata复制到某磁盘路径下,这里放在D盘tessdata目录下

注:

博客:
霸道流氓气质-CSDN博客

实现

1、搭建SpringBoot项目后,添加Tess4J依赖

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

2、在配置文件application.yml中添加训练集文件夹的路径

# 训练数据文件夹的路径
tess4j:datapath: D:/tessdata

3、新增配置类,读取配置文件内容,并初始化Tesseract类,交给Spring管理

import net.sourceforge.tess4j.Tesseract;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class TesseractOcrConfiguration {@Value("${tess4j.datapath}")private String dataPath;@Beanpublic Tesseract tesseract() {Tesseract tesseract = new Tesseract();// 设置训练数据文件夹路径tesseract.setDatapath(dataPath);// 设置为中文简体tesseract.setLanguage("chi_sim");return tesseract;}
}

4、编写Service接口层

import java.io.InputStream;public interface IOcrService {String recognizeText(InputStream sbs);
}

5、编写ServiceImpl

import com.ruoyi.system.service.IOcrService;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.InputStream;@Service
public class OcrServiceImpl implements IOcrService {@Autowiredprivate Tesseract tesseract;@Overridepublic String recognizeText(InputStream sbs) {// 转换try {BufferedImage bufferedImage = ImageIO.read(sbs);// 对图片进行文字识别return tesseract.doOCR(bufferedImage);} catch (IOException | TesseractException e) {e.printStackTrace();return null;}}
}

6、编写单元测试

import com.ruoyi.system.service.IOcrService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;@RunWith(SpringRunner.class)
@SpringBootTest(classes = RuoYiApplication.class,webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class Tess4JOcrTest {@Autowiredprivate IOcrService iOcrService;@Testpublic void ocrLocalPng() {try {InputStream inputStream=new FileInputStream("D://tess4j.png");String result = iOcrService.recognizeText(inputStream);System.out.println(result);} catch (FileNotFoundException e) {e.printStackTrace();}}
}

7、这里的png文件随便截图并放在磁盘路径下,运行单元测试

识别效果可能存在不准确的情况。

其它使用场景,比如前端上传照片,后台识别返回结果等可自己进行扩展。

相关文章:

SpringBoot/Java中OCR实现,集成Tess4J实现图片文字识别

场景 Tesseract Tesseract是一个开源的光学字符识别&#xff08;OCR&#xff09;引擎&#xff0c;它可以将图像中的文字转换为计算机可读的文本。 支持多种语言和书面语言&#xff0c;并且可以在命令行中执行。它是一个流行的开源OCR工具&#xff0c;可以在许多不同的操作系…...

【深度学习目标检测】十九、基于深度学习的芒果计数分割系统-含数据集、GUI和源码(python,yolov8)

使用深度学习算法检测芒果具有显著的优势和应用价值。以下是几个主要原因&#xff1a; 特征学习的能力&#xff1a;深度学习&#xff0c;特别是卷积神经网络&#xff08;CNN&#xff09;&#xff0c;能够从大量的芒果图像中自动学习和提取特征。这些特征可能是传统方法难以手动…...

骑砍战团MOD开发(48)-多人联机模式开发环境搭建

一.多人联机模式网络拓扑图 <1.局域网网络拓扑图 <2.互联网网络拓扑图 二.多人联机模式配置 MOD目录下module.ini修改配置项 has_multiplayer 1 has_single_player 1 三.服务端创建 引擎内置presentation页面: prsnt_game_multiplayer_admin_panel start_multi…...

Java+SpringBoot+Vue+MySQL:美食推荐系统的技术革新

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…...

【服务发现--ingress】

1、ingress介绍 Ingress 提供从集群外部到集群内服务的 HTTP 和 HTTPS 路由。 流量路由由 Ingress 资源所定义的规则来控制。 Ingress 是对集群中服务的外部访问进行管理的 API 对象&#xff0c;典型的访问方式是 HTTP。 Ingress 可以提供负载均衡、SSL 终结和基于名称的虚拟…...

Yolov8有效涨点:YOLOv8-AM,添加多种注意力模块提高检测精度,含代码,超详细

前言 2023 年&#xff0c;Ultralytics 推出了最新版本的 YOLO 模型。注意力机制是提高模型性能最热门的方法之一。 本次介绍的是YOLOv8-AM&#xff0c;它将注意力机制融入到原始的YOLOv8架构中。具体来说&#xff0c;我们分别采用四个注意力模块&#xff1a;卷积块注意力模块…...

苹果分拣检测YOLOV8NANO

苹果分拣&#xff0c;可以检测成熟、切片、损坏、不成熟四种类型&#xff0c;YOLOV8NANO&#xff0c;训练得到PT模型&#xff0c;然后转换成ONNX&#xff0c;OPENCV的DNN调用&#xff0c;支持C,PYTHON 苹果分拣检测YOLOV8NANO&#xff0c;检测四种类型苹果...

使用 Verilog 做一个可编程数字延迟定时器 LS7211-7212

今天的项目是在 Verilog HDL 中实现可编程数字延迟定时器。完整呈现了延迟定时器的 Verilog 代码。 所实现的数字延迟定时器是 CMOS IC LS7212&#xff0c;用于生成可编程延迟。延迟定时器的规格可以在这里轻松找到。基本上&#xff0c;延迟定时器有 4 种操作模式&#xff1a;…...

戏说c语言文章汇总

c语言的起源GNU C和标准C第一篇: hello c!第二篇: 为什么需要编译第三篇: 当你运行./a.out时&#xff0c;发生了什么&#xff1f;第四篇: 简单的加法器第五篇: 两个正数相加竟然变成了负数&#xff01;第六篇: 西西弗斯推石头(循环)第七篇: 九九乘法表(双循环)第八篇: 如果上天…...

面试redis篇-12Redis集群方案-分片集群

原理 主从和哨兵可以解决高可用、高并发读的问题。但是依然有两个问题没有解决&#xff1a; 海量数据存储问题高并发写的问题 使用分片集群可以解决上述问题&#xff0c;分片集群特征&#xff1a; 集群中有多个master&#xff0c;每个master保存不同数据每个master都可以有…...

【Java EE初阶二十三】servlet的简单理解

1. 初识servlet Servlet 是一个比较古老的编写网站的方式&#xff0c;早起Java 编写网站,主要使用 Servlet 的方式&#xff0c;后来 Java 中产生了一个Spring(一套框架)&#xff0c;Spring 又是针对 Servlet 进行了进一步封装,从而让我们编写网站变的更简单了&#xff1b;Sprin…...

c++ http操作接口

很简单的使用libcurl来操作http与服务器来通讯&#xff0c;包含http与https&#xff0c;对外只开放 #include "request.h" #include "response.h" #include "url.h" 三个头文件&#xff0c;简单易用&#xff0c;使用的实例如下&#xff1a; vo…...

oracle官网下载早期jdk版本

Java Downloads | Oracle JDK Builds from Oracle 以上压缩版&#xff0c;以下安装版 Java Downloads | Oracle 该链接往下拉能看到jdk8和jdk11的安装版 -- end...

Python爬虫实战:图片爬取与保存

引言&#xff1a; 在本文中&#xff0c;我们将学习如何使用Python创建一个简单的图片爬虫。 我们将利用requests库来发送HTTP请求&#xff0c;BeautifulSoup库来解析HTML页面&#xff0c;以及os和shutil库来下载和保存图片。通过这个教程&#xff0c;你将学会如何爬取网…...

CMS垃圾回收器

CMS垃圾回收 CMS GC的官方名称为“Mostly Concurrenct Mark and Sweep Garbage Collector”&#xff08;最大-并发-标记-清除-垃圾收集器&#xff09;。 作用范围&#xff1a; 老年代 算法&#xff1a; 并发标记清除算法。 启用参数&#xff1a;-XX:UseConMarkSweepGC 默认回收…...

【力扣白嫖日记】184.部门工资最高的员工

前言 练习sql语句&#xff0c;所有题目来自于力扣&#xff08;https://leetcode.cn/problemset/database/&#xff09;的免费数据库练习题。 今日题目&#xff1a; 184.部门工资最高的员工 表&#xff1a;Employee 列名类型idintnamevarcharsalaryvarchardepartmentIdint …...

JAVA讲解算法-排序算法-选择排序算法-02

一、定义 选择排序法是一种不稳定的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小&#xff08;或最大&#xff09;的一个元素&#xff0c;存放在序列的起始位置&#xff0c;然后&#xff0c;再从剩余未排序元素中继续寻找最小&#xff08;大&#xff09;元素&a…...

【初始RabbitMQ】高级发布确认的实现

在生产环境中由于一些不明原因&#xff0c;导致 rabbitmq 重启&#xff0c;在 RabbitMQ 重启期间生产者消息投递失败&#xff0c; 导致消息丢失&#xff0c;需要手动处理和恢复。于是&#xff0c;我们开始思考&#xff0c;如何才能进行 RabbitMQ 的消息可靠投递呢&#xff1f; …...

用39块钱的全志V851se视觉开发板做了个小相机,还可以物品识别、自动追焦!

用39块钱的V851se视觉开发板做了个小相机。 可以进行物品识别、自动追焦&#xff01; 这个超低成本的小相机是在V851se上移植使用全志在线开源版本的Tina Linux与OpenCV框架开启摄像头拍照捕获视频&#xff0c;并结合NPU实现Mobilenet v2目标分类识别以及运动追踪等功能…并最终…...

主从复制实现Redis集群

主从复制实现Redis集群实验 (一主二从): 实验环境: 使用Docker 搭建 Redis 版本 5.0.5 打开一个终端窗口&#xff0c;在其中运行如下命令创建一个名为redis-master的Redis容器。注意&#xff0c;它的端口是6379 (本地的端口:映射到容器的端口) docker run -itd--name redis-m…...

DownKyi哔哩下载姬:5分钟快速上手指南,解锁B站视频下载全功能

DownKyi哔哩下载姬&#xff1a;5分钟快速上手指南&#xff0c;解锁B站视频下载全功能 【免费下载链接】downkyi 哔哩下载姬downkyi&#xff0c;哔哩哔哩网站视频下载工具&#xff0c;支持批量下载&#xff0c;支持8K、HDR、杜比视界&#xff0c;提供工具箱&#xff08;音视频提…...

【限时解密】ISO WG21草案最新变动:C++26合约语义将在2024年10月冻结,你现在不学就错过最后窗口期

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;C26合约编程的演进脉络与冻结节点意义 C26 将首次正式纳入“合约&#xff08;Contracts&#xff09;”作为语言级特性&#xff0c;标志着 ISO C 标准在运行时契约保障机制上的关键落地。该特性并非凭空…...

Spring Boot 配置属性绑定机制

Spring Boot配置属性绑定机制解析 在Spring Boot应用中&#xff0c;配置管理是开发的核心环节之一。通过灵活的属性绑定机制&#xff0c;开发者能够轻松将外部配置&#xff08;如application.yml或环境变量&#xff09;映射到Java对象中&#xff0c;大幅简化配置管理流程。这一…...

告别调参玄学:用Python的geatpy库5分钟搞定NSGA-II多目标优化(附完整代码)

告别调参玄学&#xff1a;用Python的geatpy库5分钟搞定NSGA-II多目标优化&#xff08;附完整代码&#xff09; 在工程优化和机器学习领域&#xff0c;多目标优化问题就像同时要讨好几位性格迥异的上司——每个目标都重要&#xff0c;但优化方向往往相互矛盾。传统单目标优化方法…...

终极游戏模组管理解决方案:XXMI启动器完整使用指南

终极游戏模组管理解决方案&#xff1a;XXMI启动器完整使用指南 【免费下载链接】XXMI-Launcher Modding platform for GI, HSR, WW and ZZZ 项目地址: https://gitcode.com/gh_mirrors/xx/XXMI-Launcher 你是否厌倦了为不同游戏安装模组时的繁琐步骤&#xff1f;每次切换…...

FreeCAD - “增料放样“基础使用

创建第一个草图创建第二个草图偏置其中一个草图点击“增料放样”&#xff0c;选择其中一个草图附件&#xff0c;点击“OK”轮廓对象为上一步选择的附件&#xff0c;点击添加截面&#xff0c;选择另一草图中的轮廓点击 OK 完成操作...

重庆数据备份公司排行榜单

数据备份行业&#xff1a;技术挑战与本地化解决方案的崛起行业痛点分析当前&#xff0c;数据备份领域正面临前所未有的技术挑战。随着数据量呈指数级增长&#xff0c;传统备份方案在效率、成本和安全性上的短板日益凸显。首先&#xff0c;海量非结构化数据的涌现使得备份窗口被…...

避坑指南:H3C S5500-SI交换机LLDP配置常见3大误区(附V5/V7命令差异对照表)

H3C S5500-SI交换机LLDP实战避坑手册&#xff1a;V5/V7双版本深度解析 最近在帮客户做网络改造时&#xff0c;遇到一个典型的LLDP配置问题——两台H3C S5500-SI交换机&#xff08;分别运行V5和V7系统&#xff09;通过千兆端口互联后&#xff0c;NMS系统始终无法正确识别链路拓扑…...

3大核心模块解密:AssetRipper如何实现Unity资产的智能提取与重构

3大核心模块解密&#xff1a;AssetRipper如何实现Unity资产的智能提取与重构 【免费下载链接】AssetRipper GUI Application to work with engine assets, asset bundles, and serialized files 项目地址: https://gitcode.com/GitHub_Trending/as/AssetRipper 在游戏开…...

手把手教你用ADIsimCLK和GUI搞定HMC7044单环模式配置(附完整寄存器表)

从零到精通&#xff1a;HMC7044单环模式配置实战指南 时钟芯片配置一直是硬件工程师的必修课&#xff0c;但面对HMC7044这类高性能时钟发生器&#xff0c;即便是经验丰富的工程师也常被复杂的寄存器配置困扰。本文将带你用ADIsimCLK和GUI工具&#xff0c;一步步完成单环模式配置…...