SVM识别验证码

来源:互联网 发布:天通金交易软件下载 编辑:程序博客网 时间:2024/05/19 23:14

先上代码,原理稍候再补

# -*- coding: utf-8 -*__author__ = 'eple'from svmutil import *from PIL import Imagefrom numpy import *import osimport stringdef getFeatures(path):    features = []    im = array(Image.open(path).convert('L'))    h,w = shape(im)    for i in xrange(0,h):        for j in xrange(0,w):            im[i][j] = 0 if im[i][j] < 128 else 1    for i in xrange(1,h-1):        for j in xrange(1,w-1):            if im[i][j] != 0 and im[i-1][j]==0 and im[i][j-1]==0 and im[i][j+1]==0 and im[i+1][j]==0:                im[i][j] = 0    for rang in [xrange(2,8), xrange(12,18), xrange(22,28), xrange(32,38)]:        temp = []        for i in rang:            for j in xrange(0,10):                temp.append(im[j][i])        features.append(temp)    return featuresdef SVMTrain():    train_path = "/home/eple/Desktop/code/checkcode_training/"    path = os.listdir(train_path)    labels = []    features = []    for name in path:        labels.extend(list(name))        features.extend(getFeatures(train_path + name))    labels = [string.atof(i) for i in labels]    prob = svm_problem(labels, features)    param = svm_parameter('-t 2')    m = svm_train(prob, param)    svm_save_model('1.model',m) #保存模型def SVMPredict(path):    m = svm_load_model('1.model')    label = [1,1,1,1]    features = getFeatures(path)    p_label, p_acc, p_val = svm_predict(label,features,m)    res = [str(int(i)) for i in p_label]    print '该图片的结果为:',''.join(res)if __name__ == '__main__':    SVMTrain() #训练    path = '/home/eple/DIP/0017'    SVMPredict(path) #预测


0 0
原创粉丝点击