OCR學習及tesseract的一些測試
最近接觸OCR,先收集一些資料,包括成熟軟體、SDK、流行演算法。
1. 一個對現有OCR軟體及SDK的總結,比較全面,包括支援平臺、程式語言、支援字型語言、輸出格式、相關連結等
以此為索引,比較、選擇你想要的OCR SDK。
2. 另外一個OCR SDK 網站連結,商用,號稱high performance,未深入瞭解,連結如下:
3. 一個大學UCI 給出的handwriting數字的 training及testing資料:
其每個數字近550個樣本,出自43個人,30個人的用於training,13個人的用testing。其網站上有詳細介紹。
4. 一個哥們對開源的OCR 庫的總結:
5. 網上有很多OCR的online service,這裡給出一個:
是以tesseract為OCR引擎。
----------------------------------------------------------------------------------------------------
OCR常用演算法:
OCR重要的是識別率,專家說達到90%以上才有意義。
OCR重要的兩點:特徵提取與匹配能力。
特徵提取與影象處理演算法的好壞密切相關。
匹配演算法:
1. 模板匹配
包括多模板匹配、關鍵點模板匹配
2. 人工神經網路訓練
3. 結構化分析、特徵統計
---------------------------------------------------------------------------------------------------
tesseract是google開源的OCR,很流行。
這裡記錄下其應用方法及原理。
單個字元tesseract 測試:
命令列: tesseract input.jpg out -psm 10
輸入影象應該遵守一定的規則,這樣才能提高識別率:
其結果是M,錯的結果。
而對
其結果是H,正確。
兩個圖片的區別就在於寬度不同,一個大小是(29,55),另外一個是(55,55),原以為圖片是需要歸一化,或寬高相等。後檢視tesseract FAQ,提到改善結果的要素:
- try to set different segmentation mode (-psm option for command line) if you try to OCR small part of text (line, text)
- try to add border (see issue 398)
- try to pre-process image (increase DPI, resize, blur/sharpen image) before OCR (see issue 191)
- try to remove noise dewarp (so there are straight text lines) image and binarize image
經批量測試,確是如此。
其他,設定識別白名單,如只識別數字,或大寫字母,可以大大提高識別率
將tessedit_char_whitelist 0123456789 放在config/digits中,數字可被替換。
測試200多個單個字元(200張圖片),識別率達到90%,字元為黑體印刷體。
目前測試中增加字型寬度,對識別率,無明顯影響。
為進一步提高識別率,對錯誤識別的字元再次進行訓練學習: