Tesseract 4.0训练字库并且识别训练后的图片
各个工具下载链接在文章底部!
重要!!自己先创建一个空文件夹(名字随意),用来保存训练后的模型 ,还需要在里面创建一个 名称为tessdata 的文件夹 ,必须叫这个名
可以先使用下载后的进行测试训练(只需要把java文件里面的文件路径更换为你自己下载包的存储路径),图片必须使用下载包里面的图片,因为是训练的是下载包里面的图片\color{#2111f1}可以先使用下载后的进行测试训练(只需要把java文件里面的文件路径更换为你自己下载包的存储路径),图片必须使用下载包里面的图片,因为是训练的是下载包里面的图片可以先使用下载后的进行测试训练(只需要把java文件里面的文件路径更换为你自己下载包的存储路径),图片必须使用下载包里面的图片,因为是训练的是下载包里面的图片
1、运行tesseract−ocr−w64−setup−v4.0.0.20181030.exe文件,安装完之后,配置系统环境变量(最基本就不叙述了)\color{#21a2f1}1、 运行tesseract-ocr-w64-setup-v4.0.0.20181030.exe 文件,安装完之后,配置系统环境变量(最基本就不叙述了)1、运行tesseract−ocr−w64−setup−v4.0.0.20181030.exe文件,安装完之后,配置系统环境变量(最基本就不叙述了)
D:\Program Files (x86)\Tesseract-OCR 只是我配置的路径,就是安装的根路径
在后面用来生成.box文件
2、使用jTessBoxEditor生成训练样本的的合并tif图片(图片是已经准备好的,亦可以自己准备)\color{#21a2f1}2、使用jTessBoxEditor生成训练样本的的合并tif图片 (图片是已经准备好的,亦可以自己准备)2、使用jTessBoxEditor生成训练样本的的合并tif图片(图片是已经准备好的,亦可以自己准备)
-
打开jTessBoxEditor,选择Tools->Merge TIFF,进入训练样本所在文件夹,选中要参与训练的样本图片:
-
点击 “打开” 后弹出保存对话框,选择保存在当前路径下,文件命名为 “zwp.test.exp0.tif” ,格式只有一种 “TIFF” 可选。
-
注意:tif文面命名格式[lang].[fontname].exp[num].tif
lang是语言,fontname是字体,num为自定义数字。
比如我们要训练自定义字库 zwp,字体名test,那么我们把图片文件命名为 zwp.test.exp0.tif
3、使用tesseract生成.box文件\color{#21a2f1}3、使用tesseract生成.box文件3、使用tesseract生成.box文件
在上一步骤生成的“zwp.test.exp0.tif”文件所在目录下打开命令行程序,执行下面命令,执行完之后会生成zwp.test.exp0.box文件。
执行如下命令 tesseract zwp.test.exp0.tif zwp.test.exp0 batch.nochop makebox
4、使用jTessBoxEditor矫正.box文件的错误\color{#21a2f1}4、使用jTessBoxEditor矫正.box文件的错误4、使用jTessBoxEditor矫正.box文件的错误
.box文件记录了每个字符在图片上的位置和识别出的内容,因为识别出的内容和位置有可能把两个字合到一起或者把一个字拆分了,所以训练前需要使用jTessBoxEditor调整字符的位置和内容。
使用步骤:
打开jTessBoxEditor点击Box Editor ->Open,打开步骤2中生成的“zwp.test.exp0.tif”,会自动关联到“zwp.test.exp0.box”文件,这两文件要求在同一目录下。调整完点击“save”保存修改。
5、生成fontproperties文件:\color{#21a2f1}5、生成font_properties文件:5、生成fontproperties文件:
-
执行如下命令: echo test 0 0 0 0 0 >font_properties
-
也可以手工新建一个名为font_properties的文本文件,输入内容 “test 0 0 0 0 0” 表示字体test的粗体、倾斜等共计5个属性。这里的“test”必须与“zwp.test.exp0.box”中的“test”名称一致。
6、使用tesseract生成.tr训练文件\color{#21a2f1}6、使用tesseract生成.tr训练文件6、使用tesseract生成.tr训练文件
执行下面命令,执行完之后,会在当前目录生成zwp.test.exp0.tr文件。
执行如下命令 tesseract zwp.test.exp0.tif zwp.test.exp0 nobatch box.train
7、生成字符集文件\color{#21a2f1}7、生成字符集文件7、生成字符集文件
执行下面命令:执行完之后会在当前目录生成一个名为“unicharset”的文件。
执行命令 unicharset_extractor zwp.test.exp0.box
8、生成shape文件\color{#21a2f1}8、生成shape文件8、生成shape文件
执行下面命令,执行完之后,会生成 shapetable 和 zwp.unicharset 两个文件。
执行命令 shapeclustering -F font_properties -U unicharset -O zwp.unicharset zwp.test.exp0.tr
9、生成聚字符特征文件\color{#21a2f1}9、生成聚字符特征文件9、生成聚字符特征文件
执行下面命令,会生成 inttemp、pffmtable、shapetable和zwp.unicharset四个文件。
执行命令 mftraining -F font_properties -U unicharset -O zwp.unicharset zwp.test.exp0.tr
10、生成字符正常化特征文件\color{#21a2f1}10、生成字符正常化特征文件10、生成字符正常化特征文件
执行下面命令,会生成 normproto 文件。
执行命令: cntraining zwp.test.exp0.tr
11、文件重命名\color{#21a2f1}11、文件重命名11、文件重命名
重新命名inttemp、pffmtable、shapetable和normproto这四个文件的名字为[lang].xxx。
这里修改为zwp.inttemp、zwp.pffmtable、zwp.shapetable和zwp.normproto
依次执行下面命令rename normproto zwp.normprotorename inttemp zwp.inttemprename pffmtable zwp.pffmtablerename shapetable zwp.shapetable
11、合并训练文件\color{#21a2f1}11、合并训练文件11、合并训练文件
执行下面命令,会生成zwp.traineddata文件。
执行命令 combine_tessdata zwp.
将生成的“zwp.traineddata”语言包文件复制到 新建文件夹 目录下的tessdata文件夹中,就可以使用训练生成的语言包进行图像文字识别了。
12、代码测试\color{#21a2f1}12、代码测试12、代码测试
- 在pom中引入依赖
<!-- pom tess4j相关依赖 --><dependency><groupId>net.sourceforge.tess4j</groupId><artifactId>tess4j</artifactId><version>3.4.0</version><exclusions><exclusion><groupId>com.sun.jna</groupId><artifactId>jna</artifactId></exclusion></exclusions></dependency>
- 代码
public class Main {public static void main(String[] args) {System.out.println("Hello world!");//你的图片 1.png 为我自定义图片名字 其实使用的就是 上面的测试图片File imageFile = new File("D:\\OCR\\1.png");//你训练库的路径tessdataITesseract instance = new Tesseract();// 模型文件夹必须叫做 tessdatainstance.setDatapath("D:\\OCR\\Test2\\tessdata");
// zwp 是刚刚训练过的 包instance.setLanguage("zwp");
// chi_sim 是自带的中文包
// instance.setLanguage("chi_sim");String result = null;try {result = instance.doOCR(imageFile);} catch (TesseractException e) {throw new RuntimeException(e);}System.out.println(result);}
}
如果网络不行可以下载源码文件进行操作
demo源码
用于配置环境变量,生成.box文件
tesseract-ocr官网
用于调整图片上文字的内容和位置
jTessBoxEditor工具官网
用于设置语言包 (instance.setLanguage)
其他语言包地址
相关文章:
Tesseract 4.0训练字库并且识别训练后的图片
各个工具下载链接在文章底部! 重要!!自己先创建一个空文件夹(名字随意),用来保存训练后的模型 ,还需要在里面创建一个 名称为tessdata 的文件夹 ,必须叫这个名 可以先使用下载后的进行测试训练(只需要把ja…...
ChatGPT热潮背后,金融行业大模型应用路在何方?——金融行业大模型应用探索
ChatGPT近两个月以来不断引爆热点,对人工智能应用发展的热潮前所未有地高涨,ChatGPT所代表的大模型在语义理解、多轮交互、内容生成中所展现的突出能力令人惊喜。而人工智能技术在金融行业的落地应用仍然面临挑战,虽然已经让大量宝贵的人力从…...
【怎么预防sql注入,以及还有预防其他的什么网络攻击】
SQL注入是一种常见的Web攻击,通过在Web应用程序中注入恶意SQL语句来获取或修改数据库中的数据。为了防止SQL注入,开发者可以采取以下措施: 1、使用参数化查询(Prepared Statement)或存储过程(Stored Proce…...
2023年全国最新机动车签字授权人精选真题及答案4
百分百题库提供机动车签字授权人考试试题、机动车签字授权人考试预测题、机动车签字授权人考试真题、机动车签字授权人证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 11.使用转化炉原理测量氮氧化物的排气分析仪进行排气污…...
【Java】用记事本实现“HelloWorld”输出
【在进行以下操作前需要下载好JDK并配置好对应的环境变量】 一、在任意文件夹中创建一个新的文本文档文件并写入以下代码 public class Hello{public static void main (String[] args){System.out.print("Hello,World!");} } 二、修改文件名称及文件类型为 Hello.j…...
我希望早点知道的关于成长的建议
人上了年纪,往往在诸如更加闭塞,更加固执这些缺点之外,再多出来一个缺点:那就是动不动就爱给别人建议。我当然也未能免俗。有时候会听到同样悲观且固执的过来人告诉我,这些建议说了和没说效果都一样,人们在…...
【哈希表】使用方法总结
1. uthash简介开源的第三方头文件,这只是一个头文件:uthash.h。uthash还包括三个额外的头文件,主要提供链表,动态数组和字符串。utlist.h为C结构提供了链接列表宏。utarray.h使用宏实现动态数组。utstring.h实现基本的动态字符串。…...
【笑小枫-面试篇】Java基础面试题整理,努力做全网最全
写在前面 或许你只是想白嫖内容,或许你也会忽略这段文字,但我还是想弱弱的说 题目整理耗费了大量精力,希望可以给博主点赞收藏,谢谢大家啦 我呢,笑小枫,一个努力的普通人,也希望可以花1秒钟记住…...
亚马逊短期疲软,但长期前景乐观
来源:猛兽财经 作者:猛兽财经 由于投资者对亚马逊(AMZN)前景的担忧,导致该公司的股价在过去一年中下跌了39%。然而猛兽财经认为亚马逊近期面临的不利因素只是暂时的,该公司还是有充分的条件可以在医疗保健和物流领域获得重大增长机…...
webgis高德地图
webgis高德地图 首先准备工作,注册一个高德地图账号,然后在创建一个新应用生一个key跟appId 高德开放平台 接着创建一个html页面 高德配置手册 <style>* {margin: 0;padding: 0;}#...
django项目实战十(django+bootstrap实现增删改查)进阶数据统计
目录 一、echarts 1、下载 2、配置 二、实现统计分析页面--架构和柱图 1、url 2、chart.py 3、chart_list.html 4、修改url 5、新增chart_bar方法 6、修改chart_list.html 四、饼图 1、url 2、视图chart.py新增 3、修改chart_list.html 五、折线图 1、url 2、char…...
【布隆过滤器(Bloom Filter)基本概念与原理、Bloom Filter优点与缺点、以及应用场景】
布隆过滤器(Bloom Filter)基本概念与原理、Bloom Filter优点与缺点、以及应用场景 Bloom Filter 基本概念 布隆过滤器是1970年由一个叫布隆的小伙子提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在…...
unity的Rendertexture上面显示粒子特效最便捷的解决方案
一、为什么不显示 1.为什么粒子特效也不显示? 不显示是正常的,因为当前为背景的点设置为A为0时已经被剔除,当前位置粒子特效的颜色也会被剔除。 因为clip发生在融合blend之前,blend发生在所有颜色输出之后的帧缓存。 2.为什么NGUI的Unlit/Premultiplied Colored的shade…...
Docker 查询、停止、删除和重启容器
docker 列出所有容器IDdocker ps -aq[rootlocalhost conf]# docker ps -aq f81aa5f48427 06a66409d7ce 1c3d38b948ba 62233dfad35b 4b0032878886 0f6f368c4c1d 7d98a59a8012 1906ba6bfbe1 [rootlocalhost conf]#docker 查看所有运行容器docker ps -a[rootlocalhost conf]# dock…...
面试历程(3)
1、HashMap为什么要使用红黑树,不能使用平衡二叉树(AVL树) 二叉查找树具有的特性: 左子树上所有结点的值均小于或等于它的根结点的值。右子树上所有结点的值均大于或等于它的根结点的值。左、右子树也分别为二叉排序树。AVL树是严格平衡二叉树(左右两个子树的高度差的绝对…...
【storybook】你需要一款能在独立环境下开发组件并生成可视化控件文档的框架吗?(二)
storybook回顾继续说说用法配置文件介绍回顾 上篇博客地址: https://blog.csdn.net/tuzi007a/article/details/129192502说了部分用法。 继续说说用法 配置文件介绍 开发环境的配置都在.storybook目录中,里面包含了2个文件 main.js preview.js先看m…...
(免费分享)基于ssm的BBS社区论坛系统带论文
项目描述前台部分:1.用户注册登录模块用户登录后,可以进行发帖回帖功能,在线签到功能,完善个人信息,添加好友,收藏贴子,评论帖子,点赞功能,记录功能(比如记录今天发生的事情)等等…2.排行榜模块1.帖子讨论热度排行,分两种排行方式:(1) 根据用户今日发出的帖子被回复数量进行排名…...
RebbitMQ 消息队列(简单使用)
消息队列介绍 MQ的优势 1.业务解耦:不同系统消费信息互不关联,灵活增减系统数量,修改某个系统其他系统也不影响 2.异步提速:不同系统之间可同时响应,提升并发量 3.削峰填谷:处理消息高峰期,均摊…...
OpenCV-Python学习(21)—— OpenCV 图像几何变换之图像翻转(cv.flip、np.flip)
1. 学习目标 学习 OpenCV 图像的翻转函数 cv.flip;学习 NumPy 矩阵的反转函数 np.flip;自己实现矩阵反转的函数。 2. OpenCV 翻转 翻转也称镜像,是指将图像沿轴线进行轴对称变换。水平镜像是将图像沿垂直中轴线进行左右翻转,垂直…...
CRM系统能帮外贸行业解决哪些问题
国内的外贸行业经历了四个发展阶段,从发展期到繁荣期,CRM客户管理系统逐步走到幕前,成为外贸企业必不可少的主打工具。那么外贸行业整面临哪些问题?该如何解决?下面我们就来说说适合外贸行业的CRM解决方案。 外贸行业…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
