Windows上基于Tesseract OCR5.0官方语言库的LSTM字库训练

系列文章目录

Tesseract OCR引擎


文章目录

  • 系列文章目录
  • 前言
  • 一、LSTM字库训练是什么?
  • 二、使用步骤
    • 1. 环境准备
      • 1.1下载Tesseract 程序并安装
      • 1.2下载Tesseract 训练字库
      • 1.3下载工具jTessBoxEditor
    • 2. LSTM训练
      • 2.1 将要训练的图片(jpg/tif)合并成一个文件
      • 2.2 生成box文件
        • 2.2.1 通过命令生成box文件
      • 2.3 字符校正
      • 2.3 生成.lstmf文件
      • 2.4 根据官方的.traineddata中提取.lstm文件
      • 2.5 创建训练用的.txt文件
      • 2.6 训练
      • 2.7 生成新的语言库
      • 2.8 检验


前言

TesseractOCR官方提供了训练好的标准语言包(traineddata文件,涵盖多国语言,每个语言一个库文件)。某些特定文字(LED灯的数字等)在官方语言库识别效果不好的情况下,还可以自己训练语言库。本文讲述基于官方语言库的LSTM字库训练方法和步骤。


一、LSTM字库训练是什么?

LSTM字库训练是指使用长短期记忆(LSTM)神经网络模型对特定文本或字符集进行训练,以识别和分类其中的字符或单词。通过训练,LSTM模型可以学习到文本的内在特征和模式,从而在给定的文本数据集上提高OCR识别的准确率。

在训练过程中,LSTM模型将文本数据作为输入,通过反向传播算法不断调整模型的参数,以最小化预测错误。训练的目标是使得模型能够正确识别并输出给定文本中的每个字符或单词。一旦训练完成,就可以将训练好的模型应用于新的文本数据,实现高效的OCR识别。

总之,LSTM字库训练是指使用LSTM模型对特定文本集进行训练,以提高OCR识别的准确率。

二、使用步骤

1. 环境准备

1.1下载Tesseract 程序并安装

官方没有最新的window安装程序。不过官网上有提供第三方的下载渠道。
有64位和32位的版本,根据需要下载最新的版本并安装。
安装完成需把安装目录添加到环境变量。默认安装目录(C:\Program Files (x86)\Tesseract-OCR)

官方下载文档:https://tesseract-ocr.github.io/tessdoc/Downloads.html
官方推荐下载渠道:https://digi.bib.uni-mannheim.de/tesseract/


1.2下载Tesseract 训练字库

用LSTM训练字库的话,一定要用 tessdata_best 字库。需要哪个语言,下载哪个语言库。
比如中文简体是chi_sim.traineddata;英语是eng.traineddata
官方下载地址


1.3下载工具jTessBoxEditor

网址:https://sourceforge.net/projects/vietocr/files/jTessBoxEditor/
下载后将之解压缩到C盘某个目录,这个工具是用来训练样本用的(错误标注并更正)。

该工具是用Java开发的,需要安装jdk环境
网址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

2. LSTM训练

2.1 将要训练的图片(jpg/tif)合并成一个文件

打开jTessBoxEditor解压缩的目录,双击执行jTessBoxEditorFX.jar或者train.bat
窗口打开后,工具栏上依次Tools->Merge Tiff ,选中需要训练的图片,指定目录和命名合成后的文件。合成后,会弹出如下Msg提示合并成功。然后检查指定目录下是否生成了合并好的tif文件(保存多种图片的信息)。
在这里插入图片描述

目录:C:\Users\shen_pengfei.pfu\Desktop\LSTMTrain
合成文件:eng.normal.exp1.list.tif

2.2 生成box文件

2.2.1 通过命令生成box文件

在合并后的tif文件所在目录启动cmd,输入以下命令,生成box文件eng.normal.exp1.list.box(保存图像中文字的位置信息,比如坐标、宽、高等)。
box 文件名和tif 文件名需要一致,且位于同一目录

tesseract eng.normal.exp1.list.tif eng.normal.exp1.list -l eng lstmbox

命令格式:tesseract tif filename.tif box filenam -l lang lstmbox

在这里插入图片描述

2.3 字符校正

打开jTessBoxEditor工具,然后依次Box Editor->Open,选择eng.normal.exp1.list.tif文件,右边显示原稿识别的区域,以行位单位;坐边对应识别的结果,以字符位单位。在左边区域依次对识别错误的每个字符进行校正,同时如果有减少或增加的字符,也要在左边区域进行相应的增加或删除。
在这里插入图片描述
比如红色框选的地方,***识别成了BX,既识别错误,也减少了一个字符。校正后,首先更改位正确字符,同时追加一个字符。
注意追加字符的时候,相应的坐标也要更改
在这里插入图片描述
一页的内容都校正完后,保存本页更改。然后点击下一页(黄色框选)继续校正。

2.3 生成.lstmf文件

在合并后的tif文件和box文件所在目录启动cmd,输入以下命令,生成eng.normal.exp1.list.lstmf文件用于训练。

