利用Tesseract來識別驗證碼

概述

我們在寫爬蟲腳本時,經常會遇到驗證碼阻礙我們的道路。特別是這個網站的資料又非常重要,所以不得不研究一下怎麼讓機器自動識別。對於一些不太複雜的驗證碼,我們可以直接用現成的開源引擎Tesseract識別。

如下面的圖片,數字還是很清晰,也沒有什麼偏轉,字母粘連也不是很嚴重。在實際測試中,基本50%以上的驗證碼可以一次通過。

verif


Tesseract就是開源引擎裏的執牛耳項目。起源於惠普實驗室並在1984-1994年間大力發展的Tesseract,曾一度可與商業OCR軟件比肩。2005年,HP在GoogleCode上將Tesseract開源,2006年開始由谷歌贊助,並由Ray Smith負責該項目。

Tesseract支持的語言非常多,每種語言有相應的語言包可以下載。但是從中文的情況來看,貌似效果不是太好,識別率幾乎不可商用。相關論文中提到中文的準確率在95%以上,不知道實際的測試樣本是怎麼樣的。英文準確率還不錯,可以直接拿來用。這也是爲什麼這篇文章只能用於簡單的中英文驗證碼。


Tesseract 環境搭建

在Ubuntu下,你可以直接用 sudo apt-get install tesseract 來安裝。也可以按照這裏的步驟編譯安裝。【tesseract compiling】語言包一般放在 /usr/local/share/tessdata 或者 /usr/share/tessdata 中。比如 eng.traineddata 或者 chi-sim.traineddata,也可以到這裏下載 【Tessdata


預處理

下下來的圖片一般是不能直接拿來識別的,因爲引擎只認識灰度圖。所以我們要先預處理一下下。

轉換格式

imagemagick 轉換圖片格式 sudo apt-get install imagemagick 如要把一張 vcode.gif 的圖片轉化成 png,則 mogrify -format png vcode.gif 這裏 mogrifyconvert 命令其實是一樣的,只不過 mogrify 會覆蓋源文件罷了。(文檔裏是這麼說的,我也不知道爲啥要有兩個命令,捂臉~)

但是我們仍然得到的是彩色圖片,其實 imagemagick 還可以做更多,就像命令行的 photoshop 一樣,參考他的文檔,http://www.imagemagick.org/script/mogrify.php


OpenCV

但是介於對opencv很瞭解,我們這裏爲了方便,直接用opencv來處理後面的預處理工作。opencv要做的有三件事,轉化成灰度圖,二值化,裁剪。直接貼代碼吧!

#!/usr/bin/env python
# coding=utf-8
import cv2
import sys

if __name__ == '__main__':
    img = cv2.imread(sys.argv[1], 0)    # 讀取參數作爲文件名
    adaptive = cv2.adaptiveThreshold(img, 255, 
        cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)   # 自適應二值化
    adaptive = adaptive[3:-3, 3:-3]     # 去掉周圍的一點點邊界
    cv2.imwrite('test.png', adaptive)   # 存起來

識別

用命令行 tesseract test.png output 執行,結果會放在 output.txt 的文本中。當然,介於我們用了這麼多工具才能識別出來,最好用 shell 來組織一下,才能批量化工作。 各位讀者根據自己的需求取用吧!

參考資料:
1. Tesseract 在 googlecode上的項目,已停止更新,有一些資料,但是還是建議轉github
http://tesseract-ocr.googlecode.com/
2. Tesseract 在 GITHUB 上的項目
https://github.com/tesseract-ocr/tesseract
3. 如何編譯自己的Tesseract項目
https://github.com/tesseract-ocr/tesseract/wiki/Compiling
4. 各種語言的訓練包,直接拿來用
https://github.com/tesseract-ocr/tessdata
5. 現在Tesseract負責人Ray Smith 的介紹論文
https://github.com/tesseract-ocr/docs/blob/master/tesseracticdar2007.pdf
6. wiki上的簡介
https://en.wikipedia.org/wiki/Tesseract_(software)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章