从头开始训练自己的 Tesseract 5 LSTM 识别库(超详细)

本文详细介绍了如何从头训练Tesseract 5 LSTM OCR识别库,包括准备工作、生成字符集文件、创建starter traineddata、生成训练文件、训练过程以及评估和生成标准traineddata。通过训练,提高了OCR的识别精度,特别是对于特定字库的识别。

最新工作中涉及到OCR的内容,用了百度的OCR精度不错,但是速度有点慢,看网上有提到Tesseract这一开源的项目,下载试了一试发现速度是比百度快不少,但是精度差很多,所以研究了下怎么可以提高识别的精度,发现可以通过训练识别库的方式,所以才有了这篇文章,按Tesseract官方的说法,训练有三种方式:一从头开始训练(官方不推荐使用此方法);二对现有模型进行微调训练;三对现有模型的部分神经元网络进行训练,本文是使用的方式一,从头始开始训练完全符合自己需要的字库,废话少说下面开始一步步进行说明。

一、准备工作

1、相关程序和资源

tesseract-ocr:tesseract-ocr-w64-setup-v5.0.1.20220118.exe
tessdata_best:https://github.com/tesseract-ocr/tessdata_best
langdata_lstm:https://github.com/tesseract-ocr/langdata_lstm

文本编辑器:我使用的是notepad++(这个按个人使用的习惯,没有要求),还要用到cmd或者Power Shell,另外jTessBoxEditor这个工具也可下载(需要Java环境),虽然本例子中并不需要jTessBoxEditor,但是可用它打开图片+box文件看看。

2、安装Tesseract-OCR

Tesseract-OCR安装过程中需要选择中文的支持,安装完成后在环境变量中增加路径设置,方便cmd中的使用,这一过程网上有详细的说明,不会的百度一下即可。

3、建立目录结构

在e:盘新建文件夹t,把下载的tessdata_best和langdata_lstm放入,新建output和tmp文件夹,注意下面的所有步骤都是按e:\t这个根路径进行的,都是用的绝对路径,用其它路径当做根目录的请自行修改路径,当然也可以使用相对路径,但是我不喜欢相对路径(需要考虑相对的位置,容易出错),最始的目录结构如下:
E:\T
├─langdata_lstm
├─output
├─tessdata_best
└─tmp

4、处理tessdata_best简体中文库chi_sim.traineddata

1)解包简体中文库chi_sim.traineddata
combine_tessdata -u e:\t\tessdata_best\chi_sim.traineddata e:\t\tessdata_best\chi_sim,执行完成上面这条命令后,就会把chi_sim.traineddata解为几个文件,具体文件内容可以自己去e:\t\tessdata_best文件夹中去看一看。

2)转化dawg字典文件为文本文件(Directed Acyclic Word Graph)
文字字典:
dawg2wordlist e:\t\tessdata_best\chi_sim.lstm-unicharset e:\t\tessdata_best\chi_sim.lstm-word-dawg e:\t\tessdata_best\word.txt
数字字典:
dawg2wordlist e:\t\tessdata_best\chi_sim.lstm-unicharset e:\t\tessdata_best\chi_sim.lstm-number-dawg e:\t\tessdata_best\number.txt
标点符号字典:
dawg2wordlist e:\t\tessdata_best\chi_sim.lstm-unicharset e:\t\tessdata_best\chi_sim.lstm-punc-dawg e:\t\tessdata_best\punc.txt

5、研究tessdata_best的字符集文件
用文本编辑器打开字符集文件,就是e:\t\tessdata_best\chi_sim.lstm-unicharset,可以看到4022这个数字(这是一个重要的数字),第5行是字母“S”,第4023行是汉字“掺”,从“S”到“掺”这4019行就是tessdata_best中文的全部编码,同理也可以自己查看一下tessdata_fast中文编码也是4019个,tessdata多一些有5071个(tessdata的文件名为chi_sim.unicharset),编码文件内容看来没有什么规律,为了方便看少了什么字,本人进行了变换处理(只保留编码字符并按GB2312顺序排序),结果如下:字符数字标点符号共有120个(其中多了一个GB2312中没有的〇),汉字有3899个,可GB2312有汉字6763个(一级汉字3755,二级汉字3008个),这个差距有点大呀,所以tessdata汉字识别精度不高在所难免(字符集中都没有还怎么识别呀)。

下面开始关键的步骤

二、生成字符集lstm-unicharset文件

1、生成字符集txt文件
把字符集所要包含的数字、字母、标点符号和汉字,保存在e:\t\chi_sim.txt,要求无重复内容,并且中间无空格、回车换行或类似tab等无法显示的特殊符号,本例子中编辑了一些数字、字符、标点符号和

评论 36
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值