Android ocr識別文字介紹,androidocr識別文字
最近在做社會安全號碼碼識別,在網上搜尋的一番後發現目前開源的OCR中tesseract-ocr算是比較強大的了,它由HP於1985年到1995年間開發,後來由google直接負責,經過Google進一步開發後,目前的tesseract-ocr有了顯著的改進。
tesseract-ocr和Leptonica映像庫一起工作,它可以讀取多種映像格式,並將其轉換成超過60種語言的文本。可以工作在Linux,Windows,Mac OSX等系統上,並且可以在android和iphone平台上編譯。
目前android版本在這個地址:https://code.google.com/p/tesseract-android-tools/, 這個版本需要自己下載很多關聯的庫檔案,我在編譯的時候出了很多問題,後來沒辦法又在網上找到了這個項目:https://github.com/rmtheis/tess-two,說是tesseract-ocr-tool的一個分支,這個版本的好處是很多相關的庫都已經為我們配置好了,我們只要git clone下來編譯下就行了,github上相關介紹說的很詳細,編譯的過程這裡就不做介紹了,我在編譯的時候出現了permission許可權的問題,檔案的許可權用chmod 777 ./ 這個命令修改下就Ok了。最後編譯好的在libs下的so檔案就是我們開發所需要的庫檔案。
android中tesseract-ocr的使用在tess-two這個項目中有例子程式,不過寫的都比較簡單,這裡有個開源的識別項目,做的很好:https://github.com/rmtheis/android-ocr, 我借鑒的就是這個項目來開發的,但是用過後發現,對於身份證識別的效果並不好,識別率不是很高,而且經常識別不出來。OCR用到的識別庫:https://code.google.com/p/tesseract-ocr/downloads/list,其實我們可以根據自己的需求來訓練一套自己的識別庫的,比方說我們要識別驗證碼,識別社會安全號碼碼等,我們就可以用下面的方法來訓練一套識別庫。
網上關於OCR訓練的方法很多,http://my.oschina.net/lixinspace/blog/60124, http://blog.wudilabs.org/entry/f25efc5f/這兩篇文章都是比較好的教程,我也是參照這兩篇文章來訓練的,下面結合我的操作經驗來說下訓練的過程。
首先我們需要下面幾個工具:
tesseract-ocr-3.01, 最新版的3.02我在我機器上用了有點問題
jTessBoxEditor, 該工具是用java寫的box編輯器
1、先建立一個trainocr檔案夾,將上面兩個檔案拷貝進來,然後解壓這兩個檔案,我們進入Tesseract-ocr檔案夾下建立一個temp檔案夾
2、接下來我們準備好我們需要訓練的素材如
要想提高識別率,我們需要提供多張像上面這樣的圖片,我訓練社會安全號碼碼識別庫是用了50多張圖片,等訓練完了我眼睛也花了,圖片格式需要為tiff格式的,可以通過windows內建的畫圖工具來另存新檔tiff格式,準備好多張圖tiff圖片後,開啟jTessBoxEditor.jar,如
在此之前我們需要在第1步建立的temp檔案夾下建立一個custom.tif的檔案,接下來我們選擇tool–>Merge TIFF 然後選擇準備好的多張tiff圖片,注意這裡是全部選中,然後點擊開啟,然後選中我們剛剛建立的custom.tif檔案,點擊儲存,這樣我們就將多張tiff圖片merge到了一個檔案裡面了。
3、接下來我們開始產生box檔案了,cmd命令列進入temp檔案夾下,然後輸入如下命令
D:\Trainocr\Tesseract-ocr\temp>..\tesseract.exe custom.tif custom batch.nochop makebox
輸入完後會在temp檔案夾下多了個custom.box檔案,該檔案記錄了識別出來的每個字和它對應的位置座標。
4、接下來就開始矯正了,同樣使用jTessBoxEditor工具,我們切換到Box Editor,然後open開啟custom.tif,
通過右上方的X,Y,W,H對每個需要改正的字元進行調整,注意調整好後別忘記儲存。
5、接下來是計算字元集,輸入如下命令
D:\Trainocr\Tesseract-ocr\temp>..\unicharset_extractor.exe custom.box
6、接下來我們需要在temp檔案夾下建一個font_properties檔案,3.01版本的OCR需要這個檔案,該檔案的目的是提供輸出時識別出來的字型樣式資訊,檔案的格式為
<fontname> <italic> <bold> <fixed> <serif> <fraktur>
timesitalic 1 0 0 1 0
我們可以根據實際情況建立font_properties,我寫的是
custom 0 0 0 0 0
意思是普通字型,沒有任何格式。
然後執行以下命令
D:\Trainocr\Tesseract-ocr\temp>..\mftraining.exe -F font_properties -U unicharset custom.tr
7、Clustering,輸入命令
D:\Trainocr\Tesseract-ocr\temp>..\cntraining.exe custom.tr
8、此時在temp檔案夾下已經有很多檔案了,需要把inttemp,Microfeat,normproto,pffmtable,unicharset這幾個檔案加上首碼custom. (注意有個點號),然後輸入以下命令
D:\Trainocr\Tesseract-ocr\temp>..\combine_tessdata.exe custom.
出來的結果中我們需要確定type 1,type3, type4, type5對應的後面資料不能為-1,這樣我們就可以用這個新字典來識別了,將產生的custom.traineddata檔案拷貝到tessdata檔案夾下,然後
tesseract test.jpg result | custom
就可以通過新的字典來識別,測試結果表明,識別率確實提高了。現實應用中我們需要使用多張圖片來通過上面的步驟來產生我們需要的識別庫,這樣識別率才能提高。