Android ocr識別文字介紹
最近在做身份證號碼識別,在網上搜索的一番後發現目前開源的OCR中tesseract-ocr算是比較強大的了,它由HP於1985年到1995年間開發,後來由google直接負責,經過谷歌進一步開發後,目前的tesseract-ocr有了顯著的改進。
tesseract-ocr和Leptonica影象庫一起工作,它可以讀取多種影象格式,並將其轉換成超過60種語言的文字。可以工作在Linux,Windows,Mac OSX等系統上,並且可以在android和iphone平臺上編譯。
目前android版本在這個地址:https://code.google.com/p/tesseract-android-tools/
android中tesseract-ocr的使用在tess-two這個專案中有例子程式,不過寫的都比較簡單,這裡有個開源的識別專案,做的很好:
首先我們需要下面幾個工具:
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
就可以通過新的字典來識別,測試結果表明,識別率確實提高了。現實應用中我們需要使用多張圖片來通過上面的步驟來生成我們需要的識別庫,這樣識別率才能提高。