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识别
相关文章:
TesseractOCR安装及使用
1. 基本概念 1.1 Tesseract Tesseract 是一款基于 C 语言开发并开源的光学识别工具,提供底层的文字识别能力。 1.2 Tess4J Tess4J 是对 Tesseract OCR API 的 Java 封装,有了 Tess4J 之后 Java 就可以直接调用本地安装的 Tesseract 进行文字识别。 …...
npm安装指定版本,npm删除依赖,卸载依赖
安装指定版本 npm中安装指定的版本号,格式为 ‘包名版本号’ npm install 包名称版本号 --save 例如安装jquery: npm install jquery3.0.0 --save在package.json里面可以看到对应的包: "jquery": "^3.0.0"注意:已有…...
从代码到洞察:使用API接口深入分析商品详情数据
在电子商务的世界中,商品详情数据是企业做出明智决策的基石。API(应用程序编程接口)提供了一种强大的方式来获取这些数据,不仅可以简化数据获取过程,还可以为深入分析和业务洞察提供丰富的信息。本文将探讨如何使用API…...
数字旅游以科技创新为核心:推动旅游服务的智能化、精准化、个性化,为游客提供更加贴心、专业、高效的旅游服务
目录 一、引言 二、数字旅游以科技创新推动旅游服务智能化 1、智能化技术的应用 2、提升旅游服务的效率和质量 三、数字旅游以科技创新推动旅游服务精准化 1、精准化需求的识别与满足 2、精准化营销与推广 四、数字旅游以科技创新推动旅游服务个性化 1、个性化服务的创…...
HTTP深度指南:协议结构、请求方法与状态码
详解HTTP HTTP教程HTTP消息结构HTTP状态码HTTP和HTTPS HTTP教程 HTTP(超文本传输协议,HyperText Transfer Protocol)是一种用于分布式、协作式、超媒体信息系统的应用层协议。* HTTP是一个基于TCP/IP通信协议来传递数据的(HTML文…...
负载或反向代理服务器如何配置XFF以获取终端真实IP
文章目录 XFF介绍工作原理注意事项 配置方式1. Nginx2. HAProxy3. F5 BIG-IP4. Radware注意事项 本文介绍如何在反向代理或负载中配置XFF,方便后端服务获取请求来源的真实IP XFF介绍 X-Forwarded-For(简称XFF)是一个非标准的HTTP头部字段&a…...
Satellite Communications Symposium(WCSP2022)
1.Power Allocation for NOMA-Assisted Integrated Satellite-Aerial-Terrestrial Networks with Practical Constraints(具有实际约束的 NOMA 辅助天地一体化网络的功率分配) 摘要:天地一体化网络和非正交多址接入被认为是下一代网络的关键组成部分,为…...
docker学习笔记5:Docker Compose安装与使用
Docker Compose 简介 Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。它使用一个 YAML 文件来配置应用服务,这样可以通过一个简单的命令创建和启动所有服务。Docker Compose 主要面向开发环境、自动化测试环境和小型生产部署。 Docker Compose 的主要特…...
遇到螺纹连接过程中的软连接,怎么办?——SunTorque智能扭矩系统
智能扭矩系统-智能拧紧系统-扭矩自动控制系统-SunTorque 在螺纹连接过程中遇到软连接时,首先需要明确软连接的概念及其特点。软连接通常指的是在螺栓拧紧过程中,由于紧固件与被连接件之间的材料、表面状况或装配工艺等因素,导致拧紧力矩不能…...
Baidu Comate——AI时代的软件开发利器
目录 Comate产品介绍 1.产品背景 编辑 2.产品优势 3.产品特性 4. 支持开发环境及语言 5.使用场景 Comate产品体验 Comate场景应用 2.快捷键的使用 专业插件体验 1.行间注释 2. 代码优化 3.解释说明代码 4.调优建议 5.AutoWork Comate实测体验感受 Comate产品介绍…...
在家中访问一个网站的思考
在家中访问一个网站的思考 1、家庭网络简介2、家庭WLAN DHCP2.1、家庭路由器PPPOE拨号2.2、DHCP(动态主机配置协议)2.3、接入家庭网的主机IP地址2.4、家庭总线型以太网2.5、Mac地址2.6、ARP协议2.7、IP协议 & UDP/TCP协议2.8、NAT(Netwo…...
LINUX 入门 9
LINUX 入门 9 day11 20240507 耗时:120min 课程链接地址 第9章 百万并发的服务器 1 百万并发项目介绍与并发概念讲解 书接上回,把server做成并发量百万级的服务量 装4台虚拟机 vmware右下角可以设置虚拟机内存 内核 没敲,就看了一下&a…...
汇编个位数求和实验
title: 汇编求和实验 keywords: 汇编 tags: [汇编] categories: 嵌入式 汇编求和实验 刚开始学习汇编 给大家做个参考 实验 5 子程序 5.1 实验目的 ①掌握利用堆栈传递参数的子程序调用方法。 ②过程调用伪指令:PROC,ENDP,NEAR和FAR。 ③8088…...
CGAL在ubuntu下的安装及Hello World的测试
ubuntu下的安装 CGAL安装 参考地址:https://doc.cgal.org/latest/Manual/usage.html 在ubuntu下安装: sudo apt-get install libcgal-dev 安装后的路径: 注意安装这个步骤安装后,boost,CGAL,gmp,mpfr头文件都在/usr/include目录下。 boost,gmp,mpfr库文件都在/…...
VIM命令常用
一、启动vim 以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令。 在命令行窗口中输入以下命令即可 vim 直接启动vim vim filename 打开vim并创建名为filename的文件 二、文件命令 打开单个文件vim file同时打开多个文件vim file1 …...
STM32单片机实战开发笔记-I2C通讯总线【wulianjishu666】
嵌入式单片机开发实战例程合集: 链接:https://pan.baidu.com/s/11av8rV45dtHO0EHf8e_Q0Q?pwd28ab 提取码:28ab I2C模块测试 功能描述 I2C总线接口连接微控制器和串行I2C总线。它提供多主机功能,控制所有I2C总线特定的时序&am…...
区块链 | NFT 水印:Review on Watermarking Techniques(一)
🍍原文:Review on Watermarking Techniques Aiming Authentication of Digital Image Artistic Works Minted as NFTs into Blockchains 1 应用于 NFT 的水印技术 常见的水印技术类型可以分为: 可见 v i s i b l e \mathsf{visible} visi…...
Python设计模式 - 单例模式
定义 单例模式是一种创建型设计模式, 其主要目的是确保一个类只有一个实例, 并提供一个全局访问点来访问该实例。 结构 应用场景 资源管理:当需要共享某个资源时,例如数据库连接、线程池、日志对象等,可以使用单例模…...
AI日报:干翻AI PC!苹果M4芯片首发;GoEnhance可生成粘土风格视频;DeepSeek-V2模型已在魔搭社区开源
欢迎来到【AI日报】栏目!这里是你每天探索人工智能世界的指南,每天我们为你呈现AI领域的热点内容,聚焦开发者,助你洞悉技术趋势、了解创新AI产品应用。 新鲜AI产品点击了解:AIbase - 智能匹配最适合您的AI产品和网站 1、干翻AI …...
cmake进阶:目标属性
一. 简介 前面学习了 cmake 的一些目录属性,本文来学习 cmake的一些 目标属性。 目标属性,顾名思义就是目标对应的属性。 二. cmake进阶:目标属性 目标属性,顾名思义就是目标对应的属性。 cmake的所有目标属性可以通过如下网址…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
