Android文字識別tesseract ocr -訓(xùn)練樣本庫 識別字庫

目錄

  1. 安裝tesseract ocr引擎和jTessBoxEditor
  2. 安裝jTessBoxEditor
  3. 開始制作box
  4. 準(zhǔn)備好訓(xùn)練的圖片
  5. 將圖片轉(zhuǎn)為tif格式的樣本圖片
  6. 合并樣本圖片
  7. 修改box文件
  8. 用腳本生成 或按下面步驟
  9. 生成font_properties
  10. 生成
  11. 訓(xùn)練
  12. 生成字符集文件
  13. 生成shape文件
  14. 生成聚集字符特征文件
  15. 生成字符正?;卣魑募?/li>
  16. 合成最終文件
  17. 改名
    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

啟動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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容