具体实现是把tess4j整合到一个SpringBoot项目中。
下面是详细步骤
在实现OCR之前,先要分清楚Tesseract和Tess4j的区别。
Tesseract是一个开源的光学字符识别(OCR)引擎,它可以将图像中的文字转换为计算机可读的文本。支持多种语言和书面语言,并且可以在命令行中执行。它是一个流行的开源OCR工具,可以在许多不同的操作系统上运行。
Tess4J是一个基于Tesseract OCR引擎的Java接口,可以用来识别图像中的文本,说白了,就是封装了它的API,让Java可以直接调用。
根据上面介绍的,Tess4j只是提供OCR的Java接口,真正OCR的Tesseract引擎。所以我们得先下载对应系统的Tesseract引擎(这里我以Windows版本为例)。
下载地址【github.com/UB-Mannheim…】

下载完成之后选择安装路径,默认安装即可。
Tesseract引擎默认是无法识别中文的,只能识别数字或者英文。如果我们想实现中文的识别就得去下载对应的训练集。
下载地址【github.com/tesseract-o…】

我们可以看到Tesseract提供了很多语言的训练集,这里我们选择简体中文chi_sim。
然后将训练集放到Tesseract引擎对应的目录下,如下所示,tessdata文件夹是专门用来放训练集的。

到此为止,我们的环境准备工作已经完成了。
首先新建一个SpringBoot项目,由于是提供api接口,所以勾选spring web。


添加Maven依赖

- <dependency>
- <groupId>net.sourceforge.tess4jgroupId>
- <artifactId>tess4jartifactId>
- <version>4.5.1version>
- dependency>
service层的实现
代码如下。
ps:如果我们想实现多语言识别,只需要在设置原因的时候将语言类型拼接起来。

- @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

- @RestController
- @RequestMapping("/api/ocr")
- public class OcrController {
-
- @Autowired
- private OcrService ocrService;
-
- @PostMapping("/recognize")
- public ResponseEntity
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项目。

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

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


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