python tesseract-ocr + jTessBoxEditorFX 训练自定义字库

news2024/12/29 1:27:07

在使用tesseract-ocr进行字符识别时,我们使用了官方提供的字库,例如英文字库、中文字库,但这些字库并不一定能满足我们所有的需求。所以有些时候,我们就需要训练属于自己的自定义字库。废话少说,直接开干。

第一步:

tesseract-ocr 的安装略。 jTessBoxEditorFX的下载地址:
https://sourceforge.net/projects/vietocr/files/jTessBoxEditor/
解压后打开后大概这样子。
在这里插入图片描述

第二步:

创建一个文件夹,里面存放即将训练的图片。以我这边为例:
我放了一张图片: D/ocrtest/test.png
在这里插入图片描述

第三步:

打开jTessBoxEditorFX软件,在 Tools下,选择Merge TIFF,定位到训练图片文件夹下,选中所有训练图片,然后开始合并成为一张.tif格式的图片。
注意图片命名格式:字库名称.字体.exp0.tif
这边我的字库较 num 字体叫 font
在这里插入图片描述
成功后会弹出以下窗口,并在同目录下生成一张num.font.exp0.tif的图片。
在这里插入图片描述

第四步:

使用tesseract生成.box文件
CMD打开命令提示符,num.font.exp0.tif文件所在目录,执行以下命令:

tesseract num.font.exp0.tif num.font.exp0 –l eng batch.nochop makebox

在这里插入图片描述

执行后你会发现在训练图片同路径下,生成一份 num.font.exp0.box 文件
这时候你用 jTessBoxEditorFX 打开num.font.exp0.tif,就会自动导入box文件。
然后你要开始对识别不正确的字符进行边框调整,调整好之后保存起来。
在这里插入图片描述

第五步 :

手动在该训练图片所在文件夹下建立一个名为 “font_properties” 的文件,这个文件没有后缀名称,输入内容 “font 0 0 0 0 0” , 表示字体 font 的粗体、倾斜等共计5个属性全都设置为0
在这里插入图片描述

第六步:

使用tesseract生成num.font.exp0.tr训练文件,在命令提示符中输入:

tesseract num.font.exp0.tif num.font.exp0 nobatch box.train

在这里插入图片描述
此时,在该文件夹下已生成:num.font.exp0.tr文件。

第七步:

生成字符集文件,在命令提示符中输入:

unicharset_extractor num.font.exp0.box

在这里插入图片描述
此时你会在该文件夹下看到名为:unicharset的文件。
在这里插入图片描述

紧接着,需要生成数据字典

执行命令一:

mftraining -F font_properties -U unicharset -O num.unicharset num.font.exp0.tr

在这里插入图片描述
执行命令二:

cntraining num.font.exp0.tr

在这里插入图片描述
执行完这2条命令之后,你会在当前目录下生成 4 个文件(inttemp、pffmtable、normproto、shapetable),
然后,紧接着,你需要在这4个文件重命名,前面统一加上 字库名称.该文件名 以我这个为例,我的字库名称是num。所以这个文件重命名后分别命名为:
num.inttemp
num.pffmtable
num.normproto
num.shapetable

最后一步:

合并数据文件,生成字库文件,执行指令:

combine_tessdata num.

在这里插入图片描述
此时你会在同目录下,看到这个训练好的库文件
在这里插入图片描述
然后把库文件分别放到
C:\Program Files (x86)\Tesseract-OCR\tessdata下

D:\jTessBoxEditorFX\tesseract-ocr\tessdata下
(注意:以上这是我自己的路径,要自行核对自己的安装路径)

然后就可以使用自己的字库进行预测了:
1.查看字库是否存在,指令:tesseract --list-langs
在这里插入图片描述
2.字符集验证测试图片预测:

tesseract test.png out -l num

3.python 代码实现测试图片预测:

