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

news2024/12/27 1:36:01

系列文章目录

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.coloradmin.cn/o/1194032.html

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

相关文章

DreamScene2 免费WIndows 动态桌面壁纸播放软件启动无响应失败问题解决及安装使用帮助

高阶使用预览 启动失败场景还原 1. 系统信息 2. 启动错误描述 使用壁纸过程中突然出现异常卡断,使用任务管理器停止程序后,该程序就无法正常启动,点及启动后出现 转圈(任务管理器短暂出现进程) 后就消失不见 原因分析 经过推测后可能是 强制停止后 工作临时缓存目录与启动程序…

2023.11.10联赛 T3题解

题目大意 题目思路 感性理解一下,将一个数的平方变成多个数平方的和,为了使代价最小,这些数的大小应该尽可能的平均。 我们可以将 ∣ b i − a i ∣ |b_i-a_i| ∣bi​−ai​∣放入大根堆,同时将这个数划分的次数以及多划分一段减…

IDEA的这款API调试插件爱了

前言 Idea 是一款功能强大的集成开发环境(IDE),它可以帮助开发人员更加高效地编写、调试和部署软件应用程序,Idea 还具有许多插件和扩展,可以根据开发人员的需要进行定制和扩展,从而提高开发效率,今天我们就来介绍一款…

【FastCAE源码阅读7】视图方向切换按钮实现原理

在FastCAE工具栏上有视图切换按钮,如下图所示: 本文介绍如何实现。 FastCAE集成了Python解析器,当单击按钮时,中间用Python执行的,最后调用MainWindow.dll库接口实现的。 具体的Python代码在Python模块的py文件夹下的…

统一消息分发中心设计

背景 我们核心业务中订单完成时,需要完成后续的连带业务,扣件库存库存、增加积分、通知商家等。 如下图的架构: 这样设计出来导致我们的核心业务和其他业务耦合,每次新增连带业务或者去掉连带业务都需要修改核心业务。 一方面&…

linux服务-配置ntp时间服务

参考博文: 如何部署NTP服务器 NTP时间服务器安装部署文档 NTP时间服务器部署以及时间同步设置 Centos7搭建NTP服务器及客户端同步时间 参考文档: GB_T 20520-2006 信息安全技术 公钥基础设施 时间戳规范; GM_T0033-2014 时间戳接口规范&…

芯片静态电流详细测试流程,纯干货分享

在芯片的众多测试项目中芯片的功耗测试可谓重中之重,因为芯片的功耗不仅关系着芯片的整体工作性能也对芯片的工作效率有着非常重大的影响。今天纳米软件就带你了解一下芯片测试项目功耗测试中的静态电流的测试。 01、什么是芯片的静态电流? 芯片的静态电流也叫做…

基于SSM的课程管理系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

CSS 移动端 1px(线条/边框) 不同机型上显示粗细不同,解决办法

由于不同的手机有不同的像素密度导致的。如果移动显示屏的分辨率始终是普通屏幕的2倍&#xff0c;1px的边框在devicePixelRatio2的移动显示屏下会显示成2px&#xff0c;所以在高清瓶下看着1px总是感觉变胖了 <!DOCTYPE html> <html lang"en"> <head&g…

Git Gui的使用及ssh协议-IEDA使用git

目录 一.Git Gui的使用 二.ssh协议 2.1 什么是ssh key 2.2 配置用户名和邮箱&#xff08;如果已经配置&#xff0c;就跳过&#xff09; 2.3 生成(或删除)秘钥 ​编辑 2.4 远程仓库绑定公钥 三.IEDA使用git 3.1 idea配置Git 3.2 项目上传Git 3.3 演示 一.Git Gu…

使用Java语言实现基本RS触发器

使用Java语言实现计算机程序来模拟基本RS触发器的工作过程&#xff0c;通过本账号2023年10月17日所发布博客“使用Java语言实现数字电路模拟器”中模拟基本逻辑门组成半加器电路的方法来模拟基本触发器的组成和时间延迟。 1 基本RS触发器电路结构 基本RS触发器&#xff08;又…

