微調(Fine tune)是深度學習中遷移學習的一種方法,其中預訓練模型的權重會在新數據上進行訓練。
本文主要介紹如何使用新的訓練圖檔在tesseract 辨識模型進行Fine tune
有關於安裝的部分可以參考友人的其他文章Tesseract OCR - 繁體中文【安裝篇】將所有資料都放在同一資料夾,在用那資料夾 cmd開始工作,環境變數Tesseract資料夾要新增,才可以使用Tesseract指令喔。
使用版本:tesseract v5.3.1.20230401
1.合併圖檔
使用jTessBoxEditor
工具來合併圖檔,可參考這篇文章介紹jTessBoxEditor
應用

2.產生box資料 .box
指令:
ocr_1.tif : 圖檔名稱
ocr_1 : 要產生的.box名稱
-l eng_ocr --oem 3 --psm 7 : 指定tesseract的辨識模型,搜尋引擎,頁面分割模式
batch.nochop makebox:產生產生box資料的指令
tesseract ocr_1.tif ocr_1 -l eng_ocr --oem 3 --psm 7 batch.nochop makebox


產生.box檔案
3.產生模型訓練檔 .lstm
指令:
tesseract ocr_1.tif ocr_1 -l eng_ocr --psm 7 lstm.train


產生ocr_1訓練檔
4.提取要微調的模型,產生模型訓練檔 eng_ocr.lstm
指令:
-e 可從.traineddata中擷取出lstm檔
combine_tessdata -e eng_ocr.traineddata eng_ocr.lstm


提取要微調的模型
5.新建文件檔 (指定訓練檔路徑) .txt
輸入指定的訓練檔名稱,新的訓練集

新建文件檔
6.模型訓練
參數名稱說明:
eng_ocr.lstm : 指定用這個模型繼續訓練
eng_ocr.traineddata : 指定用這個模型的資料繼續訓練
eng_ocr.training_files.txt : 新增要訓練的資料 文件路徑
0.01 : 錯誤率低於0.01 就停止訓練
指令
Lstmtraining --model_output="train" --continue_from="eng_ocr.lstm" --traineddata="eng_ocr.traineddata" --train_listfile="eng_ocr.training_files.txt" --target_error_rate=0.01


訓練結果

訓練完產生train_checkpoint
7.模型輸出
複製eng_ocr.traineddata 另外立名新名稱eng_ocr_1.traineddata,最後指令輸入完,eng_ocr_1.traineddata就是訓練好的新模型了。
指令
- --continue_from 輸入剛剛訓練完的checkpoint檔案
- --traineddata 輸入要覆蓋的模型名稱
- --model_output
lstmtraining --stop_training --continue_from="train_checkpoint" --traineddata="eng_ocr.traineddata" --model_output="eng_ocr_1.traineddata"

輸出模型

大功告成模型傳到Tesseract-OCR\tessdata目錄中就可以使用囉。
更改lang="eng_ocr_1"
,就可以使用新的模型囉
pytesseract.image_to_boxes(new_image, lang="eng_ocr_1", config=config)