天天看點

Python驗證碼識别處理執行個體(轉)

一、準備工作與代碼執行個體

1、PIL、pytesser、tesseract

下載下傳後是一個exe,直接輕按兩下安裝,它會自動安裝到C:\Python27\Lib\site-packages中去,

下載下傳解壓後直接放C:\Python27\Lib\site-packages(根據你安裝的Python路徑而不同),同時,建立一個pytesser.pth,内容就寫pytesser,注意這裡的内容一定要和pytesser這個檔案夾同名,意思就是pytesser檔案夾,pytesser.pth,及内容都要一樣!

Python驗證碼識别處理執行個體(轉)

下載下傳後解壓,tessdata檔案夾,用其替換掉pytesser解壓後的tessdata檔案夾即可。(就上面的pytesser檔案夾)

Python驗證碼識别處理執行個體(轉)

二、驗證

(1)原理:

驗證碼圖像處理

驗證碼圖像識别技術主要是操作圖檔内的像素點,通過對圖檔的像素點進行一系列的操作,最後輸出驗證碼圖像内的每個字元的文本矩陣。

1、讀取圖檔

2、圖檔降噪

3、圖檔切割

4、圖像文本輸出

(2)驗證字元識别

驗證碼内的字元識别主要以機器學習的分類算法來完成,目前我所利用的字元識别的算法為KNN(K鄰近算法)和SVM (支援向量機算法),後面我 會對這兩個算法的适用場景進行較長的描述。

1、擷取字元矩陣

2、矩陣進入分類算法

3、輸出結果

要驗證的圖檔如下:

Python驗證碼識别處理執行個體(轉)

(3)、簡單的指令:

Python驗證碼識别處理執行個體(轉)

from pytesser import *  

image = Image.open('1.jpg')  # Open image object using PIL  

print image_to_string(image)     # Run tesseract.exe on image  

然後運作:

Python驗證碼識别處理執行個體(轉)

或者直接:

Python驗證碼識别處理執行個體(轉)

print image_file_to_string('fnord.tif')  

同樣能輸出結果!

(4)、複雜一點的

上面的隻能對一些比較簡單的做處理,一

原理:彩色轉灰階,灰階轉二值,二值圖像識别

Python驗證碼識别處理執行個體(轉)

# 驗證碼識别,此程式隻能識别資料驗證碼  

import Image    

import ImageEnhance    

import ImageFilter    

import sys    

# 二值化    

threshold = 140    

table = []    

for i in range(256):    

    if i < threshold:    

        table.append(0)    

    else:    

        table.append(1)    

#由于都是數字    

#對于識别成字母的 采用該表進行修正    

rep={'O':'0',    

    'I':'1','L':'1',    

    'Z':'2',    

    'S':'8'    

    };    

def  getverify1(name):          

    #打開圖檔    

    im = Image.open(name)    

    #轉化到灰階圖  

    imgry = im.convert('L')  

    #儲存圖像  

    imgry.save('g'+name)    

    #二值化,采用門檻值分割法,threshold為分割點   

    out = imgry.point(table,'1')    

    out.save('b'+name)    

    #識别    

    text = image_to_string(out)    

    #識别對嗎    

    text = text.strip()    

    text = text.upper();      

    for r in rep:    

        text = text.replace(r,rep[r])     

    #out.save(text+'.jpg')    

    print text    

    return text    

getverify1('1.jpg')  #注意這裡的圖檔要和此檔案在同一個目錄,要不就傳絕對路徑也行    

運作後效果:

Python驗證碼識别處理執行個體(轉)

http://blog.csdn.net/evankaka/article/details/49533493