当前位置: 首页 > news >正文

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 accessat 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识别

http://www.lryc.cn/news/343359.html

相关文章:

  • npm安装指定版本,npm删除依赖,卸载依赖
  • 从代码到洞察:使用API接口深入分析商品详情数据
  • 数字旅游以科技创新为核心:推动旅游服务的智能化、精准化、个性化,为游客提供更加贴心、专业、高效的旅游服务
  • HTTP深度指南:协议结构、请求方法与状态码
  • 负载或反向代理服务器如何配置XFF以获取终端真实IP
  • Satellite Communications Symposium(WCSP2022)
  • docker学习笔记5:Docker Compose安装与使用
  • 遇到螺纹连接过程中的软连接,怎么办?——SunTorque智能扭矩系统
  • Baidu Comate——AI时代的软件开发利器
  • 在家中访问一个网站的思考
  • LINUX 入门 9
  • 汇编个位数求和实验
  • CGAL在ubuntu下的安装及Hello World的测试
  • VIM命令常用
  • STM32单片机实战开发笔记-I2C通讯总线【wulianjishu666】
  • 区块链 | NFT 水印:Review on Watermarking Techniques(一)
  • Python设计模式 - 单例模式
  • AI日报:干翻AI PC!苹果M4芯片首发;GoEnhance可生成粘土风格视频;DeepSeek-V2模型已在魔搭社区开源
  • cmake进阶:目标属性
  • uniapp0基础编写安卓原生插件和调用第三方jar包和编写语音播报插件之使用jar包插件
  • 恢复数据,电脑数据恢复详细操作指南(4个方法)
  • make SGX_MODE=SW
  • 【毕业设计】基于微信小程序的校园快递平台系统设计与实现
  • SWAT模型【建模方法、实例应用、高级进阶技能】实践
  • 远动通讯屏功能和作用
  • Dashboard 安装部署
  • idea Maven 插件 项目多环境打包配置
  • 密室逃脱游戏-第12届蓝桥杯省赛Python真题精选
  • ES6-自学01
  • PyQt5批量生成Checkbox及批量检查Checkbox的勾选状态