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.mzph.cn/bicheng/8283.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

408数据结构总结复习笔记一:线性表

408数据结构总结复习笔记一&#xff1a;线性表 从现在开始慢慢更新我的考研复习笔记系列吧~ PS&#xff1a;主要是我自己个人复习过程中觉得重点的点&#xff0c;大家仅供参考哈~ 上岸&#xff01;&#xff01;&#xff01;大家一起加油! 顺序表和链表的比较 顺序表链表存取…

前端GET请求下载后端返回数据流文件,并且处理window.open方法跳转白屏方法

平时常用导出都是用window.open方法 点击跳转连接&#xff1a;使用 window.open 下载 const downError 地址?&参数${参数|| }; const downError Url/xxx/xxx?&orgId${orgId || };window.open(downError, "_self");//调用window.open方法导出 而使用…

idea快捷键被占用,如何解决ctrl+\ 为例

本来这个这个快捷键ctrl\ 是只有restful 插件才生效的&#xff0c;但是idea升级了之后&#xff0c;多了个 AI Assistant 这样他也有个快捷键是这个&#xff0c; 所以 需要借助 settings - keymap - 直接找到右边的放大镜&#xff0c;可以输入快捷键查询 把ai 那个啥玩意…

从零手写实现 tomcat-04-请求和响应的抽象

创作缘由 平时使用 tomcat 等 web 服务器不可谓不多&#xff0c;但是一直一知半解。 于是想着自己实现一个简单版本&#xff0c;学习一下 tomcat 的精髓。 系列教程 从零手写实现 apache Tomcat-01-入门介绍 从零手写实现 apache Tomcat-02-web.xml 入门详细介绍 从零手写…

什么是香草看涨期权?香草看涨期权有哪些特点?

什么是香草看涨期权&#xff1f;香草看涨期权有哪些特点&#xff1f; 香草看涨期权&#xff0c;通常也称为香草期权&#xff0c;是金融市场上的一种金融衍生品&#xff0c;由券商或金融机构推出。它允许投资者以较小的费用获取相应股票市值的收益权&#xff0c;主要用于风险管…

Python爬虫获取豆瓣电影Top100

大家好&#xff0c;我是秋意零。 今天分析一篇&#xff0c;Python爬虫获取豆瓣电影Top100。 在此之前&#xff0c;我没有学习过爬虫&#xff0c;只有一丢丢的Python基础。下面效果的实现源码几乎没经过我&#xff0c;而是AI百老师。我主要负责了对应的调试以及根据我想要的功…

5月7号(信息差)

&#x1f30d;首次&#xff0c;西湖大学用蛋白质语言模型定向改造碱基编辑器&#xff0c;登Cell子刊 https://www.jiqizhixin.com/articles/2024-05-07-10 &#x1f384; 哈马斯宣布同意停火提议 https://finance.eastmoney.com/a/202405073067687785.html ✨ 中国将对…

吴恩达机器学习笔记:第 9 周-16推荐系统(Recommender Systems) 16.3-16.4

目录 第 9 周 16、 推荐系统(Recommender Systems)16.3 协同过滤16.4 协同过滤算法 第 9 周 16、 推荐系统(Recommender Systems) 16.3 协同过滤 在之前的基于内容的推荐系统中&#xff0c;对于每一部电影&#xff0c;我们都掌握了可用的特征&#xff0c;使用这些特征训练出了…

推荐网站(6)33台词,通过台词找电影、电视剧、纪录片等素材

今天推荐一个网站33台词&#xff0c;你可以根据电影、电视剧、纪录片等某一段台词&#xff0c;来找到来源&#xff0c;帮你精确到多少分多少秒出现的&#xff0c;非常的好用&#xff0c;尤其是对那种只记得一些经典台词&#xff0c;不知道是哪个电影的人来说&#xff0c;帮助巨…

1W 3KVDC 隔离 单输出 DC/DC 电源模块 ——TPF 系列

TPF系列提供输出稳压&#xff0c;精度高&#xff0c;对于输出电压有要求的场合特别适合&#xff0c;工业级环境温度&#xff0c;用于PCB安装的国际标准结构。此系列产品小巧&#xff0c;效率高&#xff0c;低输出纹波及提供3000V以上的直流电压隔离&#xff0c;封装有SIP和DIP可…

