根據公司項目需求,需要通過掃描實現身份證號碼的提取,使用官方提供的識別庫,在正常情況下都能夠正確提取出身份證號碼,但是在身份證拍攝模糊的情況下,識別效果並不理想。根據需求,我接觸瞭解到Tesseract,它是一個開源的OCR(Optical Character Recognition,光學字符識別)引擎,可以識別多種格式的圖像文件並將其轉換成文本。接着通過進一步學習,訓練了一些模糊的身份證號碼樣本,提高了對模糊身份證號的識別準確度。
下面,我們將在Windows環境下安裝Tesseract實現對身份證號的識別及訓練工作。
1、Tesseract使用官方庫識別身份證號
1.1 安裝Tesseract-OCR
通過下載地址:http://code.google.com/p/tesseract-ocr/,下載安裝tesseract-ocr-setup-3.02.02.exe。安裝成功後會生成如下目錄:
1.2 使用官方庫識別
準備一張待識別的身份證號圖片test.jpg
打開cmd.exe,進入到test.jpg文件目錄,執行:tesseract test.jpg output_test -l eng
【語法】: tesseract imagename outputbase [-l lang] [-psm pagesegmode] [configfile…]
imagename爲目標圖片文件名,需加格式後綴;outputbase是轉換結果文件名;lang是語言名稱(在Tesseract-OCR中 tessdata文件夾可看到以eng開頭的語言文件eng.traineddata),如不標-l eng則默認爲eng。
在當前目錄下會生成output_test.txt文件
對比發現,通過官方庫識別的結果並不理想,因此訓練自己的庫來完成識別。
2、Tesseract訓練自己的身份證號識別庫
2.1 安裝jTessBoxEditor
下載jTessBoxEditor,地址爲:https://sourceforge.net/projects/vietocr/files/jTessBoxEditor/,解壓後放到Tesseract-OCR目錄下。這裏需要事先安裝了JRE。
2.2 製作訓練樣本文件
這裏製作了十張模糊化後的身份證號圖片,圖片格式爲tif/tiff格式
2.3 合併樣本文件
打開jTessBoxEditor,Tools->Merge TIFF,將上述樣本全部選上,合併保存爲num.font.exp0.tif。這裏通過這種方式合併可能會出現Couldn't Seek錯誤,可以通過下載TIF/TIFF合併工具進行合併。下載地址:http://download.csdn.net/download/u010782875/10033600
合併後的文件如下:
2.4 字符矯正
打開jTessBoxEditor,Box Editor ->Open,打開num.font.exp0.tif,各頁上字符值和相應的座標信息
2.5 生成box文件
將num.font.exp0.tif放入到一指定目錄,打開命令行切換到num.font.exp0.tif所在目錄,執行:tesseract num.font.exp0.tif num.font.exp0 batch.nochop makebox
【語法】:tesseract [lang].[fontname].exp[num].tif [lang].[fontname].exp[num] batch.nochop makebox
lang爲語言名稱,fontname爲字體名稱,num爲序號;在tesseract中,一定要注意格式。
2.6 配置font_properties文件
在上述文件夾中新建一個名爲font_properties的文本文件,內容爲:
【語法】:<fontname> <italic> <bold> <fixed> <serif> <fraktur>
fontname爲字體名稱,italic爲斜體,bold爲黑體字,fixed爲默認字體,serif爲襯線字體,fraktur德文黑字體,1和0代表有和無,精細區分時可使用。
2.7 生成.tr訓練文件
在上述命令行界面執行:tesseract.exe num.font.exp0.tif num.font.exp0 nobatch box.train
生成num.font.exp0.tr文件
2.8 生成unicharset字符集文件
接着執行:unicharset_extractor.exe num.font.exp0.box
生成unicharset文件
2.9 生成shape文件
執行:shapeclustering.exe -F font_properties.txt -U unicharset num.font.exp0.tr
生成shapetable文件
2.10 生成聚集字符特徵文件
執行:mftraining.exe -F font_properties.txt -U unicharset -O unicharset num.font.exp0.tr
生成inttemp、pffmtable文件
2.11 生成字符正常化特徵文件
執行:cntraining.exe num.font.exp0.tr
生成normproto文件
2.12 更改文件名
手動將生成的inttemp、normproto、pffmtable、shapetable、unicharset五個文件更改成如下文件名:
2.13 合併訓練文件
執行:combine_tessdata.exe num.
生成num.traineddata文件(不要忘記指令後面的那個“.”),將該文件放到../Tesseract-OCR/tessdata目錄下進行接下來的測試
3、使用自己訓練的字符庫識別身份證號
還是使用上面的測試圖片進行對比測試,在命令窗口執行如下指令:tesseract test.jpg output_test -l num
這裏-l num就是使用了自己訓練的字符庫,打開生成的output_test.txt文件:
參考博客:http://www.cnblogs.com/cnlian/p/5765871.html
http://blog.csdn.net/yasi_xi/article/details/8763385
http://blog.csdn.net/gx_489587482/article/details/52686156
http://blog.csdn.net/why200981317/article/details/48265621