1. 程式人生 > >驗證碼識別 Tesseract的簡單使用和總結

驗證碼識別 Tesseract的簡單使用和總結

參數說明 stdout all 令行 github output 一個個 其中 簡單

Tesseract是什麽

OCR即光學字符識別,是指通過電子設備掃描紙上的打印的字符,然後翻譯成計算機文字的過程。也就是說通過輸入圖片,經過識別引擎,去識別圖片上的文字。Tesseract是一種適用於各種操作系統的光學字符識別引擎,最早是hp公司的軟件,2005年開源,2006年後由google一直贊助Tesseract開發和維護。2006年,Tesseract被認為是當時最準確的開源OCR引擎之一 。

驗證碼識別類型

這裏討論一般的驗證碼識別,即英文、數字、或者英文和數字的混合的驗證碼,不包括滑動和文字點擊這些類型。

Tesseract的安裝

Tesseract的github地址:https://github.com/tesseract-ocr/tesseract
Tesseract的安裝github上有說明,Tesseract現在有3.05的版本,也有4.0beta版,我自己使用之後感覺2者差異不大,替換之後識別率也沒有明顯提升,所以只要使用其中一個就好。Tesseract支持windows和linux,windows下裝完之後有個Tesseract-ocr的目錄,目錄下有個tesseract.exe的程序,可以通過調用這個exe的命令行去進行ocr的識別。

Tesseract的使用

簡單的命令行使用如下:

tesseract imagename outputbase [-l lang] [--oem ocrenginemode] [--psm pagesegmode] [configfiles...]

  • 參數說明:

imagename  圖片文件
outputbase   輸出文件,也可以選擇命令行輸出stdout

  • 可選參數

-l lang   識別庫,默認是eng,也可以是自己訓練出來的識別庫
-psm pagesegmode 識別模式

pagesegmode 具體含義見下圖

0 = Orientation and script detection (OSD) only.
1 = Automatic page segmentation with OSD.
2 = Automatic page segmentation, but no OSD, or OCR
3 = Fully automatic page segmentation, but no OSD. (Default)
4 = Assume a single column of text of variable sizes.
5 = Assume a single uniform block of vertically aligned text.
6 = Assume a single uniform block of text. 7 = Treat the image as a single text line. 8 = Treat the image as a single word. 9 = Treat the image as a single word in a circle. 10 = Treat the image as a single character.

Tesseract訓練

可以通過jTessBoxEditor去訓練Tesseract,而且訓練樣本越多,識別準確度越好,實際使用中我訓練了500張圖片,對識別率的提升還是有的,但是還是沒能達到自己想要的預期識別率,估計是樣本還不夠多吧。另外對樣本一個個修正也是個繁瑣的事情,尤其是驗證碼,一般都各種變形以防止程序輕易識別,不過總體來說只要樣本夠多,想要達到預期的識別率還是可以的。關於jTessBoxEditor訓練的詳細步驟,有興趣的可以自己去搜索Tesseract相關資料了解。

驗證碼識別 Tesseract的簡單使用和總結