验证码识别小试
27 Mar 2013#这是一篇很水的文章,作者就是要记个流水帐。
以前留意过验证码识别的知识,最近同学要倒卖小米手机号,于是遍有破解其验证码的想法,动手试试,菜鸟入门~高手绕道。
从网上随便找个验证码,当然,要找相对简单一些的, (^.^)
这里有一篇技术文:http://huaidan.org/archives/2085.html
# -*- coding: utf-8 -*- import Image, ImageEnhance, ImageFilter import sys image_name = './1.png' im = Image.open(image_name) im = im.filter(ImageFilter.MedianFilter) enhancer = ImageEnhance.Contrast(im) im = enhancer.enhance(2) im = im.convert('1') im.show() #all by pixel s = 11 #start postion of first number w = 21 #width of each number h = 37 #end postion from top t = 5 #start postion of top im_new = [] #split four numbers in the picture for i in range(4): #crop(left, upper, right, lower) im1 = im.crop((s+w*i+i*2,t,s+w*(i+1)+i*2,h)) im_new.append(im1) f = file("/captcha/data.txt","a") for k in range(4): l = [] im_new[k].show() for i in range(h-t): for j in range(w): if (im_new[k].getpixel((j,i)) == 255): l.append(0) else: l.append(1) f.write("l=[") n = 0 for i in l: if (n%w==0): f.write("/n") f.write(str(i)+",") n+=1 f.write("]/n")
效果:
这里还没有做完,还需要两个步骤:
5.训练:通过各种模式识别,机器学习算法,来挑选和训练合适数量的训练集。不是训练的样本越多越好。过学习,泛化能力差的问题可能在这里出现。这一步不是必须的,有些识别算法是不需要训练的。
6.识别:输入待识别的处理后的图片,转换成分类器需要的输入格式,然后通过输出的类和置信度,来判断大概可能是哪个字母。识别本质上就是分类。