Tesseract OCR引擎
TesseractOCR官方提供了训练好的标准语言包(traineddata文件,涵盖多国语言,每个语言一个库文件)。某些特定文字(LED灯的数字等)在官方语言库识别效果不好的情况下,还可以自己训练语言库。本文讲述基于官方语言库的LSTM字库训练方法和步骤。
LSTM字库训练是指使用长短期记忆(LSTM)神经网络模型对特定文本或字符集进行训练,以识别和分类其中的字符或单词。通过训练,LSTM模型可以学习到文本的内在特征和模式,从而在给定的文本数据集上提高OCR识别的准确率。
在训练过程中,LSTM模型将文本数据作为输入,通过反向传播算法不断调整模型的参数,以最小化预测错误。训练的目标是使得模型能够正确识别并输出给定文本中的每个字符或单词。一旦训练完成,就可以将训练好的模型应用于新的文本数据,实现高效的OCR识别。
总之,LSTM字库训练是指使用LSTM模型对特定文本集进行训练,以提高OCR识别的准确率。
官方没有最新的window安装程序。不过官网上有提供第三方的下载渠道。
有64位和32位的版本,根据需要下载最新的版本并安装。
安装完成需把安装目录添加到环境变量。默认安装目录(C:\Program Files (x86)\Tesseract-OCR)
官方下载文档:https://tesseract-ocr.github.io/tessdoc/Downloads.html
官方推荐下载渠道:https://digi.bib.uni-mannheim.de/tesseract/
用LSTM训练字库的话,一定要用 tessdata_best 字库。需要哪个语言,下载哪个语言库。
比如中文简体是chi_sim.traineddata;英语是eng.traineddata
官方下载地址
网址:https://sourceforge.net/projects/vietocr/files/jTessBoxEditor/
下载后将之解压缩到C盘某个目录,这个工具是用来训练样本用的(错误标注并更正)。
该工具是用Java开发的,需要安装jdk环境
网址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
打开jTessBoxEditor解压缩的目录,双击执行jTessBoxEditorFX.jar或者train.bat
窗口打开后,工具栏上依次Tools->Merge Tiff ,选中需要训练的图片,指定目录和命名合成后的文件。合成后,会弹出如下Msg提示合并成功。然后检查指定目录下是否生成了合并好的tif文件(保存多种图片的信息)。
目录:C:\Users\shen_pengfei.pfu\Desktop\LSTMTrain
合成文件:eng.normal.exp1.list.tif
在合并后的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
打开jTessBoxEditor工具,然后依次Box Editor->Open,选择eng.normal.exp1.list.tif
文件,右边显示原稿识别的区域,以行位单位;坐边对应识别的结果,以字符位单位。在左边区域依次对识别错误的每个字符进行校正,同时如果有减少或增加的字符,也要在左边区域进行相应的增加或删除。
比如红色框选的地方,***
识别成了BX
,既识别错误,也减少了一个字符。校正后,首先更改位正确字符,同时追加一个字符。
注意追加字符的时候,相应的坐标也要更改
一页的内容都校正完后,保存本页更改。然后点击下一页(黄色框选)继续校正。
在合并后的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,
将官方的traineddata文件复制到tif同目录,在该目录启动cmd,输入以下命令,生成.lstmf文件。我这里是用eng.traineddata
生成eng.lstmf
。
combine_tessdata -e eng.traineddata eng.lstm
在tif同目录下创建eng.training.path.txt
文件,里面内容是.lstmf文件的完整路径。
在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 指定训练遍历次数
输入以下命令,将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 输出的路径
用新生成的engtrain.traineddata文件识别原来的图像,看是否改善。
实测下来,虽然校正的图像再识别的时候,得到了改善,但是如果训练的原稿不够多的话,对没有训练的图像有较大劣化效果。所以一般不建议自己训练字库,官方的字库基本足够用