EVN: Ubuntu16.04 

1.安装 tessract-orc  

1.1.tesseract-ocr安装 ( 默认安装路径:/usr/share/tesseract-ocr/4.00/tessdata)

sudo add-apt-repository ppa:alex-p/tesseract-ocr
sudo apt-get update 
sudo apt-get install tesseract-ocr
1.2.安装训练数据(equ为数学公式包) 
sudo apt-get install tesseract-ocr-eng  tesseract-ocr-chi-sim  tesseract-ocr-equ

1.3.下载:jTessBoxEditorFX

 jTessBoxEditor2.0工具,用于调整图片上文字的内容和位置,

下载地址:https://sourceforge.net/projects/vietocr/files/jTessBoxEditor/

安装包解压后“ java -jar  jTessBoxEditor.jar”,或者双击该目录下的“train.bat”脚本文件,就可以打开该工具了。

 

2.准备训练数(自己准备多一些)

 

3.将图片转为TIF格式 (点击tools->Merge Tiff)

为了进行后续的操作,合并后的文件名需要按照一定的规则来命令:

[lang].[fontname].exp[num].tif

其中:

  • lang表示语言名称;
  • fontname表示字体名称;
  • num表示序号

在这里,我们将TIF的文件名保存为了:cqc.font.exp0.tif

4、生成TIF图片的box盒子文件

生成box盒子文件是为了标识出图片中文字的具体位置。如果要训练进行训练,我们必须得准备tif/box这一文件对。在此,我们通过Tesseract的makebox命令来生成box盒子文件,其命令为

 tesseract cqc.font.exp0.tif cqc.font.exp0 -l  chi_sim   batch.nochop makebox

 

在命令行中运行此命令,我们将会得到一个和TIF文件同名的box文件:cqc.font.exp0.box

补充和修正box盒子文件

Tesseract4.0与之前版本对于box盒子文件要求的区别在于,在Tesseract4.0中,不再要求box盒子文件中对文本的框选精确到单个字符,只需要将框的位置覆盖到一行文本即可。

但是为了便于训练,我们还是选择对单个字符进行框选。同时,makebox命令生成的box盒子文件不一定是完全无误的,有一些图片可能就没有识别出盒子框来,而jTessBoxEditor这个软件只能对已存在的box信息进行处理,没有办法在缺失box信息的图片上新增box。

5、调整 box盒子文件

打开之前的JTessBoxEdit软件, 点击“Box Editor”选项卡,open 加载TIF文件对box进行修改(box文件和tif文件需要在同一个文件夹下):

 图片上面一共有5列,分别为:字符名称、X轴坐标、Y轴坐标、字符宽度、字符高度,点击可以调整,

操作完,记得点击save 

box修改好之后。我们就可以进行下一步了。

6、生成lstmf文件

这一步,我们通过TIF图像文件和box盒子文件生成进行LSTM训练所需的lstmf文件,使用到的命令如下所示:

tesseract cqc.font.exp0.tif cqc.font.exp0 -l chi_sim --psm 6 lstm.train

运行之后,我们的文件夹下会生成一个名为cqc.font.exp0.lstmf的文件。

7、提取语言的LSTM文件

接着从tesseract_best(https://github.com/tesseract-ocr/tessdata_best)下载相应语言的traineddata文件。

这里选择chi_sim.traineddata文件。 (必须是在这下载来的,不要用安装时的,否则报错)

下载好之后,我们需要从中提取中它的LSTM文件,使用的命令如下所示:

(此处可以使用之前已有的chi_sim.traineddata提取 chi_sim.lstm,训练时指定用这个,最后合并是tarineddata 也用之前的chi_sim.traineddata,这样合并后的数据会有原有的基因,并且原始基因影响最小)

combine_tessdata -e chi_sim.traineddata chi_sim.lstm

运行上述命令,我们的文件夹下会生成一个名为chi_sim.lstm的文件。

新建一个名为chi_sim.training_files.txt的文本文件,在里面填入 第六步 生成的cqc.font.exp0.lstmf文件的绝对路径。

 

8、训练

使用下面的命令就可以开始训练:

lstmtraining \
--model_output="/home/sea/Desktop/orc/output/output" \
--continue_from="/home/sea/Desktop/orc/train/chi_sim.lstm" \
--train_listfile="/home/sea/Desktop/orc/chi_sim.training_files.txt" \
--traineddata="/home/sea/Desktop/orc/train/chi_sim.traineddata" \
--debug_interval -1 \
--max_iterations 4000

说明:

--modeloutput 模型训练输出的路径(新建了一个名为output的文件夹用来存输出的文件)
--continue_from 训练从哪里继续(从tesseract_best下载的.traineddata,提取语言的LSTM文件)(建议用已有的data,提取lstm)  
--train_listfile 指定上一步创建的文件的路径(里面包含训练图片生成lstmf文件的绝对路径)
--traineddata  必须tesseract_best下载的.traineddata文件的路径 (chi_sim.traineddata)
--debug_interval 当值为-1时,训练结束,会显示训练的一些结果参数
--max_iterations 指明训练遍历次数

训练结束后,在output文件夹中会生成一个 output_checkpoint 文件和多个类似output0.012_3.checkpoint的.checkpoint文件

9、合并数据

我们接着使用命令把这些文件和之前的eng.traineddata合成为新的traineddata文件,使用命令如下: 

lstmtraining \
 --stop_training  \
--continue_from="/home/sea/Desktop/orc/output/output_checkpoint"  \
--traineddata="/home/sea/Desktop/orc/train/chi_sim.traineddata"  \
--model_output="/home/sea/Desktop/orc/sea.traineddata"
各个参数的意义:
--stop_training 默认必须有
--continue_from 上一步生成的output_checkpoint文件路径
--traineddata 从tesseract_best下载的chi_sim.traineddata文件的路径 (建议直接使用之前已有的数据,这样新数据会保留之前的基因)
--model_output  sea.traineddata 输出的路径 (名字可以随意修改,)

10、测试: 

拷贝数据 /home/sea/Desktop/orc/sea.traineddata 到 /usr/share/tesseract-ocr/4.00/tessdata/下
    img = Image.open("/home/sea/Desktop/orc/2.png")
    # tess_data_dir_conf = '--tessdata-dir "/home/sea/tesseract-ocr/tessdata-main"'
    # pytesseract.pytesseract.tesseract_cmd = "/usr/bin/tesseract"
    # text = pytesseract.image_to_string(img, config=tess_data_dir_conf, lang="chi_sim")
    text = pytesseract.image_to_string(img, lang="sea")
    print(text)

 

posted on 2021-12-03 12:32  lshan  阅读(1068)  评论(1编辑  收藏  举报