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
參考資料: