目錄
- 安裝tesseract ocr引擎和jTessBoxEditor
- 安裝jTessBoxEditor
- 開始制作box
- 準(zhǔn)備好訓(xùn)練的圖片
- 將圖片轉(zhuǎn)為tif格式的樣本圖片
- 合并樣本圖片
- 修改box文件
- 用腳本生成 或按下面步驟
- 生成font_properties
- 生成
- 訓(xùn)練
- 生成字符集文件
- 生成shape文件
- 生成聚集字符特征文件
- 生成字符正?;卣魑募?/li>
- 合成最終文件
- 改名
2.合并字庫文件
在上一篇文章tess_two Android圖片文字識別中,使用tess_two完成了簡單的文字識別。
博客地址
但是發(fā)現(xiàn)一個很明顯的問題是,默認(rèn)的識別速度比較慢。識別四個很明顯的字需要將近兩秒。
DemoGitHub可以試試。

tess_two用的是tesseract ocr引擎
查看用到的官方提供的中文識別庫chi_sim.traineddata文件有52M。里面肯定是包含了很多的訓(xùn)練和文字的。
我用不了那么多字,然后就按官方和網(wǎng)上的資料自己做了一個識別庫,這個庫只能識別訓(xùn)練過的文字。速度生成的文件應(yīng)該跟訓(xùn)練的字?jǐn)?shù)有關(guān)的,我實驗了幾個字,只有100多k。
看看速度,快了很多。

下面大致記錄一下制作訓(xùn)練識別庫的方法。相對比較簡單。
安裝tesseract ocr引擎和jTessBoxEditor
在官網(wǎng)上可以找到Window和Mac的安裝方法,window的有專門的額客戶端。我的是Mac,所以選的是Homebrew安裝。
Homebrew 是一個包管理器,如果沒裝的話,在終端執(zhí)行ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"就會自動裝好。
單純的安裝tesseract ocr引擎是可以直接用官網(wǎng)的命令brew install tesseract
但是,我后面要用到訓(xùn)練樣本的命令,所以我們要用到的安裝命令是brew install --with-training-tools tesseract,否則后面一些命令會找不到。
如果初次安裝用了第一個,那么可以先用brew uninstall tesseract卸載掉,然后執(zhí)行brew install --with-training-tools tesseract重新安裝。
裝好之后,找到在上篇文章中下載的chi_sim.traineddata。
然后復(fù)制到/usr/local/Cellar/tesseract/3.05.00/share/tessdata中備用。里面已經(jīng)自帶了eng.traineddata。 這一步不是必須的,而且我這樣好想還容易出錯。
安裝jTessBoxEditor
這里提供了很多第三方的訓(xùn)練工具,我選第一個jTessBoxEditor。
jTessBoxEditor是基于java的,多以可以跨平臺,下載下來在Mac和Windows上都能運行。
下載下來是這樣的

啟動jTessBoxEditor.jar就能打開客戶端。
這里我有一個疑問,別人電腦上都能雙擊這個文件打開,而我的電腦雙擊一閃就沒了,只能用在終端里打開。。
開始制作box
準(zhǔn)備好訓(xùn)練的圖片:

什么格式應(yīng)該沒關(guān)系,反正都要轉(zhuǎn)化成tif格式的。
將圖片轉(zhuǎn)為tif格式的樣本圖片
方法有很多,我用的在線轉(zhuǎn)化。
下載下來的文件是

要手動吧后綴的.html去掉變成.tif文件,比較麻煩。所以不推薦用這個轉(zhuǎn)換工具。。
改名后

合并樣本圖片
大家應(yīng)該注意到有一個new文件夾,這個文件夾用來放之后生成的各種文件的,包括最終的traineddata文件。
打開jTessBoxEditor.jar,然后點菜單上的Tool->Merge TIFF

保存到new文件夾中,保存的時候注意名字sll.normal.exp0.tif

