验证码识别小试
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.识别:输入待识别的处理后的图片,转换成分类器需要的输入格式,然后通过输出的类和置信度,来判断大概可能是哪个字母。识别本质上就是分类。

