python驗證碼識別的實例詳解
其實關(guān)于驗證碼識別涉及很多方面的內(nèi)容,入手難度大,但是入手后,可拓展性又非常廣泛,可玩性極強,成就感也很足,對這感興趣的朋友們下面跟著小編一起來學習學習吧。
依賴
sudo apt-get install python-imaging sudo apt-get install tesseract-ocr pip install pytesseract
利用google ocr來識別驗證碼
from PIL import Image import pytesseract image = Image.open('v1.jpg') vcode = pytesseract.image_to_string(image) print vcode
但是pytesseract
本身識別率不高,而且一般網(wǎng)站的驗證碼都帶有大量干擾元素。( ̄▽ ̄)"
所以我們首先要對驗證碼進行去噪。
對于單像素干擾線、干擾點我們可以通過掃描整個圖像,考察每一個像素點所臨近的八個像素點的顏色,如果不同的個數(shù)大于一定的值,那就說明該點是離散點,需要去除。
另外也可以嘗試設(shè)定閾值來直接將驗證碼二值化。
下面是兩張學校網(wǎng)站上的驗證碼
我們可以看到驗證碼存在單像素干擾點,所以我們需要設(shè)法去除。但是經(jīng)過反復刷新驗證碼,發(fā)現(xiàn)這個驗證碼
1. 只有加法運算
2.至多兩位數(shù)的加法
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()
來對表達式進行求值。
總結(jié)
python驗證碼識別的內(nèi)容到這就基本介紹了,希望這篇文章對大家的學習或者工作能有所幫助,如果有疑問大家可以留言交流。
相關(guān)文章
python打印n位數(shù)“水仙花數(shù)”(實例代碼)
這篇文章主要介紹了python打印n位數(shù)“水仙花數(shù)”,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-12-12TensorFlow可視化工具TensorBoard默認圖與自定義圖
這篇文章主要介紹了TensorFlow可視化工具TensorBoard默認圖與自定義圖的使用操作示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10python光學仿真實現(xiàn)光線追跡之空間關(guān)系
這篇文章主要介紹了python光學仿真中實現(xiàn)光線追跡的空間關(guān)系示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2021-10-10解決ToPILImage時出現(xiàn)維度報錯問題pic should be 2/3 d
這篇文章主要介紹了解決ToPILImage時出現(xiàn)維度報錯問題pic should be 2/3 dimensional. Got 4 dimensions.具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-02-02