import pytesseract
from PIL import Image
import cv2 as cv
imgpath = 'D:/ocrtest/test.png'
img = cv.imread(imgpath,cv.IMREAD_COLOR)
msg = pytesseract.image_to_string(img,lang = 'num')
msg = msg.replace('', '')
print(msg)
msg = msg.replace('\n', '')

print(msg)
cv.imshow('t',img)
cv.waitKey(0)

参考:https://keras-lx.blog.csdn.net/article/details/90292350
https://blog.csdn.net/sylsjane/article/details/83751297

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/555405.html

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

相关文章

联想首次展示全栈算力方案服务,品牌换新亮相

1、联想算力,第一次真正被所有人感知。 2、基于软硬服一体化的优势,联想打造了丰富多样的四维算力服务,即融合化、场景化、订阅化、绿色化,可以满足不同企业、不同行业的定制化需求。 5月20日,主题为“联想方案服务&am…

2023中兴软件类笔试

1.下列Python代码:将近似输出什么? import numpy as np print np.sqrt(6*np.sum(1/np.arange(1,1000000, dtypenp.float)**2))这段代码是用来计算圆周率的巴塞尔问题(Basel problem)的近似值,输出结果将近似为3.14159…

使用SMTP协议发送邮件

剧情介绍 今天心血来潮,学了一下Python3,里面有个章节是发送邮件,用示例里面的代码,运行后报错,然后记录一下问题是如何解决的,大家可以看一下,可以有效避坑。 SMTP协议介绍 SMTP&#xff08…

Mysql数据库备份 一天一次 保存最新五天 每天凌晨三点备份

Mysql数据库备份 一天一次 保存最新五天 每天凌晨一点三十备份 步骤一 先查看 sudo systemctl status crond 是否存在 不存在执行下面代码 sudo yum install cronie sudo systemctl start crond sudo systemctl enable crond sudo systemctl status crond 步骤二 Cd /home …

从零开始 Spring Boot 33:Null-safety

从零开始 Spring Boot 33:Null-safety 图源:简书 (jianshu.com) Null-safety(null安全)实际上是Java这个“古老”语言的历史包袱,很多新的语言(比如go或kotlin)在诞生起就在语言层面提供对null…

软件测试需要学习什么?好学吗?需要学多久?到底是报班好还是自学好?

目录 前言: 【文章的末尾给大家留下了大量的福利哦。】 一:软件测试好学吗?需要学习多久? 二:那么选择软件测试行业有什么优势呢? 三:再来说说大家最关心的——软件测试人员的薪资怎么样? …

Spring : XML配置 JavaBean

文章目录 前言一、xml 加载 Bean 对象总结XML加载Bean对象 前言 跟着大佬走!!!! https://github.com/DerekYRC/mini-spring 提示:以下是本篇文章正文内容,下面案例可供参考 一、xml 加载 Bean 对象 大家先…

【C语言】数组名作函数参数

数组名作函数参数 引例思考例2通用性指针形参和数组形参几点说明 引例 在主函数中输入10个整数,并存入一个一维数组中;然后在被调函数中,将0号元素的值改为原值的10倍;最后在主函数中输出结果。 思路: 若想在被调函数…

10:00进去,10:05就出来了,这问的也太变态了···

从外包出来,没想到死在另一家厂子了。 自从加入这家公司,每天都在加班,钱倒是给的不少,所以也就忍了。没想到5月一纸通知,所有人不许加班,薪资直降30%,顿时有吃不起饭的赶脚。 好在有个兄弟内推…

SSM框架-SpringMVC

1. SpringMVC 1.1 Spring与Web环境集成 ApplicationContext应用上下文获取方式 应用上下文对象是通过new ClasspathXmlApplicationContext(spring配置文件) 方式获取的,但是每次从容器中获得Bean时都要编写new ClasspathXmlApplicationContext(spring配置文件) &…

ActiveMq消息队列

