TesseractOCR安装及使用

1. 基本概念

1.1 Tesseract

Tesseract 是一款基于 C 语言开发并开源的光学识别工具,提供底层的文字识别能力。

1.2 Tess4J

Tess4J 是对 Tesseract OCR API 的 Java 封装,有了 Tess4J 之后 Java 就可以直接调用本地安装的 Tesseract 进行文字识别。

2. 安装

2.1 Tesseract 安装

Tesseract 官方本身没有提供 Windows 的安装包,但是在他的官网上有一个第三方封装的安装包的链接。选择最新的 exe 文件进行安装就可以了,可以避开带有 dev 字样的包。下载完成后一路下一步就可以了。

2.2 Tesseract 环境变量配置

Tesseract 一共有两个环境变量需要配置

  • 在系统环境变量中的 Path 中添加 Tesseract 的安装目录,例如 c:\Tesseract-OCR
  • 在系统环境变量中添加一个新的变量,变量名为 TESSDATA_PREFIX,变量值为 Tesseract 安装目录下的 tessdata 目录的完整路径,例如 c:\Tesseract-OCR\tessdata

2.3 语言包安装

Tesseract 的安装包里自带的语言只有英文,如果需要用于识别中文需要自己下载语言包。语言包也可以在 Github 上下载,中文的语言包文件名为 chi_sim.traineddate,这其实是一个训练后的文件,但是对于我这样的新手来说 “语言包” 可能更好理解。

2.4 安装验证

安装完成后通过在控制台调用 Tesseract 来进行验证。

  • 在控制台输入 tesseract -v 命令,如果返回 Tesseract 的版本,说明安装和配置都成功了。
  • 在控制台输入 tesseract --list-langs 可以看到当前 Tesseract 已经安装的语言包。

3. TesseractOCR 使用

3.1 命令行使用

安装完 TesseractOCR 的安装之后可以使用命令行进行调用。

tesseract {img} {result} -l {lang}
  • img:需要识别的图片的完整路径,如 c:\1.png
  • result:识别结果保存的文件路径,如 c:\result.txt
  • lang:图片中的语言,就是语言包的前缀,如中文就是 chi_sim,英文就是 eng
    下面给出一个完整的样例。
tesseract c:\1.png c:\result.txt -l chi_sim

如果执行命令时提示 找不到命令不是内部命令,那就是环境变量没有配置对。

3.2 Tess4J 的使用

3.2.1 通过 Maven 引入包

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

3.2.2 编写测试代码

public static void main(String[] args) throws Exception {  
        Tess4jTest test = new Tess4jTest();  
        //创建ITesseract接口的实现实例对象  
        ITesseract iTesseract = new Tesseract();  
        //默认识别英文  
        //如果需要识别英文之外的语种,需要指定识别语种,并且需要将对应的语言包放进项目中  
        iTesseract.setLanguage("chi_sim+eng");  
  
        for (String fileName: test.getFileNames()) {  
            // 指定本地图片  
            File img = new File(test.getImgPath() + fileName);  
            //开始识别时间  
            long startTime = System.currentTimeMillis();  
            //识别结果  
            String ocrResult = iTesseract.doOCR(img);  
            // 输出识别结果  
            System.out.println("耗时:" + (System.currentTimeMillis() - startTime) + "ms");  
            System.out.println("识别结果: \n" + ocrResult );  
        }  
    }  
  
    public String getImgPath(){  
        return this.getClass().getClassLoader().getResource("").getPath() + "/test-img/";  
    }  
  
    public String[] getFileNames() {  
        return new String[]{"1.png"};  
    }

这里直接用本地图片进行测试,将图片放到项目中的 Resource 路径下的 test-img 目录下。这个 test-img 目录是要自己创建的。

3.2.3 遇到的问题

如果在执行代码过程中出现以下错误提示,说明环境变量没有设置,需要在系统环境变量中添加 TESSDATA_PREFIX,值是 TesseractOCR 安装目录下 tessdata 的路径。tessdata 目录是 TesseractOCR 的语言包目录。

SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
Error opening data file ./eng.traineddata
Please make sure the TESSDATA_PREFIX environment variable is set to your "tessdata" directory.
Failed loading language 'eng'
Tesseract couldn't load any languages!
Warning: Invalid resolution 0 dpi. Using 70 instead.
Exception in thread "main" java.lang.Error: Invalid memory access
	at com.sun.jna.Native.invokePointer(Native Method)
	at com.sun.jna.Function.invokePointer(Function.java:497)
	at com.sun.jna.Function.invoke(Function.java:441)
	at com.sun.jna.Function.invoke(Function.java:361)
	at com.sun.jna.Library$Handler.invoke(Library.java:265)
	at jdk.proxy2/jdk.proxy2.$Proxy2.TessBaseAPIGetUTF8Text(Unknown Source)
	at net.sourceforge.tess4j.Tesseract.getOCRText(Tesseract.java:517)
	at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:359)
	at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:228)
	at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:195)
	at test17.Tess4jTest.main(Tess4jTest.java:29)

4. 测试结果

4.1 识别率

Tesseract 在没有经过特殊训练的情况下,对简单图片的识别率还是可以的,但当图片变得复杂后几乎无法正常识别。这里的简单图片是指白底黑字,字是非手写的常用字体,并且排版工整。

4.2 性能

Tesseract 的识别性能比 PaddleOCR 稍强,但是差距不大,简单图片大约相差 100-200 ms。几乎可以忽略不计。

4.3 使用难度

Tesseract 在 Windows 上安装非常简单,使用第三方封装的安装包可以直接图形化界面安装。Tesseract 有多语言的 API 封装,对于开发来说就是调用 API,难度不大。但是如果要自己做训练就有一定的学习成本。

参考资料

Tesseract的Github
Tess4J的Github
Tesseract OCR V5.0安装教程(Windows)
Please make sure the TESSDATA_PREFIX environment variable is set to your “tessdata“ directory.
从头开始训练自己的 Tesseract 5 LSTM 识别库(超详细)
RAG 文件处理(2):图片字符的识别 tesseract-ocr、paddleocr、CnOCR
JAVA使用Tess4J进行ocr识别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值