tesseract eng.normal.exp1.list.tif eng.normal.exp1.list -l eng --psm 6 lstm.train

命令格式 tesseract ‘tif filename’.tif lstmf filename -l lang分割模式 lstm.train

在这里插入图片描述

分割模式汇总,尝试不同分割模式,精度有差异。

0    Orientation and script detection (OSD) only.
1    Automatic page segmentation with OSD.
2    Automatic page segmentation, but no OSD, or OCR.
3    Fully automatic page segmentation, but no OSD. (Default)
4    Assume a single column of text of variable sizes.
5    Assume a single uniform block of vertically aligned text.
6    Assume a single uniform block of text.
7    Treat the image as a single text line.
8    Treat the image as a single word.
9    Treat the image as a single word in a circle.
10    Treat the image as a single character.
11    Sparse text. Find as much text as possible in no particular order.
12    Sparse text with OSD.
13    Raw line. Treat the image as a single text line,

2.4 根据官方的.traineddata中提取.lstm文件

将官方的traineddata文件复制到tif同目录,在该目录启动cmd,输入以下命令,生成.lstmf文件。我这里是用eng.traineddata生成eng.lstmf

combine_tessdata -e eng.traineddata eng.lstm

注意:如果需要其他语言包,请自行下载。

2.5 创建训练用的.txt文件

在tif同目录下创建eng.training.path.txt文件,里面内容是.lstmf文件的完整路径。

在这里插入图片描述

2.6 训练

在tif同目录下创建output子目录。然后该目录cmd,输入以下命令,进行训练。此步比较耗时,耐心等待。最好会在output文件夹下生成一堆checkpoint文件。

lstmtraining --model_output=“C:\Users\xxxx\Desktop\LSTMTrain\output”
–continue_from=“C:\Users\xxxx\Desktop\LSTMTrain\eng.lstm” --train_listfile=“C:\Users\xxxx\Desktop\LSTMTrain\eng.training.path.txt”
–traineddata=“C:\Users\xxxx\Desktop\LSTMTrain\eng.traineddata” --debug_interval -1 --max_iterations 800

参数含义:
–model_output 指定训练输出路径
–continue_from 训练base,这里指定 eng.lstm文件
–train_listfile 指定上一步创建的文件的路径
–traineddata 指定.traineddata文件的路径
–debug_interval 当值为-1时,训练结束,会显示训练的一些结果参数
–max_iterations 指定训练遍历次数

在这里插入图片描述

2.7 生成新的语言库

输入以下命令,将checkpoint文件和.traineddata文件合并成新的.traineddata文件

eddata=“C:\Users\xxxx\Desktop\LSTMTrain\eng.traineddata”
–model_output=“C:\Users\xxxx\Desktop\LSTMTrain\output\engtrain.traineddata”

参数含义:
–stop_training 默认要有的
–continue_from output_checkpoint文件路径
–traineddata 官方的.traineddata文件的路径
–model_output 新的.traineddata 输出的路径

在这里插入图片描述

2.8 检验

用新生成的engtrain.traineddata文件识别原来的图像,看是否改善。
实测下来,虽然校正的图像再识别的时候,得到了改善,但是如果训练的原稿不够多的话,对没有训练的图像有较大劣化效果。所以一般不建议自己训练字库,官方的字库基本足够用

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

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

相关文章

自定义Matplotlib中的颜色映射(cmap)

要自定义Matplotlib中的颜色映射(cmap),您可以按照以下步骤进行操作: 导入所需的库: import numpy as np import matplotlib.pyplot as plt from matplotlib.colors import LinearSegmentedColormap创建自定义颜色映…

面试官问 Spring AOP 中两种代理模式的区别?很多面试者被问懵了

面试官问 Spring AOP 中两种代理模式的区别?很多初学者栽了跟头,快来一起学习吧! 代理模式是一种结构性设计模式。为对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象,并允许在将请求提交给对象前后进行一…

C++模拟实现——AVL树

AVL树 1.介绍 AVL树是对搜索二叉树的改进,通过特定的方法使得每个节点的左右子树高度差绝对值不超过1,使得避免出现歪脖子的情况,最核心的实现在于插入值部分是如何去实现平衡调整的,由于前面详细实现和解析过搜索二叉树&#x…

OV5640的参数与配置方法

分辨率和速率(FPS) 寄存器配置 I/O 板的驱动能力和方向控制 system clock control OV5640 PLL 允许输入时钟频率范围为 6~27 MHz,最大 VCO 频率为 800 MHz。 MipiClk 用于 MIPI,SysClk 用于图像信号处理 (ISP) 模块的内部时钟。 …

新版本Idea设置启动参数

1.进入配置页面 2.点击下图红框的部分,会看到有很多操作可选 3.选择添加VM参数即可 此时就会多出一个可以输入参数的框了,如下:

网络和Linux网络_1(网络基础)网络概念+协议概念+网络通信原理

