Tess4j 简单尝试

本文介绍了如何使用Java库Tess4j进行OCR(光学字符识别)的基本操作,包括下载、依赖管理、语言包选择以及简单示例。作者探讨了Tess4j的优缺点,指出其适用于简单清晰图片的识别,并对比了与PaddleOCR的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 概述

1.1. 偶然刷到Java通过Tess4j实现OCR的例子。以前也断断续续看了一些OCR的文章,但总是浅尝辄止,从未上手尝试。如今看到Java版,终于实践了一次。这是本篇文章的由来。
1.2. Tess4j官网介绍:用于 Tesseract OCR API 的 Java JNA 包装器。简单概括:Tesseract是一个流行的开源ocr引擎,Tess4j进行了Java封装,然后我们就可以在Java程序中访问的使用Tesseract进行OCR操作了。
1.3. 简单尝试,不适合真实场景。

2. 实现步骤

2.1. 下载Tess4j

可以从官网下载源码包,也可以通过Maven引入。推荐方式当然是Maven引入,依赖如下:

<!-- https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j -->
<dependency>
    <groupId>net.sourceforge.tess4j</groupId>
    <artifactId>tess4j</artifactId>
    <version>5.10.0</version>
</dependency>

2.2. 下载语言包tessdata

2.3. 编码实现

  • 在项目根目录下新建目录tessdata,放入中英语言文件,如下图:
    项目结构

  • 编写测试代码,如下:

package xhp.ocr;

import net.sourceforge.tess4j.ITesseract;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;
import net.sourceforge.tess4j.util.ImageHelper;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

/**
 * OCR识别入口
 *
 * @Author xhp
 * @Date 2024/1/22 11:41
 **/
public class OcrMain {
    public static void main(String[] args) throws IOException {
        File imageFile = new File("F://Temp/20240123115455.png");
        BufferedImage image = ImageIO.read(imageFile);
        image = ImageHelper.convertImageToGrayscale(image);

        ITesseract instance = new Tesseract();
        // 设置语言文件路径
        instance.setDatapath("tessdata");
        // 设置语言
        instance.setLanguage("chi_sim");
        // 设置中文+英文混合语言
//        instance.setLanguage("eng+chi_sim");

        try {
            String result = instance.doOCR(image);
            System.out.println(result);
        } catch (TesseractException e) {
            System.err.println(e.getMessage());
        }
    }
}
  • 执行调试,可以顺利读取中文和英文图片。

3. 总结

3.1. 优点:实现比较简单。
3.2. 缺点:识别准确率受字体颜色、大小、清晰度、干扰度、扭曲、倾斜等度影响;对表格不能很好识别或无法定位还原表格列;
3.3. 适合读取简单清晰的图片。识别准确率可以通过自己训练数据来提高。当然真实项目场景里也不会这么简单,应该结合图片处理和更复杂的api去实现。
3.4. 对比了一下Paddle OCR,个人觉得Paddle更好点。但是本地部署麻烦了点,如果调用在线API又存在网络安全、价格等因素影响。所以,还需要具体问题具体分析。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值