python簡單驗證碼識別

在學習python經過接口自動登陸網站時,用戶名密碼、cookies、headers都好解決可是在碰到驗證碼這個時就有點棘手了;因而經過網上看貼,看官網完成了對簡單驗證碼的識別,若是是複雜的請看大神的貼這裏解決不了;python

mg01mg

以上兩張爲網站的上比較簡單的驗證碼,沒有加複雜的干擾線也沒有對字體進行彎曲;cookie

識別的代碼用到的python模塊有pytesseract,PIL;pytesseract在win下須要tesseract-ORC支持,這個須要上網下載安裝,並在win的系統環境變量下配置安裝路徑,運行tesseract –v 顯示當前tesseract版本信息表示設置安裝正常學習

 

如下是識別驗證碼代碼:字體

import pytesseract
from PIL import Image

def getcode(image):
    image = Image.open(image)
    #image.show() #查看打開的驗證碼
    im = image.convert("L") #把圖片轉成L單通道,這樣像素點的值在[0~255]以前,區別於普通的RGC圖片爲三通道像素點的值在[0~255,0~255,0~255]

    #把圖片的白色邊框設置爲黑色,若是沒有可認忽略這個步驟
    #1.把圖片上下兩條邊框設置爲黑色
    for x in range(im.size[0]):
        im.putpixel((x,0),0)
        im.putpixel((x,im.size[1] - 1),0)
    #2.把圖片左右兩條邊框設置爲黑色
    for y in range(im.size[1]):
        im.putpixel((0,y),0)
        im.putpixel((im.size[0] - 1,y),0)

    #將圖片色像素值在150以上的設置爲白色,不然爲黑色
    for i in range(im.size[0]):
        for j in range(im.size[1]):
            if(im.getpixel((i,j)) > 150):
                im.putpixel((i,j),255)
            else:
                im.putpixel((i,j),0)

    #im.show() #查看打開的驗證碼
    #im.save("xxxxxxxxxxxx") #保存圖片
    code = pytesseract.image_to_string(im)
    print(code)

if __name__ == '__main__':
    getcode("圖片的路徑")
運行結果:

res

*注意*若是有邊框的圖片在處理時沒有外理邊框,獲得的圖片以下,在程序識別時就會影響準確度:網站

mg_new

res01

如下是做者對手機拍的一張圖片直接識別和處理後識別的若是spa

手機圖片:rest

time

直接識別:(咱們看到程序沒法識別)code

rest

用代碼處理後識別:blog

 

rest02

相關文章
相關標籤/搜索