1. 程式人生 > >OCR學習及tesseract的一些測試

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,提到改善結果的要素:

  1. try to set different segmentation mode (-psm option for command line) if you try to OCR small part of text (line, text)
  2. try to add border (see issue 398)
  3. try to pre-process image (increase DPI, resize, blur/sharpen image) before OCR (see issue 191)
  4. try to remove noise dewarp (so there are straight text lines) image and binarize image
這裡是第三點add border,使結果改善。

經批量測試,確是如此。

其他,設定識別白名單,如只識別數字,或大寫字母,可以大大提高識別率

將tessedit_char_whitelist 0123456789 放在config/digits中,數字可被替換。

測試200多個單個字元(200張圖片),識別率達到90%,字元為黑體印刷體。

目前測試中增加字型寬度,對識別率,無明顯影響。

為進一步提高識別率,對錯誤識別的字元再次進行訓練學習: