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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM