1、简述
图片文字识别(Optical Character Recognition, OCR)是一项将图像中的文字转换为可编辑文本的技术。Tess4J 是 Tesseract OCR 引擎的一个 Java 封装,使其在 Java 应用程序中更易于使用。本文将介绍如何在 Spring Boot 项目中集成 Tess4J 实现图片文字识别。
GitHub:https://github.com/tesseract-ocr/tesseract.git
语言包GitHub:https://github.com/tesseract-ocr/tessdata.git
2、环境准备
- JDK:确保已安装 JDK 8 或更高版本。
- Maven:确保已安装 Maven,用于管理项目依赖。
- Spring Boot:使用 Spring Initializr 创建一个新的 Spring Boot 项目。
在项目的 pom.xml 文件中添加 Tess4J 的 Maven 依赖:
<dependency>
<groupId>net.sourceforge.tess4j</groupId>
<artifactId>tess4j</artifactId>
<version>5.4.0</version>
</dependency>
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>5.6.0</version>
</dependency>
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna-platform</artifactId>
<version>5.6.0</version>
</dependency>
3、下载 Tesseract OCR 引擎
tesseract-ocr目前训练的数据是放在tessdata文件夹下,后缀为traineddata文件,目前支持100多种语言。今天安装的为第三方支持的安装包。
https://github.com/UB-Mannheim/tesseract/wiki
到当前下载指定的版本,在window上进行安装:
安装完成将需要的语言包放在自己OCR安装目录tessdata下。
安装的软件可以直接使用tesseract.exe进行命令行执行文字识别。进入到exe存在的目录下。cmd进入到命命令执行框:
//官方
tesseract imagename outputbase [-l lang] [--oem ocrenginemode] [--psm pagesegmode] [configfiles...]
- imagename :图片的位置
- outputbase:输出的文件名字,不加后缀保存为txt格式
- -l lang:识别的语言类型,不加默认为英文,中文使用-l chi_sim,使用多种语言识别如 -l eng+deu
- –psm pagesegmode:参数
- –oem:使用识别的引擎,新版都是用 --oem 1(LSTM模式)
- configfiles: 可以执行输入的格式如 pdf, hocr ,tsv
4、编写图片文字识别代码
在项目中创建一个用于文字识别的服务类:
package com.example.springbootclient.service;
import net.sourceforge.tess4j.ITesseract;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;
import org.springframework.stereotype.Service;
import java.io.File;
@Service
public class OcrService {
public String recognizeText(File imageFile) {
ITesseract instance = new Tesseract();
instance.setDatapath("D:\\wlsoft\\Tesseract-OCR\\tessdata"); // 设置Tesseract的tessdata路径
instance.setLanguage("chi_sim"); // 设置识别语言
try {
return instance.doOCR(imageFile);
} catch (TesseractException e) {
e.printStackTrace();
return "Error: " + e.getMessage();
}
}
}
在 tessdata 目录下存放 Tesseract 的语言数据文件(如 chi_sim.traineddata),该目录应放置在项目的资源目录下。
5、编写控制器
创建一个控制器,用于处理上传的图片并调用 OCR 服务:
package com.example.springbootclient.controller;
import com.example.springbootclient.service.OcrService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
@RestController
@RequestMapping("/ocr")
public class OcrController {
@Autowired
private OcrService ocrService;
@PostMapping("/upload")
public ResponseEntity<String> uploadImage(@RequestParam("file") MultipartFile file) {
if (file.isEmpty()) {
return new ResponseEntity<>("File is empty", HttpStatus.BAD_REQUEST);
}
try {
// 将文件保存到本地
File convFile = new File(System.getProperty("java.io.tmpdir") + "/" + file.getOriginalFilename());
file.transferTo(convFile);
// 调用OCR服务识别文字
String result = ocrService.recognizeText(convFile);
return new ResponseEntity<>(result, HttpStatus.OK);
} catch (IOException e) {
return new ResponseEntity<>("File upload error: " + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
}
}
}
6、测试
启动 Spring Boot 应用,使用 Postman 或其他工具发送图片文件到 http://localhost:8080/ocr/upload 进行测试。以下是一个示例请求:
- 请求类型:POST
- URL:http://localhost:8080/ocr/upload
- 请求体:选择 form-data,键为 file,值为要上传的图片文件。
如果一切配置正确,服务器将返回识别出的文本。
7、总结
通过本文的介绍,我们学习了如何在 Spring Boot 项目中集成 Tess4J 实现图片文字识别。我们介绍了如何配置项目、添加依赖、下载和配置 Tesseract OCR 引擎,以及编写识别服务和控制器。希望本文能帮助你更好地理解和使用 OCR 技术,并将其应用到实际项目中。
如果有任何问题或建议,欢迎在下方留言讨论。
评论区