Tesseract4.X已經有了初步成效(見下面的對比), 但目前結果對於訓練之外的數據, 仍會有很大的偏差。想要更好的 OCR 結果, README 中重點強調的一點是: 在交給 Tesseract 之前, 改進圖像的質量.
圖像質量
Tesseract 處理 300 dpi 以上的圖片會更加出色, 所以要對圖片的大小有起碼的要求. 分辨率和 point size 必須要考慮, 低於 10pt * 300dpi 的會被篩掉, 低於 8pt * 300dpi 的篩除地更快. 快速對圖片進行檢查, 是為了計算字符 x 的高度(像素). 在 10pt * 300dpi 的情況下, x的高度通常為 20 像素(字體差異上下浮動). 低於 10 像素的 x 字符高度的識別, 很難做到准確了, 如果低於 8 像素, 那么這些文本將在 ‘去噪’ 環節被過濾掉。
DPI(Dots Per Inch,每英寸點數):表示分辨率,是一個量度單位,用於點陣數碼影像,指每一英寸長度中,取樣、可顯示或輸出點的數目。
預處理流程:
二值化
二值化的過程, 實際上 Tesseract 內置了, 但處理的應該比較粗暴, 我的經驗是, 這個二值化的過程, 盡量由自己進行, 選取一個盡量去除光照影響的算法,
去噪
噪點, 往往是二值化過程中, 處理亮度與顏色時遺留下來的. Tesseract 對這些噪點不會去除, 從而影響了結果的准確率.
旋轉/去偏移
如果目標文字出現傾斜, 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
參考資料:
- https://pushmind.org/2017/07/26/tesseract-notes/
- https://www.jianshu.com/p/41127bf90ca9
- https://my.oschina.net/gaoyoubo/blog/2231438/print
- https://blog.csdn.net/viewcode/article/details/7849448