python驗證碼識別的執行個體詳解_python

來源:互聯網
上載者:User

其實關於驗證碼識別涉及很多方面的內容,入手難度大,但是入手後,可拓展性又非常廣泛,可玩性極強,成就感也很足,對這感興趣的朋友們下面跟著小編一起來學習學習吧。

依賴

sudo apt-get install python-imagingsudo apt-get install tesseract-ocrpip install pytesseract

利用google ocr來識別驗證碼

from PIL import Imageimport pytesseractimage = Image.open('v1.jpg')vcode = pytesseract.image_to_string(image)print vcode

但是pytesseract本身識別率不高,而且一般網站的驗證碼都帶有大量幹擾元素。( ̄▽ ̄)"

所以我們首先要對驗證碼進行去噪。

對於單像素幹擾線、幹擾點我們可以通過掃描整個映像,考察每一個像素點所臨近的八個像素點的顏色,如果不同的個數大於一定的值,那就說明該點是離散點,需要去除。

另外也可以嘗試設定閾值來直接將驗證碼二值化。

下面是兩張學校網站上的驗證碼

我們可以看到驗證碼存在單像素幹擾點,所以我們需要設法去除。但是經過反覆重新整理驗證碼,發現這個驗證碼

     1. 只有加法運算

     2.至多兩位元的加法

     3.文字部分一定是紅色(255,0,0)

有了上述的資訊,可以判斷這個驗證碼的產生演算法是有缺陷的

import Image from numpy import * import pytesseract im = Image.open('1.png') im = im.convert('RGB') #拉長映像,方便識別。im = im.resize((200,80)) a = array(im) for i in xrange(len(a)): for j in xrange(len(a[i])):   if a[i][j][0] == 255:     a[i][j]=[0,0,0]   else:     a[i][j]=[255,255,255] im = Image.fromarray(a) im.show() vcode = pytesseract.image_to_string(im) print vcode 

利用上述指令碼我們可以將映像進行二值化,利用google ocr進行識別。再通過eval()來對錶達式進行求值。

總結

python驗證碼識別的內容到這就基本介紹了,希望這篇文章對大家的學習或者工作能有所協助,如果有疑問大家可以留言交流。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.