ActiveMq是一种开源的java程序&#xff0c;支持Java消息服务(JMS) 1.1 版本 一、持久化机制 1、KahaDB&#xff1a;5.4及之后版本&#xff0c;默认使用日志文件 activemq.xml默认使用KahaDB持久化存储&#xff0c;默认配置安装路径data目录下 <persistenceAdapter> …

Django框架之模板其他补充

本篇文章是对django框架模板内容的一些补充。包含注释、html转义和csrf内容。 目录 注释 单行注释 多行注释 HTML转义 Escape Safe Autoescape CSRF 防止csrf方式 表单中使用 ajax请求添加 注释 单行注释 语法&#xff1a;{# 注释内容 #} 示例&#xff1a; {# 注…

09 FPGA—利用状态机实现可乐售卖机(附代码)

1. 理论 FPGA 是并行执行的&#xff0c;如果我们想要处理具有前后顺序的事件&#xff0c;就需要引入状态机。举个例子&#xff0c;将人看成 FPGA ,我们可以在散步的时候听歌和聊天这是并行执行的&#xff0c;但一天的行程安排却是以时间段前后执行的。 状态机简写为 FSM&#…

java前后端分离有详细内容吗?

微服务架构java前后端分离都有哪些具体内容&#xff1f;目前&#xff0c;有不少客户朋友经常询问我们类似的问题。其实&#xff0c;在新的经济发展形势下&#xff0c;提质增效的低代码开发平台微服务架构早已成为不少新老客户的选择&#xff0c;它们不仅能提高办公协作效率&…

成为更优秀的项目经理:快速提升影响力的六大原则与独门秘笈

在很多公司的组织架构中&#xff0c;项目经理并不是一个常规的职能岗位&#xff0c;项目组是为了某个项目目标临时组建的团队&#xff01; 这就造成了PM一个很尴尬的处境&#xff0c;权、责、利不匹配&#xff0c;也就是有责无权&#xff1a;PM既要对项目目标的实现负责&#…

K8S内容分发网络之集群,nginx,负载均衡,防火墙

目录 第一章.实验架构需求 第二章.实验环境准备 2.1.节点准备 2.2.环境准备 2.3.在master&#xff0c;node01&#xff0c;node02上操作安装docker 2.4.所有节点安装kubeadm&#xff0c;kubelet和kubectl 2.5.部署K8S集群 2.6.在master节点操作 2.7.所有节点部署网络插件…

小白windows安装python(图文详解)

以下是在 Windows 操作系统上安装 Python 的详细步骤&#xff1a; 打开浏览器&#xff0c;进入 Python 官网&#xff08;https://www.python.org/&#xff09;。 点击“Downloads”&#xff0c;然后选择适合您的操作系统的 Python 版本。例如&#xff0c;如果您的操作系统是…

“Shell“firewall防火墙

文章目录 一.Firewalld防火墙1.1firewalld概述1.2Firewalld和iptables的关系1.3Firewalld和iptables的区别 二.Firewalld网络区域2.1区域介绍&#xff1a;2.2firewalld 区域的概念:2.3Firewalld数据处理流程2.4Firewalld检查数据包的源地址的规则&#xff1a; 三.Firewalld防火…

05 Android开机启动之SystemServer

Android开机启动之SystemServer(SS) 一、梳理SystemServer启动流程 从上面整个Android开机启动思维导图(android 5.0的启动组成图)中可以看到: SystemServer是从Zygote中启动的。 开机->bootloader->kernel->init->zygote->SystemServer 二、SystemServe…

【嵌入式烧录/刷写文件】-1.5-Fill填充Motorola S-record(S19/SREC/mot/SX)文件

案例背景(共8页精讲)&#xff1a;该篇将告诉你&#xff0c;如何对一个S19文件进行填充&#xff1a; 对“起始地址”和“结束地址”内的非连续的Block块&#xff0c;进行填充&#xff1b;自定义填充范围。 目录 1 为什么要“Fill填充” 2 使用Vector HexView工具“填充”S19…