【入门Flink】- 08Flink时间语义和窗口概念

Flink-Windows 是将无限数据切割成有限的“数据块”进行处理&#xff0c;这就是所谓的“窗口”&#xff08;Window&#xff09;。 注意&#xff1a;Flink 中窗口并不是静态准备好的&#xff0c;而是动态创建——当有落在这个窗口区间范围的数据达到时&#xff0c;才创建对应的窗…

BI 数据可视化平台建设(1)—交叉表组件演变实战

作者&#xff1a;vivo 互联网大数据团队 - Zhu Jianchen 本文是vivo互联网大数据团队《BI数据可视化平台建设》系列文章第1篇 - 交叉表组件。 交叉表在数据分析里应用广泛&#xff0c;通过本文&#xff0c;你将了解到&#xff1a; 交叉表的基本概念&#xff0c;以及BI可视化平…

canal实操应用

一、MySQL的binlog日志 1.1、binlog的分类 binlog一般分为三类&#xff1a;statement语句级&#xff0c;记录一条一条的SQL&#xff0c;一条SQL可能更改多行&#xff0c;且SQL语句中如果用到now()函数或者random()函数&#xff0c;会存在数据不一致的问题。row行级&#xff0…

大容量疯了!居然想把磁带放到硬盘,100TB+是否可以实现?

1.引言 上一篇关于大容量硬盘的文章&#xff08;HDD最后的冲刺&#xff1a;大容量硬盘的奋力一搏&#xff09;中&#xff0c;我们针对大容量硬盘研发状态&#xff0c;小编最近又有了新发现。WDC希望可以通过HDD和磁带结合&#xff0c;把盘的容量提升到100TB。 2.数据大爆炸的…

C# Socket通信从入门到精通(7)——单个异步TCP服务器监听单个客户端C#代码实现

前言: 我们在开发TCP服务器程序的时候,有的时候需要一些异步的应用,比如我读取客户端发送的数据,但是服务器程序不能一直等待客户端数据发送过来,服务器要先做一些别的事情,这个时候C# Socket通信从入门到精通(5)——单个同步TCP服务器监听一个客户端C#代码实现这篇文…

低代码平台受欢迎度排行榜:揭秘市场热门之选

对于企业而言&#xff0c;低代码平台不仅仅是一个开发工具&#xff0c;它更是一个加速器&#xff0c;推动了企业的数字化转型进程。传统的开发模式下&#xff0c;业务部门与IT部门之间常常存在沟通障碍&#xff0c;导致需求难以实现或实现速度缓慢。而低代码平台打破了这种障碍…

C++学习贴---C++预处理器

文章目录 前言预处理器#define预处理条件编译#ifdef#ifndef#if、#elif、#else 和 #endif #和##运算符 预定义宏 前言 预处理器 预处理器是指一些指示编译器在实际编译之前所需要完成的指令。 预处理器负责处理以**井号&#xff08;#&#xff09;**开头的预处理指令&#xff0…

为啥$p(w|D)=p(y|X,w)$?

为啥 p ( w ∣ D ) p ( y ∣ X , w ) p(w|D)p(y|X,w) p(w∣D)p(y∣X,w)&#xff1f; p ( w ∣ X , y ) p ( w ∣ D ) p(w|X,y)p(w|D) p(w∣X,y)p(w∣D), p ( w ∣ D ) p ( D , w ) / p ( D ) p(w|D)p(D,w)/p(D) p(w∣D)p(D,w)/p(D)为啥 p ( D ∣ w ) p ( y ∣ X , w ) p(D|…

PLC开放式以太网通信网络状态查看工具netstat

在进行PLC的开放式以太网通信时,为了查看网络状态我们可以利用ping这个强有力的工具,还可以使用netstat这个工具。 博途PLC开放式以太网通信 UDP通信 博途PLC 1200/1500PLC开放式以太网通信TSEND_C通信(UDP)_RXXW_Dor的博客-CSDN博客文章浏览阅读1.7k次。开放式TSEND_C通信…