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.mzph.cn/news/142287.shtml

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

相关文章

2、灰度图

上一篇文章中,我们解释了像素是计算机视觉任务中的原材料,很多图像处理任务以像素局部性为基础,在不同尺度下完成图像特征的提取,小则为图像细节,大则为图像轮廓。 现在继续看一种十分简洁但很高效的图像表示——灰度图,,灰度图是一种只包含亮度信息而不包含颜色信息的…

未来之路:大模型技术在自动驾驶的应用与影响

本文深入分析了大模型技术在自动驾驶领域的应用和影响,万字长文,慢慢观看~ 文中首先概述了大模型技术的发展历程,自动驾驶模型的迭代路径,以及大模型在自动驾驶行业中的作用。接着,详细介绍了大模型的基本定义、基础功…

js字符串处理

1.当前只能获取到年月,例如 :2022-10,需求是根据当前获取的年月给开始时间和结束时间赋值,是当前年月的第一天和最后一天,2022-10-1和2022-10-31,因为获取的年月是动态的,开始时间都是1号&#…

springcloud旅游网站源码

开发技术: jdk1.8,mysql5.7,idea,nodejs,vscode springcloud springboot mybatis vue 功能介绍: 用户端: 登录注册 首页显示搜索景区,轮播图,旅游攻略列表 点击攻…

dameng数据库数据id decimal类型,精度丢失

问题处理 这一次也是精度丢失,但是问题呢还是不一样,这一次所有的id都被加一了,只有id字段被加一,还有的查询查出来封装成对象之后对象的id字段被减一了,数据库id字段使用的decimal(20,6)&…

新版本Idea设置启动参数

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

Python编程题集(第二部分循环语句)

目录 Demo27 打印数字I Demo28 打印数字II Demo29 打印数字III Demo30 打印菱形I Demo31 打印菱形II Demo32 打印菱形III Demo33 猜数字 Demo34 最大公约数I Demo35 判断素数 Demo36 最小公倍数 Demo37 整数的素因子 Demo38 完全数 Demo39 前50个素数 Demo40 计算…

Postman for Mac(HTTP请求发送调试工具)v10.18.10官方版

Postman for mac是一个提供在MAC设备上功能强大的开发,监控和测试API的绝佳工具。非常适合开发人员去使用。此版本通过Interceptor添加了对请求捕获的支持,修正了使用上下文菜单操作未复制响应正文的问题和预请求脚本的垂直滚动条与自动完成下拉列表重叠…

计算机网络课后作业2023秋

计算机网络第三版吴功宜版 课后作业 第一章作业三、计算与问答3.73.8 第二章作业三、计算与问答3.23.53.6 第三章作业三、计算与问答3.13.53.73.8 第四章作业三、计算与问答3.13.2 第五章作业三、计算与问答3.13.33.4VLAN交换机模式模式切换重置交换机VLAN配置命令其…

esp32-rust-no_std-examples-blinky

什么是裸机环境? 裸机环境是指没有可供使用的操作系统环境。当编译的 Rust 程序拥有 no_std 属性时,该程序无权访问上述 std 章节中提到的某些特定功能。尽管仍支持使用配网或引入复杂数据结构等功能,但实现方式将会更加复杂。 no_std…

前端注册登录

前端注册登录 设计 登录,注册,都写成组件 ⇢ \dashrightarrow ⇢ 在任意页面中,都能点击显示登录模态框写好的组件,应该放在那个组件中 ⇢ \dashrightarrow ⇢ 不是页面组件(小组件)击登录按钮,把Login.vue 通过定…

Flutter之Json序列化

前言 使用 json_annotation 框架实现json字符串序列化和反序列化 框架官方地址:json_serializable 一、引入依赖:在pubspec.yaml中添加 dependencies:json_annotation: ^4.8.1dev_dependencies:build_runner: ^2.3.3json_serializable: ^6.6.0 二、…

深入理解JVM虚拟机第二十四篇:详解JVM当中的动态链接和常量池的作用

大神链接:作者有幸结识技术大神孙哥为好友,获益匪浅。现在把孙哥视频分享给大家。 孙哥链接:孙哥个人主页 作者简介:一个颜值99分,只比孙哥差一点的程序员 本专栏简介:话不多说,让我们一起干翻J…

在虚拟环境下安装python包

PyCharm可以自己给项目创建虚拟环境,示例如下: 首先通过File—>Setting—>Project:【项目名称】—>Project Interpreter—>设置—>add—>Virtuallenv Environment配置虚拟环境即可 添加解释器: 当创建虚拟环…

sqli-labs关卡13(基于post提交的单引号加括号的报错盲注)通关思路

文章目录 前言一、回顾第十二关知识点二、靶场第十三关通关思路1、判断注入点2、爆显位3、爆数据库名4、爆数据库表5、爆数据库列6、爆数据库关键信息 总结 前言 此文章只用于学习和反思巩固sql注入知识,禁止用于做非法攻击。注意靶场是可以练习的平台,…

c++范围for语句

语法格式 for(declaration:expression)statement 基本使用 遍历输出 vector<int> nums { 1,2,3,4,5}; for (int num : nums) {num;cout << num << " "; } cout << endl; 遍历时修改 vector<int> nums { 1,2,3,4,5}; for (int&…

浏览器Cookie是什么?如何在MaskFog指纹浏览器中导入Cookie?

在使用互联网时我们常常听到cookie这个词&#xff0c;那到底什么是cookie呢&#xff1f; Cookie是某些网站为了辨别用户身份而储存在用户本地终端上的数据&#xff08;通常经过加密&#xff09;&#xff0c;由用户客户端计算机暂时或永久保存的信息客户端向服务器发起请求&…

Python使用带账密的Socks5代理

测试代码如下 import requestsip 146.78.85.145 port 9527 username ********* password ********* proxies {http: fsocks5://{username}:{password}{ip}:{port},https: fsocks5://{username}:{password}{ip}:{port} } print(proxies) body requests.get("https:/…

OpenCV中更稳更快的边缘检测方法,快速查找线、圆、椭圆--EdgeDrawing-C++代码

计算机视觉之家看到快速圆检测Edge Drawing&#xff0c;其效果比霍夫要好&#xff0c;速度更快&#xff08;具体效果可以参考视觉之家的文章&#xff09;&#xff0c;上面C代码不全&#xff0c;那么好的检测效果国内资料竟然那么少&#xff0c;后在opencv的开发文档中找到了C代…

C++中的四种构造函数

在C中&#xff0c;有几种不同类型的构造函数&#xff0c;基于它们的特性和用途&#xff0c;可以将它们分类为以下四种&#xff1a; 默认构造函数&#xff08;Default Constructor&#xff09;: 如果没有为类定义任何构造函数&#xff0c;编译器将为其提供一个默认构造函数。这种…