目录 1. 网络简介 1.1 独立模式和互联网络模式 1.2 局域网LAN和广域网WAN 2. 协议和协议分层 2.1 协议的作用 2.2 协议分层 2.3 OSI七层模型 3.2 TCP/IP四层(五层)模型 3. 网络通信原理 3.1 协议报头 3.2 局域网和解包分用 3.3 广域网和跨网络 4. 网络中的地址 4…

JVM之类加载器

文章目录 版权声明类加载器类加载器的分类启动类加载器拓展类加载器&应用程序类加载器 双亲委派机制解决三个问题 打破双亲委派机制自定义类加载器案例演示线程上下文类加载器案例梳理OSGi模块化 版权声明 本博客的内容基于我个人学习黑马程序员课程的学习笔记整理而成。我…

mac 安装使用svn教程

mac 安装使用svn教程 一、安装Homebrew 要在Mac OS上安装SVN,首先需要安装Homebrew。Homebrew是一个流行的包管理器,因此我们将使用它来安装SVN。 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"…

介绍 Docker 的基本概念和优势,以及在应用程序开发中的实际应用

Docker是一种基于容器的虚拟化技术,它允许开发者将应用程序及其依赖项打包到一个轻量级容器中,然后在任何可用的开发、测试和生产环境中进行部署和运行。 下面是Docker的基本概念和优势: 容器:Docker容器是一种独立运行的软件包&a…

【开源】基于Vue.js的校园失物招领管理系统的设计和实现

目录 一、摘要1.1 项目介绍1.2 项目详细录屏 二、研究内容2.1 招领管理模块2.2 寻物管理模块2.3 系统公告模块2.4 感谢留言模块 三、界面展示3.1 登录注册3.2 招领模块3.3 寻物模块3.4 公告模块3.5 感谢留言模块3.6 系统基础模块 四、免责说明 一、摘要 1.1 项目介绍 基于Vue…

数列计算

题目描述 有一列数是 : 请找出这个数列的规律,编写程序计算并输出这个数列的第项,要求是分数形式,并计算这个数列的前项和 ( 结果四舍五入保留两位小数 ) 输入格式 第一行仅有一个正整数 () 。 输出格式 共有 行,第一…

Java基础-基础语法

1、概述 一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作。 对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;…

Java之“数字困境”:资产管理项目中的Bug追踪与启示

目录 1 前言2 问题的发现3 调试的开始4 深入调试5 调试心得与反思6 结语 1 前言 在程序员的日常工作中,我们时常面对各种令人头疼的问题,其中最令人崩溃的瞬间之一,就是当我们花费大量时间追踪一个看似复杂的bug,最终发现问题的根…

蒙特卡洛树搜索(Monte Carlo Tree Search)揭秘

一. 什么是蒙特卡洛树搜索 蒙特卡洛树搜索(MCTS)是一种启发式搜索算法,一般用在棋牌游戏中,如围棋、西洋棋、象棋、黑白棋、德州扑克等。MCTS与人工神经网络结合,可发挥巨大的作用,典型的例子是2016年的AlphaGo,以4:1…

JAVA集合学习

一、结构 List和Set继承了Collection接口,Collection继承了Iterable Object类是所有类的根类,包括集合类,集合类中的元素通常是对象,继承了Object类中的一些基本方法,例如toString()、equals()、hashCode()。 Collect…

实战Leetcode(五)

Practice makes perfect! 实战一: 思路:我们要用复制的节点来组成一个新的链表,而原链表的节点随机指向其中一个节点,我们首先给每一个节点都复制并且插入到原来节点的后面,然后用复制的节点指向我们原来节…

物理问题中常见的分析问题----什么样的函数性质较好

物理问题中常见的积分符号位置交换问题 重极限与累次极限 高数下的定义 累次极限:求极限时需要遵循一定的顺序重极限:任意方向趋于的极限 两者之间的关系: 两者没啥关系存在累次极限存在而不相等的函数...... 求和符号与积分符号互换--逐项积…

RK3568笔记五:基于Yolov5的训练及部署

若该文为原创文章,转载请注明原文出处。 一. 部署概述 环境:Ubuntu20.04、python3.8 芯片:RK3568 芯片系统:buildroot 开发板:ATK-DLRK3568 开发主要参考文档:《Rockchip_Quick_Start_RKNN_Toolkit2_C…

专题知识点-二叉树-(非常有意义的一篇文章)

这里写目录标题 二叉树的基础知识知识点一(二叉树性质 )树与二叉树的相互转换二叉树的遍历层次优先遍历树的深度和广度优先遍历中序线索二叉树二叉树相关遍历代码顺序存储和链式存储二叉树的遍历二叉树的相关例题左右两边表达式求值求树的深度找数找第k个数二叉树非递归遍历代码…

C++ builder 常见问题汇总

1、CB静态编译设置 2、CB10.3设置经典编译器(用于解决10.3弹出代码提示慢) 3、CBuilder生成Release版本 : project->Options->CCompiler->Build Configuration 选择 Release project->Options->CLinker中取消Use dynamic RTL…