關(guān)于名字 sll.normal.exp0.tif
官網(wǎng)的寫法是這樣的
[lang].[fontname].exp[num].tif
[lang]是語言,隨便起,這里的叫sll
[fontname]是字體,隨便起,這里叫 normal
[num]我也不知道啥意思,寫的是數(shù)字0
這兩個都是自定義的,后面會用到,所以要記住。
點擊保存后,會在new文件夾中生成合并的sll.normal.exp0.tif文件

然后執(zhí)行命令,
如果前面復(fù)制了chi_sim.traineddata文件的話用下面的
tesseract sll.normal.exp0.tif sll.normal.exp0 -l chi_sim batch.nochop makebox
否則用這個,默認(rèn)的。上面那個有時候會出錯沒我也不知道為什么。
tesseract sll.normal.exp0.tif sll.normal.exp0 -l eng batch.nochop makebox
會在當(dāng)前文件夾下生成sll.normal.exp0.box文件

修改box文件
打開jTessBoxEditor.jar,點擊Box Editor->open
然后選上一步的tif文件,會自動打開綁定的box文件。

在里面可以對他的識別區(qū)域,識別結(jié)果進(jìn)行一些修改,達(dá)到我們正確的識別目的




全部修改完后點擊save。
用腳本生成
下面的步驟可以寫一個腳本自動完成。生成box文件就一行代碼,就不用寫了。
比如,在new文件夾下創(chuàng)建一個gettraineddata.shell,里面寫
#!/bin/sh
read -p "輸入你語言:" lang
echo ${lang}
read -p "輸入你的字體:" font
echo ${font}
echo "所以完整文件名為:"
echo ${lang}.${font}.exp0.tif
echo "開始。。。"
echo ${font} 0 0 0 0 0 >font_properties
tesseract ${lang}.${font}.exp0.tif ${lang}.${font}.exp0 nobatch box.train
unicharset_extractor ${lang}.${font}.exp0.box
shapeclustering -F font_properties -U unicharset ${lang}.${font}.exp0.tr
mftraining -F font_properties -U unicharset -O unicharset ${lang}.${font}.exp0.tr
cntraining ${lang}.${font}.exp0.tr
echo "開始重命名文件"
mv inttemp ${font}.inttemp
mv normproto ${font}.normproto
mv pffmtable ${font}.pffmtable
mv shapetable ${font}.shapetable
mv unicharset ${font}.unicharset
echo "生成最終文件"
combine_tessdata ${font}.
echo "完成"
當(dāng)然里面的東西可以改,要輸入的語言和字體是根據(jù)tif文件的名字來的
比如我的文件是sll.normal.exp0.tif
所以就這樣輸入

如果不出錯,就能看見new里面變成了這樣

有了我們需要的normal.traineddata識別庫。
生成font_properties
在new文件夾中執(zhí)行下面命令,會生成一個font_properties文件,里面的內(nèi)容是normal 0 0 0 0 0 。
echo normal 0 0 0 0 0 >font_properties

六個代表的東西是 fontname italic bold fixed serif fraktur
像第一個是字體名,前面我起的是normal。
后面的值是0或1,可以看一下默認(rèn)的文件font_properties
生成
接下來就是一條條命令生成一個個文件了
訓(xùn)練
tesseract sll.normal.exp0.tif sll.normal.exp0 nobatch box.train

生成字符集文件
unicharset_extractor sll.normal.exp0.box

生成shape文件
shapeclustering -F font_properties -U unicharset sll.normal.exp0.tr


生成聚集字符特征文件
mftraining -F font_properties -U unicharset -O unicharset sll.normal.exp0.tr

生成字符正?;卣魑募?/h2>
cntraining sll.normal.exp0.tr

合成最終文件
改名
上面幾步完成后,會看到下面五個文件

然后全部重命名,前面加上normal. 就是字體名,變成

合并字庫文件
combine_tessdata normal.


看 哇 拿到了我們需要的normal.traineddata文件。
必須確定的是第type 1、3、4、5的數(shù)據(jù)不是-1,才算成功。
然后按上一篇的方法用吧!
參考http://www.cnblogs.com/zhongtang/p/5555950.html?utm_source=tuicool&utm_medium=referral
參考http://www.cnblogs.com/wzben/p/5930538.html