网络安全之DHCP详解

DHCP&#xff1a;Dynamic Host Configration Protocol 动态主机配置协议 某一协议的数据是基于UDP封装的&#xff0c;当它想确保自己的可靠性时&#xff0c;这个协议要么选确认重传机制&#xff0c;要么选周期性传输。 DHCP是确认重传&#xff0c;【UDP|DHCP】,当DHCP分配完地…

零售全渠道营销业务链分析,让企业管控能力大幅加强!

对于传统的、规模化的零售快消企业来讲&#xff0c;面临着很大的渠道管理和建设问题&#xff0c;如何尽快实现整个营销体系的全渠道数字化转型是当务之急、重中之重。 面对错综分散的经销商&#xff0c;零售快消企业订货流程会越复杂&#xff0c;加之对门店管理较为粗放&#…

工业镜头助力锂电制造业精准检测

在电动汽车、电动轻型车、电动工具、消费电子和新型储能等行业大发展的背景下&#xff0c;锂电池综合优势与下游领域对电池大容量、高功率、使用寿命和环境保护日益提升的需求相契合&#xff0c;存在广阔的市场应用前景。受益于动力、消费和储能三大细分领域的快速发展&#xf…

spark history server异常

现象&#xff1a;spark 日志文件突然新增了很多.hprof文件&#xff0c; 查找日志spark配置参数spark_log_dir进入日志目录&#xff1a; 查看historyServer日志&#xff1a; Spark Command: /usr/lib/jvm/java-1.8.0/bin/java -cp /opt/apps/JINDOSDK/jindosdk-current/lib/*:/…

libcity 笔记:支持的模型

1 支持的模型 1.1 traffic_state_pred HA历史平均值&#xff0c;将历史流量建模为季节性过程&#xff0c;然后使用前几个季节的加权平均值作为预测值。VAR向量自回归SVR支持向量回归ARIMAAutoEncoderSeq2Seq采用基于门控循环单元的编码器-解码器框架&#xff0c;进行多步预测…

C++奇迹之旅:string类对象的修改操作

文章目录 &#x1f4dd;string类的常用接口&#x1f320; string类对象的修改操作&#x1f309;push_back&#x1f309;append&#x1f309;operator&#x1f309;insert&#x1f309;erase&#x1f309;replace&#x1f309; find&#x1f309; c_str &#x1f320;测试string…

大数据时代,如何准确查询并解读大数据信用报告?

在互联网时代&#xff0c;个人信息的安全和隐私保护愈发受到人们的关注。随着大数据技术的不断发展&#xff0c;越来越多的人开始关心自己的大数据报告。那么&#xff0c;如何找一个靠谱的地方查询个人大数据报告呢?本文将为您详细解答。 一、先了解大数据报告的含义 首先&…

四、 现行数据出境制度下的三条合规路径是什么?如何判断?

综合《网络安全法》《数据安全法》以及《个人信息保护法》这三大数据合规基本法律要求来看&#xff0c;企业开展数据出境活动时&#xff0c;应结合自身的主体类型、出境数据类型和数量&#xff0c;综合判断是否须要额外&#xff08;1&#xff09;申报并通过数据出境安全评估&am…

ASIL详解

概念 随着汽车新四化的发展&#xff0c;整车E/E系统的复杂性也不断增加&#xff0c;功能安全正成为一种更主流的要求。汽车安全完整性等级&#xff08;ASIL&#xff09;分解为实现更高水平的诊断覆盖度提供了可靠而稳健的途径&#xff0c;并在开发具有更高ASIL等级的安全关键系…

HDMI2.0一分四的方案 推荐使用教程如下:

符合HDMI2.0b和HDCP2.2标准 向后兼容HDMI1.4、HDCP1.X标准 支持RGB和YCbCr 444/422/420格式 支持CSC&#xff08;颜色空间转换&#xff09;矩阵和420/422/444转换&#xff08;1:1&#xff1b; 1:2&#xff1b;2:1&#xff09; 在传统显示器上&#xff0c;支持4:1向下缩放4K…