很好操作!Java实现图片转文字

今天给大家分享一个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…[1]】

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

中文文字训练集下载

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

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

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

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

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

实现OCR

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

添加Maven依赖

<dependency>
    <groupId>net.sourceforge.tess4j</groupId>
    <artifactId>tess4j</artifactId>
    <version>4.5.1</version>
</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");

        
        

        return tesseract.doOCR(image);
    }

controller层的实现

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

@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项目。

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

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

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

更多文章,推荐公众号【程序员老J】

参考资料

[1]

https://github.com/UB-Mannheim/tesseract/wiki: https://link.juejin.cn/?target=https%3A%2F%2Fgithub.com%2FUB-Mannheim%2Ftesseract%2Fwiki

[2]

https://github.com/tesseract-ocr/tessdata: https://link.juejin.cn/?target=https%3A%2F%2Fgithub.com%2Ftesseract-ocr%2Ftessdata

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术小羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值