OCR5:預處理

 Tesseract4.X已經有了初步成效(見下面的對比), 但目前結果對於訓練以外的數據, 仍會有很大的誤差。想要更好的 OCR 結果, README 中重點強調的一點是: 在交給 Tesseract 以前, 改進圖像的質量.git

圖像質量github


Tesseract 處理 300 dpi 以上的圖片會更加出色, 因此要對圖片的大小有起碼的要求. 分辨率和 point size 必需要考慮, 低於 10pt * 300dpi 的會被篩掉, 低於 8pt * 300dpi 的篩除地更快. 快速對圖片進行檢查, 是爲了計算字符 x 的高度(像素). 在 10pt * 300dpi 的狀況下, x的高度一般爲 20 像素(字體差別上下浮動). 低於 10 像素的 x 字符高度的識別, 很難作到準確了, 若是低於 8 像素, 那麼這些文本將在 ‘去噪’ 環節被過濾掉。算法

DPI(Dots Per Inch,每英寸點數):表示分辨率,是一個量度單位,用於點陣數碼影像,指每一英寸長度中,取樣、可顯示或輸出點的數目。字體

預處理流程spa

二值化.net


二值化的過程, 實際上 Tesseract 內置了, 但處理的應該比較粗暴, 個人經驗是, 這個二值化的過程, 儘可能由本身進行, 選取一個儘可能去除光照影響的算法,code

去噪blog


噪點, 每每是二值化過程當中, 處理亮度與顏色時遺留下來的. Tesseract 對這些噪點不會去除, 從而影響告終果的準確率.圖片

 

旋轉/去偏移get


若是目標文字出現傾斜, Tesseract 的 line segmentation 效果會大打折扣. 若是可能的話,應該提早將文字扶正, 保證水平.

 

去邊緣


 

不管是掃描件, 仍是照片, 每每在二值化以後, 殘留大量的黑線/黑框. 這些會被 Tesseract 錯誤地拾取, 形成干擾. 最好可以截取目標文字區域, 而後交給 Tesseract.

 

圖像來源百度 

V4.X 腳本:

  • text = pytesseract.image_to_string(img.open('src1\A0.jpg'), lang='chi_sim', config='--psm 3 --oem 1')
    print(text)

 A0.jpg

A1.jpg

A2.jpg

A3.jpg

A4.jpg

A5.jpg

參考資料:


相關文章
相關標籤/搜索