美文网首页
svm数字验证码训练demo

svm数字验证码训练demo

作者: Justforme1 | 来源:发表于2019-05-12 12:43 被阅读0次

import os

from PILimport *

from PILimport Image

import numpyas np

from svmutilimport *

from svmimport *

address ='D:\\11\\fen\\'

f = open('D:\\11\\train.txt','w')

def get_feature(dir, file):

f.write(dir)

im = Image.open(address + dir +'\\' + file)

imarr = np.array(im)

height, width = imarr.shape

for iin range(height):

for jin range(width):

gray = imarr[i,j]

if gray <=150:

imarr[i, j] =0

            else:

imarr[i, j] =255

    im = Image.fromarray(imarr)

count =0

    width, height = im.size

for iin range(height):

c =0

        for jin range(width):

if im.getpixel((j, i)) ==0: c +=1

        f.write(' %d:%d'%(count, c))

count +=1

    for iin range(width):

c =0

        for jin range(height):

if im.getpixel((i, j)) ==0: c +=1

        f.write(' %d:%d'%(count, c))

count +=1

    f.write('\n')

def train_svm_model():

y, x = svm_read_problem('D:\\11\\train.txt')

model = svm_train(y, x)

svm_save_model('D:\\11\\model_file', model)

if __name__ =='__main__':

dirs = os.listdir(address)

for dirin dirs:

files = os.listdir(address + dir)

for filein files:

get_feature(dir, file)

train_svm_model()



分割图片

import os

from PILimport *

from PILimport Image

import numpyas np

from svmutilimport *

from svmimport *

import cv2

address ='D:\\11\yanzheng\\'

f = open('train.txt','w')

imgry = Image.open("D:\\11\\yanzheng\\0.jpg")

imgry = imgry.convert('L')

imgry = np.array(imgry)#将图像转化为数组

height, width = imgry.shape

def get_feature():

dir=""

    im = Image.open("D:\\11\\yanzheng\\1.jpg")

imarr = np.array(im)

height, width ,a= imarr.shape

for iin range(height):

for jin range(width):

gray = imarr[i,j]

if gray[0] <=150|gray[1] <=150|gray[2] <=150:

imarr[i, j][0] =0

                imarr[i, j][1] =0

                imarr[i, j][2] =0

            else:

imarr[i, j][0] =255

                imarr[i, j][1] =255

                imarr[i, j][2] =255

    im = Image.fromarray(imarr)

count =0

    width, height = im.size

for iin range(height):

c =0

        for jin range(width):

if im.getpixel((j, i)) ==0: c +=1

        f.write(' %d:%d'%(count, c))

count +=1

    for iin range(width):

c =0

        for jin range(height):

if im.getpixel((i, j)) ==0: c +=1

        f.write(' %d:%d'%(count, c))

count +=1

    f.write('\n')

def train_svm_model():

y, x = svm_read_problem('train.txt')

model = svm_train(y, x)

svm_save_model('model_file', model)

def binarization(im):#二值化

    f = open('D:\\11\\yanzheng\\s.txt','w')

f.write("1")

for iin range(height):

for jin range(width):

gray = imgry[i,j]

print(gray)

if gray <=220:#阈值设为220

                imgry[i, j] =0

            else:

imgry[i, j] =1

            f.write(str(imgry[i,j]))#输出到txt查看

        f.write('\n')

'''

plt.figure('')

plt.imshow(imgry, cmap='gray')

plt.axis('off')

plt.show()

'''

    return imgry

def noiseReduction(imgry):#去除噪点

    global dx, dy

dx=(1,2,3,4,5,6,7,8)

dy=(1,2,3,4,5,6,7,8)

for iin range(height):

for jin range(width):

cnt =0

            if imgry[i, j] ==1:#白点不用管

                continue

            else:

for kin range(8):

x = dx[k] + i

y = dy[k] + j

if x <0 or x >= heightor y <0 or y >= width:

continue

                    if imgry[x, y] ==0:

cnt +=1

            if cnt <4:#周围少于4点就算噪点

                imgry[i, j] =1

    return imgry

def cutImg(img):#图像切割

    s =12

    w =40

    h =81

    t =0

    cut_img = []

for iin range(4):

pic = img.crop((s + w * i, t, s + w * (i +1), h))

cut_img.append(pic)

'''

cut_img[0].show()

cut_img[1].show()

cut_img[2].show()

cut_img[3].show()

'''

    return cut_img

if __name__ =='__main__':

imgry1=binarization(imgry)

imgry2=noiseReduction(imgry1)

f = open('D:\\11\\yanzheng\\d.txt','w')

for iin range(height):

for jin range(width):

f.write(str(imgry2[i, j]))# 输出到txt查看

        f.write('\n')

#  imgry2 = Image.fromarray(imgry2)

    imgry2 = Image.fromarray(imgry2.astype('uint8')).convert('RGB')

imgry2.show()

imgry3 = []

imgry3=cutImg(imgry2)

print(imgry3)

imgry3[0].save("D:\\11\\yanzheng\\1.jpg")

imgry3[1].save("D:\\11\\yanzheng\\2.jpg")

imgry3[2].save("D:\\11\\yanzheng\\3.jpg")

imgry3[3].save("D:\\11\\yanzheng\\4.jpg")

train_svm_model()

相关文章

网友评论

      本文标题:svm数字验证码训练demo

      本文链接:https://www.haomeiwen.com/subject/zghcaqtx.html