android自动识别文字,Android文字识别tesseract ocr -训练样本库 识别字库
目錄
安裝tesseract ocr引擎和jTessBoxEditor
安裝jTessBoxEditor
開始制作box
準備好訓練的圖片
將圖片轉為tif格式的樣本圖片
合并樣本圖片
修改box文件
用腳本生成 或按下面步驟
生成font_properties
生成
訓練
生成字符集文件
生成shape文件
生成聚集字符特征文件
生成字符正常化特征文件
合成最終文件
改名
2.合并字庫文件
在上一篇文章tess_two Android圖片文字識別中,使用tess_two完成了簡單的文字識別。
博客地址
但是發現一個很明顯的問題是,默認的識別速度比較慢。識別四個很明顯的字需要將近兩秒。
DemoGitHub可以試試。
tess_two用的是tesseract ocr引擎
查看用到的官方提供的中文識別庫chi_sim.traineddata文件有52M。里面肯定是包含了很多的訓練和文字的。
我用不了那么多字,然后就按官方和網上的資料自己做了一個識別庫,這個庫只能識別訓練過的文字。速度生成的文件應該跟訓練的字數有關的,我實驗了幾個字,只有100多k。
看看速度,快了很多。
下面大致記錄一下制作訓練識別庫的方法。相對比較簡單。
安裝tesseract ocr引擎和jTessBoxEditor
在官網上可以找到Window和Mac的安裝方法,window的有專門的額客戶端。我的是Mac,所以選的是Homebrew安裝。
Homebrew 是一個包管理器,如果沒裝的話,在終端執行ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"就會自動裝好。
單純的安裝tesseract ocr引擎是可以直接用官網的命令brew install tesseract
但是,我后面要用到訓練樣本的命令,所以我們要用到的安裝命令是brew install --with-training-tools tesseract,否則后面一些命令會找不到。
如果初次安裝用了第一個,那么可以先用brew uninstall tesseract卸載掉,然后執行brew install --with-training-tools tesseract重新安裝。
裝好之后,找到在上篇文章中下載的chi_sim.traineddata。
然后復制到/usr/local/Cellar/tesseract/3.05.00/share/tessdata中備用。里面已經自帶了eng.traineddata。 這一步不是必須的,而且我這樣好想還容易出錯。
安裝jTessBoxEditor
這里提供了很多第三方的訓練工具,我選第一個jTessBoxEditor。
jTessBoxEditor是基于java的,多以可以跨平臺,下載下來在Mac和Windows上都能運行。
下載下來是這樣的
jTessBoxEditor
啟動jTessBoxEditor.jar就能打開客戶端。
這里我有一個疑問,別人電腦上都能雙擊這個文件打開,而我的電腦雙擊一閃就沒了,只能用在終端里打開。。
開始制作box
準備好訓練的圖片:
什么格式應該沒關系,反正都要轉化成tif格式的。
將圖片轉為tif格式的樣本圖片
方法有很多,我用的在線轉化。
下載下來的文件是
要手動吧后綴的.html去掉變成.tif文件,比較麻煩。所以不推薦用這個轉換工具。。
改名后
合并樣本圖片
大家應該注意到有一個new文件夾,這個文件夾用來放之后生成的各種文件的,包括最終的traineddata文件。
打開jTessBoxEditor.jar,然后點菜單上的Tool->Merge TIFF
保存到new文件夾中,保存的時候注意名字sll.normal.exp0.tif
關于名字 sll.normal.exp0.tif
官網的寫法是這樣的
[lang].[fontname].exp[num].tif
[lang]是語言,隨便起,這里的叫sll
[fontname]是字體,隨便起,這里叫 normal
[num]我也不知道啥意思,寫的是數字0
這兩個都是自定義的,后面會用到,所以要記住。
點擊保存后,會在new文件夾中生成合并的sll.normal.exp0.tif文件
然后執行命令,
如果前面復制了chi_sim.traineddata文件的話用下面的
tesseract sll.normal.exp0.tif sll.normal.exp0 -l chi_sim batch.nochop makebox
否則用這個,默認的。上面那個有時候會出錯沒我也不知道為什么。
tesseract sll.normal.exp0.tif sll.normal.exp0 -l eng batch.nochop makebox
會在當前文件夾下生成sll.normal.exp0.box文件
修改box文件
打開jTessBoxEditor.jar,點擊Box Editor->open
然后選上一步的tif文件,會自動打開綁定的box文件。
在里面可以對他的識別區域,識別結果進行一些修改,達到我們正確的識別目的
全部修改完后點擊save。
用腳本生成
下面的步驟可以寫一個腳本自動完成。生成box文件就一行代碼,就不用寫了。
比如,在new文件夾下創建一個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 "完成"
當然里面的東西可以改,要輸入的語言和字體是根據tif文件的名字來的
比如我的文件是sll.normal.exp0.tif
所以就這樣輸入
如果不出錯,就能看見new里面變成了這樣
有了我們需要的normal.traineddata識別庫。
生成font_properties
在new文件夾中執行下面命令,會生成一個font_properties文件,里面的內容是normal 0 0 0 0 0 。
echo normal 0 0 0 0 0 >font_properties
六個代表的東西是 fontname italic bold fixed serif fraktur
像第一個是字體名,前面我起的是normal。
后面的值是0或1,可以看一下默認的文件font_properties
生成
接下來就是一條條命令生成一個個文件了
訓練
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
生成字符正常化特征文件
cntraining sll.normal.exp0.tr
合成最終文件
改名
上面幾步完成后,會看到下面五個文件
然后全部重命名,前面加上normal. 就是字體名,變成
合并字庫文件
combine_tessdata normal.
看 哇 拿到了我們需要的normal.traineddata文件。
必須確定的是第type 1、3、4、5的數據不是-1,才算成功。
然后按上一篇的方法用吧!
總結
以上是生活随笔為你收集整理的android自动识别文字,Android文字识别tesseract ocr -训练样本库 识别字库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Type-C边充电边OTG芯片LDR60
- 下一篇: 《算法导论3rd第一章》算法在计算中的作