Java实现图片转文字!(OCR实现)

news2024/11/25 14:35:25

今天给大家分享一个Java实现OCR(图片转文字)的方法。

具体实现是把tess4j整合到一个SpringBoot项目中。

下面是详细步骤

什么是Tess4j

在实现OCR之前,先要分清楚TesseractTess4j的区别。

Tesseract是一个开源的光学字符识别(OCR)引擎,它可以将图像中的文字转换为计算机可读的文本。支持多种语言和书面语言,并且可以在命令行中执行。它是一个流行的开源OCR工具,可以在许多不同的操作系统上运行。

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

Tesseract引擎的下载

根据上面介绍的,Tess4j只是提供OCR的Java接口,真正OCR的Tesseract引擎。所以我们得先下载对应系统的Tesseract引擎(这里我以Windows版本为例)。

下载地址【github.com/UB-Mannheim…】

Snipaste_2023-10-13_16-18-47.png

下载完成之后选择安装路径,默认安装即可。

中文文字训练集下载

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

下载地址【github.com/tesseract-o…】

Snipaste_2023-10-15_21-47-38.png

我们可以看到Tesseract提供了很多语言的训练集,这里我们选择简体中文chi_sim

然后将训练集放到Tesseract引擎对应的目录下,如下所示,tessdata文件夹是专门用来放训练集的。

Snipaste_2023-10-15_21-49-11.png

到此为止,我们的环境准备工作已经完成了。

实现OCR

首先新建一个SpringBoot项目,由于是提供api接口,所以勾选spring web。

Snipaste_2023-10-15_20-03-48.png

Snipaste_2023-10-15_20-06-07.png

添加Maven依赖

Snipaste_2023-10-15_22-13-32.png

<!-- https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j -->
<dependency>
    <groupId>net.sourceforge.tess4j</groupId>
    <artifactId>tess4j</artifactId>
    <version>4.5.1</version>
</dependency>

service层的实现

代码如下。

ps:如果我们想实现多语言识别,只需要在设置原因的时候将语言类型拼接起来。

Snipaste_2023-10-15_22-16-29.png

@Service
public class OcrService {

    private final ITesseract tesseract;

    public OcrService() {
        this.tesseract = new Tesseract();
        //训练集存放的目录
        this.tesseract.setDatapath("D:\tesseract\tessdata");
    }

    public String recognizeText(BufferedImage image) throws TesseractException {
        tesseract.setLanguage("chi_sim");

        //如果想要实现简体和繁体的识别,只需要将语言类型拼接起来
        //tesseract.setLanguage("chi_sim+chi_tra");

        return tesseract.doOCR(image);
    }

controller层的实现

接下来我们对外提供一个controller接口,接收参数为MultipartFile

Snipaste_2023-10-15_22-20-21.png

@RestController
@RequestMapping("/api/ocr")
public class OcrController {

    @Autowired
    private OcrService ocrService;

