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

Spring Boot 集成 tess4j 实现图片识别文本

前言

Tesseract 是世界上最知名、应用最广泛的开源 OCR 引擎。它由 Google 积极维护,功能强大,支持多种语言和平台。虽然它在处理理想条件下的印刷文本时表现出色,但其精度会受到图像质量和复杂性的影响。它通常作为核心引擎被集成到各种应用程序、脚本和更大型的系统中,是许多需要文本提取功能的项目的首选开源解决方案。

一、安装 tesseract (OCR)

安装链接:Index of /tesseract (uni-mannheim.de)

二、下载训练数据

通过网盘分享的文件:tessdata各语言集合包.zip
链接: https://pan.baidu.com/s/13oPR2r7qOE6lt6SgbpWOQA 提取码: uaaw 

三、创建springboot项目

 1、导入依赖

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

2、编写配置类

package com.songwp.config;import net.sourceforge.tess4j.Tesseract;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** @ClassName:TesseractOcrConfig* @Description: ocr配置类* @Author: songwp* @Date: 2025/6/29 19:24*/
@Configuration
public class TesseractOcrConfig {@Value("${tess4j.data-path}")private String dataPath;@Value("${tess4j.language}")private String language;@Beanpublic Tesseract tesseract() {Tesseract tesseract = new Tesseract();// 设置训练数据文件夹路径tesseract.setDatapath(dataPath);// 设置为中文简体tesseract.setLanguage(language);return tesseract;}
}

3、编写controller

package com.songwp.controller;import com.songwp.service.OcrService;
import lombok.extern.slf4j.Slf4j;
import net.sourceforge.tess4j.TesseractException;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;/*** @ClassName:OcrController* @Description: ocr识别controller* @Author: songwp* @Date: 2025/6/29 18:40*/
@RestController
@RequestMapping("/ocr")
@Slf4j
public class OcrController {private final OcrService ocrService;public OcrController(OcrService ocrService) {this.ocrService = ocrService;}@PostMapping(value = "/recognize", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)public String recognizeImage(@RequestParam("file") MultipartFile file) throws TesseractException, IOException {log.info(ocrService.recognizeText(file));// 调用OcrService中的方法进行文字识别return ocrService.recognizeText(file);}
}

5、编写service

package com.songwp.service;import net.sourceforge.tess4j.TesseractException;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;/*** @ClassName:OcrService* @Description: ocr识别接口* @Author: songwp* @Date: 2025/6/29 19:27*/
public interface OcrService {public String recognizeText(MultipartFile imageFile) throws IOException, TesseractException;
}

5、编写service实现类

package com.songwp.service.impl;import com.songwp.service.OcrService;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;/*** @ClassName:OcrServiceImpl* @Description: ocr识别实现类* @Author: songwp* @Date: 2025/6/29 19:28*/
@Service
public class OcrServiceImpl implements OcrService {private final Tesseract tesseract;public OcrServiceImpl(Tesseract tesseract) {this.tesseract = tesseract;}/**** @param imageFile 要识别的图片* @return*/@Overridepublic String recognizeText(MultipartFile imageFile) throws IOException, TesseractException {// 转换InputStream sbs = new ByteArrayInputStream(imageFile.getBytes());BufferedImage bufferedImage = ImageIO.read(sbs);// 对图片进行文字识别return tesseract.doOCR(bufferedImage);}
}

6、运行调试

 注:图片颜色比较多的时候有有点识别不清楚了以及一些带字体的文本

http://www.dtcms.com/a/262990.html

相关文章:

  • Springboot + vue + uni-app小程序web端全套家具商场
  • Serverless 架构入门与实战:AWS Lambda、Azure Functions、Cloudflare Workers 对比
  • 人工智能参与高考作文写作的实证研究
  • 华为物联网认证:开启万物互联的钥匙
  • 设计模式-观察者模式(发布订阅模式)
  • YOLOv12_ultralytics-8.3.145_2025_5_27部分代码阅读笔记-torch_utils.py
  • 现代JavaScript前端开发概念
  • spring-ai-alibaba官方 Playground 示例
  • 使用pyflink进行kafka实时数据消费
  • 电脑开机加速工具,优化启动项管理
  • 【Unity】MiniGame编辑器小游戏(七)贪吃蛇【Snake】
  • Java项目:基于SSM框架实现的云端学习管理系统【ssm+B/S架构+源码+数据库+毕业论文】
  • 离线环境安装elk及设置密码认证
  • 通过案例来了解let、const、var的区别
  • DAY 47 注意力热图可视化
  • 有些Android旧平台,在Settings菜单里的,设置-电池菜单下,没有电池使用数据,如何处理
  • RK3568平台开发系列讲解:HDMI显示驱动
  • 六自由度按摩机器人 MATLAB 仿真
  • HarmonyOS NEXT仓颉开发语言实战案例:电影App
  • Windows VMWare Centos Docker部署Nginx并配置对Springboot应用的访问代理
  • k8s一键部署tongweb7容器版脚本(by why+lqw)
  • 车辆工程中的压力传感技术:MEMS与薄膜传感器的实战应用
  • 22.安卓逆向2-frida hook技术-app使用非http协议抓不到包解决方式
  • Linux 安装使用教程
  • Pytest自动化测试框架入门?
  • Kafka 核心机制面试题--自问自答
  • 在Flutter中生成App Bundle并上架Google Play
  • 「Java EE开发指南」如何用MyEclipse创建一个WEB项目?(三)
  • 鸿蒙NEXT-鸿蒙三层架构搭建,嵌入HMRouter,实现便捷跳转,新手攻略。(2/3)
  • Flutter视频压缩插件video_compressffmpeg_kit_flutter_new