Tesseract-OCR識(shí)別中文與訓(xùn)練字庫實(shí)例
關(guān)于中文的識(shí)別,效果比較好而且開源的應(yīng)該就是Tesseract-OCR了,所以自己親身試用一下,分享讓有同樣興趣的人少走彎路。
一、準(zhǔn)備工作
1、下載Tesseract-OCR引擎,注意要3.0以上才支持中文哦,按照提示安裝就行。
2、下載chi_sim.traindata字庫。要有這個(gè)才能識(shí)別中文。下好后,放到Tesseract-OCR項(xiàng)目的tessdata文件夾里面。
3、下載jTessBoxEditor,這個(gè)是用來訓(xùn)練字庫的。
以上的幾個(gè)在百度都能找到下載,就不詳細(xì)講了。
?
?
二、識(shí)別
1、進(jìn)入cmd,進(jìn)入到要識(shí)別的圖片的路徑下。
2、輸入命令
1tesseract
圖片名稱 生成的結(jié)果文件的名稱 字庫
例如我的圖片識(shí)別就是:
1tesseract
test.jpg result -l chi_sim
識(shí)別完后會(huì)生成result.txt文件
當(dāng)然啦效果不太理想。所以我們要訓(xùn)練自己的字庫。
?
三、訓(xùn)練
1、將圖片轉(zhuǎn)換成tif格式,用于后面生成box文件。可以通過畫圖,然后另存為tif即可。
更改圖片名字,這個(gè)是有要求的=。=
tif文面命名格式[lang].[fontname].exp[num].tif
lang是語言 fontname是字體?
比如我們要訓(xùn)練自定義字庫 mjorcen字體名normal
那么我們把圖片文件重命名 mjorcen.normal.exp0.jpg在轉(zhuǎn)tif。
?
2、生成box文件。
1tesseract
mjorcen.normal.exp0.jpg mjorcen.normal.exp0 -l chi_sim batch.nochop makebox
box文件和對(duì)應(yīng)的tif一定要在相同的目錄下,不然后面打不開。
?
3、打開jTessBoxEditor矯正錯(cuò)誤并訓(xùn)練
打開train.bat
找到tif圖,打開,并校正。
?
4、訓(xùn)練。
只要在命令行輸入命令即可。
1tesseract?
mjorcen.normal.exp0.jpg mjorcen.normal.exp0? nobatch box.train
1unicharset_extractor
mjorcen.normal.exp0.box
?
在這我明明已經(jīng)矯正好了,但是還是有1個(gè)字符不能識(shí)別出來,報(bào)的錯(cuò)跟實(shí)際上完全沒有相關(guān)性,不知道是不是bug,到后面的結(jié)果就是“園”字沒有識(shí)別出來。
先不管,畢竟只有一個(gè)樣本。
?
新建一個(gè)font_properties文件
里面內(nèi)容寫入 normal 0 0 0 0 0 表示默認(rèn)普通字體
?
繼續(xù)敲命令
1
2
3
4
5
6
7
8
9shapeclustering
-F font_properties -U unicharset mjorcen.normal.exp0.tr
?
?
?mftraining
-F font_properties -U unicharset -O unicharset mjorcen.normal.exp0.tr
?
?
?cntraining
mjorcen.normal.exp0.tr
?
最后會(huì)生成五個(gè)文件,把目錄下的unicharset、inttemp、pffmtable、shapetable、normproto這五個(gè)文件前面都加上normal.
如圖:
?
命令行輸入,合并五個(gè)文件:
1combine_tessdata
normal.
得到訓(xùn)練好的字庫。
?
四、測試
1、把 normal.traineddata 復(fù)制到Tesseract-OCR 安裝目錄下的tessdata文件夾中
?
2、識(shí)別命令:
1tesseract
mjorcen.normal.exp0.jpg mjorcen.normal.exp0 -l normal
?
3、效果
?
對(duì)比:
?
?
總結(jié):肯定要自己訓(xùn)練過后的字庫識(shí)別效果好,接下來要把整個(gè)項(xiàng)目弄進(jìn)android,還要研究怎么將多個(gè)字庫合并成一個(gè)字庫,因?yàn)槲也豢赡芤淮斡?xùn)練完所有的圖片文字的。到時(shí)候有什么成果了再分享。
?
更新:沒有錯(cuò)誤的話命令行的提示應(yīng)該是這樣的