    @PostMapping("/recognize")
    public ResponseEntity<String> recognizeText(@RequestParam("file") MultipartFile file) {
        try {
            String result = ocrService.recognizeText(ImageIO.read(file.getInputStream()));
            return ResponseEntity.ok(result);
        } catch (IOException | TesseractException e) {
            return ResponseEntity.badRequest().body("图片处理出错: " + e.getMessage());
        }
    }

测试接口

首先启动SpringBoot项目。

Snipaste_2023-10-15_22-28-59.png

这里用postman来做api测试,测试对下面图片中文字识别的准确率

Snipaste_2023-10-15_21-51-33.png

postman中headersbody设置如下,完成之后点击send,可以看出识别的速度还是非常快的,仅用时1秒多,准确率也很高。

Snipaste_2023-10-15_21-52-25.png

Snipaste_2023-10-15_21-53-26.png

是不是很简单,Tessdata不仅能够识别这些标准文字,还能识别很多特殊的字体,甚至可以用自己的笔迹来生成一个训练集来专门识别自己写的字!

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

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

相关文章

Python数据分析实战-applymap、apply、map有什么区别?(附源码和实现效果)

实现功能 applymap&#xff1a;applymap 是 DataFrame 对象的方法&#xff0c;用于对 DataFrame 中的每个元素应用一个函数。它将函数应用于 DataFrame 的每个元素&#xff0c;并返回一个新的具有相同形状的 DataFrame。applymap 通常用于对 DataFrame 中的每个单元格进行元素…

线性系统的根轨迹分析

根轨迹法&#xff1a;通过求开环零点和开环极点&#xff0c;来画出闭环极点在S平面的位置。 也是用来判断系统稳定性的。 定义&#xff1a;根轨迹是指系统特征方程式的根(闭环极点&#xff09;随系统参量变化 在S平面 上运动而形成的轨迹。 开环传递函数里边的一个参数&…

还不会在MT4用Renko,FPmarkets澳福手把手教你一分钟学会

很多投资者还不会在MT4上使用Renko&#xff0c;让FPmarkets澳福通过一个具体的例子来探讨&#xff0c;Renko图表指标在MT4平台上的应用&#xff0c;以AG Renko为例。 首先&#xff0c;投资者需要解压缩下载的档案&#xff0c;并将其移动到MT4的“指标”文件夹中。重启MetaTrade…

1-k8s1.24-底座搭建-基于containerd

文章目录 一、服务器准备二、安装Containerd三、安装k8s四、安装部署dashboard ps&#xff1a;第一遍搭建ks8的时候&#xff0c;由于k8s在1.24版本之后就放弃了对docker的支持&#xff0c;如果要继续使用docker需要自己加载插件。所以一开始就是直接使用 k8s1.24containerd进行…

COMPFEST 15 - Preliminary Online Mirror I. Imagination Castle(dp递推+sg函数思想)

题目 n*m(1<n,m<2e5)的棋盘&#xff0c;有k(k<min(n*m,2e5))个特殊位置&#xff0c; 初始时在(1,1)位置&#xff0c;Chaneka和Bhinneka两人玩游戏&#xff0c;Chaneka先手&#xff0c; 当你在(x,y)位置时&#xff0c;下一步可以走到同一行靠右的位置(xx,y>y)或同…

格式化前做好备份,内存卡数据安全无忧

内存卡格式化会怎么样&#xff1f;了解格式化原理的小伙伴都明白&#xff0c;格式化操作会清除内存卡上的所有数据&#xff0c;包括文档、照片、视频等文件。 因此&#xff0c;在格式化内存卡之前&#xff0c;我们需要将重要的数据进行备份以免丢失。那么&#xff0c;内存卡格式…

408-2015

一、单项选择题 1.已知程序如下。 int S(int n){return n<0?0:s(n-1)n; } void main(){cout<<S(1); }程序运行时使用栈来保存调用过程的信息&#xff0c;自栈底到栈顶保存的信息依次是_____。 A.main()->S(1)->S(0) B.S(0)->S(1)->main() …

uniapp安卓 华为商店 vivo商店 oppo 小米 上架问题 Android中怎么才能不提前申请权限

问题描述 提交 小米 oppo 市场审核失败&#xff0c;原因是提前向用户申请开启通讯录、定位、短信、录音、相机和日历等权限。 解决方案&#xff1a; 是否有使用 READ_PHONE_STATE 权限&#xff0c;如果有使用 oaid 代替&#xff1b;是否有使用第三方 SDK&#xff0c;如果有关…

RPA厂商有哪些?国内头部5家RPA厂商的分析对比

一、RPA是什么&#xff1f; 能模拟人工进行鼠标点击键盘输入、读取信息等操作&#xff0c;实现电脑和手机上各种软件的自动化。 快速搭建任何自动化流程&#xff0c;在工作中&#xff0c;一切重复有规则的事情都可以用RPA来实现自动化。 二、RPA能帮助政企解决什么问题&#…

【百家稷学】人才强企数字化赋能人工智能深度培训(中国联通集团实训)

继续咱们百家稷学专题&#xff0c;本次是有三AI在中国联通集团进行的系统性培训。百家稷学专题的目标&#xff0c;是走进100所高校和企业进行学习与分享。 分享主题 本次分享是在中国联通集团山西邮电学院进行&#xff0c;由51CTO负责组织&#xff0c;主题是《人才强企数字化赋…

外部统一设置了::-webkit-scrollbar { display: none; }如何单独给特定元素开启滚动条设置样式-web页面滚动条样式设置

如果你在外部统一设置了​​::-webkit-scrollbar { display: none; }​​​来隐藏滚动条&#xff0c;但是想要在​​.lever​​元素中单独开启滚动条的样式&#xff0c;你可以使用CSS的级联选择器来覆盖外部样式。 以下是一个示例&#xff0c;展示如何给​​.lever​​单独开启…

linux centos7提示 cannot found font installed on the system.calibri

主图 目录 1.问题描述2.问题解决2.1安装Microsoft Core Fonts2.2手动安装字体文件&#xff1a;2.3查看当前系统基本型细腻 总结参考 文章所属专区 超链接 1.问题描述 linux centos7提示 cannot found font installed on the system.calibri &#xff0c;linux系统找不到cali…

226、翻转二叉树

题目链接&#xff1a; \sf 题目链接&#xff1a; 题目链接&#xff1a; 图解&#xff1a; 方法一、 D F S \sf 方法一、DFS 方法一、DFS 递归&#xff1a; 让左子树是翻转后的右子树&#xff0c; 右子树是翻转后的左子树。 ∴从叶结点开始&#xff0c;自底向上逐步翻转。递归出…

2023年中国超硬材料制品分析及超硬刀具市场规模分析[图]

超硬材料是指硬度特别高的材料&#xff0c;可分为天然以及人造两种&#xff0c;前者主要包括天然的钻石&#xff08;金刚石&#xff09;、黑钻石&#xff0c;后者则包括人造金刚石、立方氮化硼。 超硬材料制品分类 资料来源&#xff1a;共研产业咨询&#xff08;共研网&#x…

轨迹规划 | 图解动态窗口算法DWA(附ROS C++/Python/Matlab仿真)

目录 0 专栏介绍1 动态障碍建模2 DWA基本原理2.1 采样窗口2.2 评价函数 3 DWA算法流程4 仿真实现4.1 ROS C实现4.2 Python实现4.3 Matlab实现 0 专栏介绍 &#x1f525;附C/Python/Matlab全套代码&#x1f525;课程设计、毕业设计、创新竞赛必备&#xff01;详细介绍全局规划(…

文案配音软件哪个好?(适合新手使用)

随着短视频的逐渐普及&#xff0c;视频博主越来越多&#xff0c;所以很多朋友也期待成为视频博主。但是&#xff0c;如果你想成为一个有名的视频博主&#xff0c;你需要在很多层面上比别人做得更好。其中之一就是视频文字的配音。相信大部分人都没有配音的技巧&#xff0c;所以…

mybatis plus MetaObjectHandler 不生效

首先要知道,spring boot 只会加载启动类同级和下级的bean 如果把bean放在启动类不同的上级目录,是加载不了bean的 如果把mybatisplus的配置文件放在与启动类不同包,就会扫描不到 例如放在这里,就扫描不到 放到这里,就可以扫描到

部署云端SIEM解决方案的5个优势

随着组织迅速转向云端以利用云计算的优势&#xff0c;包括SIEM&#xff08;安全信息与事件管理&#xff09;在内的服务也正在向云端迁移。事实上&#xff0c;SIEM即服务正在迅速崭露头角&#xff0c;成为传统的本地SIEM解决方案的替代品。在Gartner的《采用SaaS SIEM前需回答的…

数学知识总结

素数 质数/素数定义 在大于1的整数中&#xff0c;如果只包含1和本身这两个约数&#xff0c;就被称为质数&#xff0c;或者叫素数 判断素数&#xff08;试除法&#xff09; 约数有一个重要的性质&#xff1a; 假设n代表数字&#xff0c;d代表n的一个约数 即d能整除n(d|n) 那么n…

visual studio安装时候修改共享组件、工具和SDK路径方法

安装了VsStudio后,如果自己修改了Shared路径&#xff0c;当卸载旧版本&#xff0c;需要安装新版本时发现&#xff0c;之前的Shared路径无法进行修改&#xff0c;这就很坑爹了&#xff0c;因为我运行flutter程序的时候&#xff0c;报错找不到windows sdk的位置&#xff0c;所以我…