吉吉于

验证码识别小试

#这是一篇很水的文章,作者就是要记个流水帐。

以前留意过验证码识别的知识,最近同学要倒卖小米手机号,于是遍有破解其验证码的想法,动手试试,菜鸟入门~高手绕道。

从网上随便找个验证码,当然,要找相对简单一些的, (^.^)

这里有一篇技术文:http://huaidan.org/archives/2085.html

1

# -*- 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")

效果:

captcha

captcha6

这里还没有做完,还需要两个步骤:

5.训练:通过各种模式识别,机器学习算法,来挑选和训练合适数量的训练集。不是训练的样本越多越好。过学习,泛化能力差的问题可能在这里出现。这一步不是必须的,有些识别算法是不需要训练的。

6.识别:输入待识别的处理后的图片,转换成分类器需要的输入格式,然后通过输出的类和置信度,来判断大概可能是哪个字母。识别本质上就是分类。

转载请注明:于哲的博客 » 验证码识别小试