• tesseract 4.1 训练(train) 基于jTessBoxEditorFX


    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)
  • 相关阅读:
    7月24日学习
    7月23日学习
    7月22日学习
    7月21日学习
    【编程技巧】applicationContext.xml 里面可配置bean和数据库地址
    【编程技巧】 输入框只能输入中文
    【开发技术】Beyond Compare
    【编程技巧】Ext.QuickTips.init();
    【开发技术】常用正则表达式大全!(例如:匹配中文、匹配html)
    【编程技巧】addSubview和insertSubview的区别
  • 原文地址:https://www.cnblogs.com/lshan/p/15637454.html
Copyright © 2020-2023  润新知