用 SpringBoot + Tess4j 优雅实现图像文字识别,真香!
来源https://blog.csdn.net/m0_62128476 欢迎加入小哈的星球你将获得:专属的项目实战多个项目 / 1v1 提问 /Java 学习路线 /学习打卡 / 每月赠书 / 社群讨论新项目《Spring AI 项目实战》正在更新中..., 基于 Spring AI Spring Boot 3.x JDK 21;《从零手撸仿小红书微服务架构》 已完结基于 Spring Cloud Alibaba Spring Boot 3.x JDK 17..., 点击查看项目介绍演示地址http://116.62.199.48:7070/《从零手撸前后端分离博客项目全栈开发》2期已完结,演示链接http://116.62.199.48/;专栏阅读地址https://www.quanxiaoha.com/column截止目前累计输出 100w 字讲解图 4013 张还在持续爆肝中..后续还会上新更多项目目标是将 Java 领域典型的项目都整一波如秒杀系统, 在线商城, IM 即时通讯Spring Cloud Alibaba 等等戳我加入学习解锁全部项目已有4500小伙伴加入目录什么是 Tess4jOCRTesseract OCRTess4j下载字体库中文字体库英文字体库在 SpringBoot 项目中集成 Tess4j引入依赖编写配置文件编写配置类测试图像识别功能中文英文中英混合注意事项1. 什么是 Tess4j1.1 OCROCR 是 Optical Character Recognition光学字符识别的缩写它是一种技术能够将不同形式的文档如纸质文档、PDF 文件或图像中的打印文本、手写文本或其他类型的数据转换为机器可编辑和可搜索的数据格式如文本文件或电子文档。OCR 技术的工作流程通常包括以下几个步骤图像预处理这一步包括图像的获取、二值化、去噪、旋转校正、分割等以提高后续识别的准确性。文本检测在图像中定位文本的位置通常是通过检测文本的行、单词或字符边界。特征提取从图像中提取文本的特征这些特征将用于识别过程。字符识别这一步涉及将提取的特征与已知字符的模式进行匹配以识别每个字符。后处理这一步包括对识别结果进行校对、格式化、布局分析等以提高整体的可读性和准确性。OCR 技术的应用非常广泛包括文档管理将纸质文档转换为电子文档便于存储和搜索。数据输入自动从表格、表单等文档中提取数据减少手动输入的工作量。内容分析从大量文档中提取信息用于数据分析或知识管理。辅助技术帮助视力障碍人士通过语音合成将文本转换为语音。1.2 Tesseract OCRTesseract OCR光学字符识别是一个开源的 OCR 引擎最初由 HP 实验室开发并在 2005 年开源之后由 Google 赞助并继续开发。它是目前最准确、最流行的开源 OCR 工具之一。1.3 Tess4jTess4J 是一个 Java 库它是 Tesseract OCR 引擎的 Java 封装器。Tess4J 允许 Java 开发者轻松地将 Tesseract OCR 的功能集成到他们的 Java 应用程序中。通过 Tess4JJava 程序可以调用 Tesseract 来执行光学字符识别OCR任务即将图像中的文字转换为可编辑和可搜索的文本格式。Tess4j 的特点易于集成Tess4J 提供了简单的 API使得在 Java 应用程序中使用 Tesseract 变得非常容易。跨平台Tess4J 可以在任何支持 Java 的操作系统上运行包括 Windows、macOS 和 Linux。功能丰富Tess4J 支持 Tesseract 的所有主要功能包括多语言识别、自定义训练等。社区支持作为一个开源项目Tess4J 拥有一个活跃的社区提供支持和更新。2. 下载字体库下载地址“https://github.com/tesseract-ocr/tessdata2.1 中文字体库点击chi_sim.traineddata中文字体库下载接着点击下载按钮下载按钮2.2 英文字体库点击eng.traineddata英文字体库下载接着点击下载按钮英文字体库下载按钮3. 在 SpringBoot 项目中集成 Tess4j本次演示的环境为JDK 17.0.7 SpringBoot 3.0.23.1 引入依赖dependency groupIdnet.sourceforge.tess4j/groupId artifactIdtess4j/artifactId version4.1.1/version /dependency3.2 编写配置文件将F:/HeiMaTouTiao/tessdata更换为你存放字体库文件的目录使用绝对路径application.ymlserver: port: 11014 tess4j: >Tess4jConfiguration.javaimport org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; Configuration ConfigurationProperties(prefix tess4j) publicclass Tess4jConfiguration { private String dataPath; private String chineseTrainData; private String englishTrainData; public String getDataPath() { return dataPath; } public void setDataPath(String dataPath) { this.dataPath dataPath; } public String getChineseTrainData() { return chineseTrainData; } public void setChineseTrainData(String chineseTrainData) { this.chineseTrainData chineseTrainData; } public String getEnglishTrainData() { return englishTrainData; } public void setEnglishTrainData(String englishTrainData) { this.englishTrainData englishTrainData; } }4. 测试图像识别功能4.1 中文4.1.1 测试代码import cn.edu.scau.config.Tess4jConfiguration; import net.sourceforge.tess4j.ITesseract; import net.sourceforge.tess4j.Tesseract; import net.sourceforge.tess4j.TesseractException; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import java.io.File; SpringBootTest publicclass Tess4jApplicationTests { Autowired private Tess4jConfiguration tess4jConfiguration; Test public void testChinese() throws TesseractException { long start System.currentTimeMillis(); ITesseract iTesseract new Tesseract(); // 设置字体库路径 iTesseract.setDatapath(tess4jConfiguration.getDataPath()); // 设置语言 iTesseract.setLanguage(tess4jConfiguration.getChineseTrainData()); File file new File(F:/HeiMaTouTiao/tessdata/CaiXuKun-Chinese.png); // 识别图片 String result iTesseract.doOCR(file); long end System.currentTimeMillis(); System.err.println(耗时 (end - start) ms); System.out.println(result); } }4.1.2 测试图片中文识别测试图片4.1.3 测试结果不得不说图像识别耗时很长中文识别测试结果4.2 英文4.2.1 测试代码Test public void testEnglish() throws TesseractException { long start System.currentTimeMillis(); ITesseract iTesseract new Tesseract(); // 设置字体库路径 iTesseract.setDatapath(tess4jConfiguration.getDataPath()); // 设置语言 iTesseract.setLanguage(tess4jConfiguration.getEnglishTrainData()); File file new File(F:/HeiMaTouTiao/tessdata/CaiXuKun-English.png); // 识别图片 String result iTesseract.doOCR(file); long end System.currentTimeMillis(); System.err.println(耗时 (end - start) ms); System.out.println(result); }4.2.2 测试图片英文识别测试图片4.2.3 测试结果英文识别测试结果4.3 中英混合4.3.1 测试代码中英混合时需要使用中文字体库Test public void testChineseAndEnglish() throws TesseractException { long start System.currentTimeMillis(); ITesseract iTesseract new Tesseract(); // 设置字体库路径 iTesseract.setDatapath(tess4jConfiguration.getDataPath()); // 设置语言 iTesseract.setLanguage(tess4jConfiguration.getChineseTrainData()); File file new File(F:/HeiMaTouTiao/tessdata/ParagraphWithChineseAndEnglish.png); // 识别图片 String result iTesseract.doOCR(file); long end System.currentTimeMillis(); System.err.println(耗时 (end - start) ms); System.out.println(result); }4.3.2 测试图片中英混合测试图片4.3.3 测试结果中英混合测试结果5. 注意事项字体库文件的后缀必须是.traineddata前缀要与 Java 代码对应字体库文件命名 欢迎加入小哈的星球你将获得:专属的项目实战多个项目 / 1v1 提问 /Java 学习路线 /学习打卡 / 每月赠书 / 社群讨论新项目《Spring AI 项目实战》正在更新中..., 基于 Spring AI Spring Boot 3.x JDK 21;《从零手撸仿小红书微服务架构》 已完结基于 Spring Cloud Alibaba Spring Boot 3.x JDK 17..., 点击查看项目介绍演示地址http://116.62.199.48:7070/《从零手撸前后端分离博客项目全栈开发》2期已完结,演示链接http://116.62.199.48/;专栏阅读地址https://www.quanxiaoha.com/column截止目前累计输出 100w 字讲解图 4013 张还在持续爆肝中..后续还会上新更多项目目标是将 Java 领域典型的项目都整一波如秒杀系统, 在线商城, IM 即时通讯Spring Cloud Alibaba 等等戳我加入学习解锁全部项目已有4500小伙伴加入1. 我的私密学习小圈子从0到1手撸企业实战项目~ 2. 京东二面加索引时会锁表吗?修订版 3. Java中的5大AI框架 4. 同事一个比喻让我搞懂了 Docker 和 k8s 的核心概念最近面试BAT整理一份面试资料《Java面试BATJ通关手册》覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。 获取方式点“在看”关注公众号并回复 Java 领取更多内容陆续奉上。PS因公众号平台更改了推送规则如果不想错过内容记得读完点一下“在看”加个“星标”这样每次新文章推送才会第一时间出现在你的订阅列表里。 点“在看”支持小哈呀谢谢啦