Windows下 訓練Tesseract實現識別圖片中的文字


介紹

Tesseract是一個基於Apache2.0協議開源的跨平台ocr引擎,支持多種語言的識別,在Windows和Linux上都有良好的支持.

源代碼在這:
源碼地址
有一個編譯打包好的Windows安裝包(里面帶了官方訓練好的英文庫):
Windows安裝包下載tesseract-ocr-setup-4.00.00dev.exe
選裝其它語言支持:
官方訓練好的各種語言庫
自己訓練數據的工具jTessBoxEditorFX v2.0.1
官網是國外網站,下載速度非常慢,我打包了一個訓練工具放在了CSDN(里面帶了我准備的學習資源,如果你從官網下載,請自備資源):
CSDN下載
官網下載

安裝配置tesseract

安裝命令行工具

下載來是一個這樣的自解壓文件,雙擊安裝:

需要注意的是,有一步讓選擇添加語言支持的,是從國外網站下載文件的,慎選(會卡很久,會卡很久,會卡很久)
安裝包已經自帶了英文數字識別的庫,不用勾選!

配置環境變量

安裝完后需要把安裝目錄添加到環境變量PATH里
另外:注意圖中有個tessdata文件夾,這里面是放置訓練結果的,之后自己訓練的文件可以放到這里,如果下載別人的文件,也是放到這.
需要創建一個環境變量TESSDATA_PREFIX,內容為這個tessdata文件夾的路徑.
注意:環境變量有2個操作

解壓訓練工具

訓練工具jTessBoxEditorFX,由於是java寫的,需要安裝jre才能運行.

用自帶的英文數字庫識別圖片

Tesseract提供了一個exe命令行工具,這里用這個工具來試試效果.
在訓練工具的目錄里,有個"學習資源"目錄,里面是我准備的一些圖片資源.共50張
我給每張圖片編號,以及將文件內容放在了文件名里,以便於學習:

放2張預覽:

在命令行輸入以下命令,即可讓tesseract識別圖片

tesseract .\5-65000000313.tif output -l eng
type output.txt

如果這一步報錯,嘗試檢查環境變量
其中".\5-65000000313.tif"是文件名,識別的時候支持多種圖片格式,不過訓練的時候要用tif,所以我這里提供的都是tif
"output"是輸出文件名,tesseract的識別結果是輸出為txt文件的這里指定輸出文件名,程序會自動加擴展名".txt"
"-l eng"這里選擇使用eng語言庫
這里在識別完后用type命令讀取識別結果並顯示

識別效果:



這里挑選的是編號為1,5,14的三張圖.
可以看到有個別文字識別失敗了!
由於官方的訓練數據是綜合各種場景比較通用的,而我們自己的數據通常是固定項目,固定場景的,如果能自己訓練一個庫,那對於我們自己的項目而言,其識別率將是最高的!

訓練自己的庫

正如前面的演示,官方庫不適合我們的學習數據,所以我們需要訓練自己的數據.
tesseract提供了多種訓練方法,從頭開始搭建,或者在舊的庫基礎上去改進.
我這里做的是后者
不過有一點得說下:雖然在這里用了舊的庫,但是生成新的庫也只支持訓練過程中有的字符,並不是說舊的庫里所有字符都會加到新的庫里面.

合並圖片資源

首先我們得把所有圖片資源合為一個,這里只支持tif格式
到jTessBoxEditorFX目錄下,首先運行這個

如果你的java環境沒問題的話,應該能看到這個界面

在菜單的"Tools"下,選擇"Merge TIF"

接着把所有學習資源都選中,按確認,然后再選擇要保存的地方.(建議選擇"工作區"文件夾)

合並成功

用舊的庫去生成box文件

前面說過要在舊的庫基礎上去訓練,所以這里先用舊的庫,去生成一個box文件
在工作目使用命令行執行如下命令:

tesseract 1.tif 1 -l eng makebox

"1.tif"是上一步生成的文件 后面的"1"是box的文件名,文件名要和tif文件一樣,不帶擴展名

然后就會生成box文件:

糾正舊的庫識別錯誤的地方

舊的庫有很多地方識別錯誤,所以這里要糾正它,還是那個GUI工具,切換到"Box Editor"選項卡,用"Open"打開那個tif文件:

可以看到Tesseract把舊的識別結果給顯示了出來,我們需要在這里糾正它.
比如有些框的選擇位置大小不對,給調整一下.
有些字符識別錯誤,給改改.
另外記得翻頁,這里面不止一頁.

啊,對了.改這個很辛苦,每次修改完一頁記得點"Save"或者按"Ctrl+S"保存,不然突然停電就頭疼了. 別問我為啥突然說這個 Q_Q

把全部改完后保存

生成訓練結果

上一步糾正了舊的庫的識別結果,接着要把它生成新的庫
命令行執行這個:

makedata.bat 1

其中的"1"就是我們的tif和box的文件名,這個bat是我自己寫的,如果你是從別的地方下載的訓練工具jTessBoxEditorFX,是沒有的,不過我會把bat的內容放在本文末尾.

界面一陣閃爍,當停下的時候,就生成了新的庫

這個文件就是我們要的訓練結果了.

把它改名為num.traineddata,放到tessdata目錄(不知道在哪?請看前文"環境變量"那一節)
可以看到里面已經有一個eng庫了,就是舊的庫

試試自己訓練的庫效果

終於到了這一步,可以試試自己訓練的庫效果咋樣了,還是前面那幾張圖:
需要注意的是,這里命令的"-l"參數后面是"num",是自己訓練的那個庫.

可以看到識別效果非常棒,一字不差!證明我們的訓練是成功的!

附錄

makedata.bat文件內容

::echo %1
move %1.box data.font.exp0.box
move %1.tif data.font.exp0.tif
echo font 0 0 0 0 0>font_properties
tesseract data.font.exp0.tif data.font.exp0 nobatch box.train
unicharset_extractor data.font.exp0.box
mftraining -F font_properties -U unicharset -O data.unicharset data.font.exp0.tr
cntraining data.font.exp0.tr
move inttemp data.inttemp
move pffmtable data.pffmtable
move normproto data.normproto
move shapetable data.shapetable
combine_tessdata data.
pause

一些命令注釋:
echo font 0 0 0 0 0>font_properties
這一步生成一個文件,記錄了字體的信息,font是字體名稱(需要注意的是,這個"font",和前面兩步設置的文件名中間得是一樣的),其中5個0表示字體的粗斜屬性等.如果有必要的時候可以設置下.

tesseract data.font.exp0.tif data.font.exp0 nobatch box.train
生成tr訓練文件

unicharset_extractor data.font.exp0.box
生成字符集,里面包含了訓練過程中遇到的字符

mftraining -F font_properties -U unicharset -O data.unicharset data.font.exp0.tr
cntraining data.font.exp0.tr
生成字典數據

combine_tessdata data.
合並訓練數據

結束

本文到此結束


免責聲明!

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



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