验证码 字模

由于上面的验证码是24位的jpeg图像,并且包含了噪点,所以我们要做的就是去噪和去色,我拿PS找了张验证码试了试,使用PS滤镜中的去噪效果还行, 但是没有在PIL找到去噪的函数,后来发现中值过滤后可以去掉大部分的噪点,而且PIL里有现成的函数,接下来我试着直接把图像转换为单色,结果发现还是 会有不过的噪点留了下来,因为中值过滤时把不少噪点淡化了,但转换为音色时这些噪点又被强化显示了,于是在中值过滤后对图像亮度进行加强处理,然后再转换 为单色,这样验证码图片就变得比较容易识别了:

上面这些处理使用Python才几行:

im = Image.open(image_name)

im = im.filter(ImageFilter.MedianFilter())

enhancer = ImageEnhance.Contrast(im)

im = enhancer.enhance(2)

im = im.convert('1')

im.show()

接下来就是提取这些数字的字模,使用shell脚本下载100幅图片,抽出三张图片获取字模:

#!/usr/bin/env python

#encoding=utf-8

import Image,ImageEnhance,ImageFilter

import sys

image_name = "./images/81.jpeg"

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 = 12 #start postion of first number

w = 10 #width of each number

h = 15 #end postion from top

t = 2 #start postion of top

im_new = []

#split four numbers in the picture

for i in range(4):

im1 = im.crop((s+w*i+i*2,t,s+w*(i+1)+i*2,h))

im_new.append(im1)

f = file("data.txt","a")

for k in range(4):

l = []

#im_new[k].show()

for i in range(13):

for j in range(10):

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%10==0):

f.write("/n")

f.write(str(i)+",")

n+=1

f.write("]/n")

把字模保存为list,用于接下来的匹配;

提取完字模后剩下来的就是对需要处理的图片进行与数据库中的字模进行匹配了,基本的思路就是看相应点的重合率,但是由于噪点的影响在对(6,8) (8,3)(5,9)的匹配时容易出错,俺自己针对已有的100幅图片数据采集进行分析,采用了双向匹配(图片与字模分别作为基点),做了半天的测试终于 可以实现100%的识别率。

#!/usr/bin/env python

#encoding=utf-8

import Image,ImageEnhance,ImageFilter

import Data

DEBUG = False

def d_print(*msg):

global DEBUG

if DEBUG:

for i in msg:

print i,

print

else:

pass

def Get_Num(l=[]):

min1 = []

min2 = []

for n in Data.N:

count1=count2=count3=count4=0

if (len(l) != len(n)):

print "Wrong pic"

exit()

for i in range(len(l)):

if (l[i] == 1):

count1+=1

if (n[i] == 1):

count2+=1

for i in range(len(l)):

if (n[i] == 1):

count3+=1

if (l[i] == 1):

count4+=1

d_print(count1,count2,count3,count4)

min1.append(count1-count2)

min2.append(count3-count4)

d_print(min1,"/n",min2)

for i in range(10):

if (min1[i] <= 2 or min2[i] <= 2):

if ((abs(min1[i] - min2[i])) <10):

return i

for i in range(10):

if (min1[i] <= 4 or min2[i] <= 4):

if (abs(min1[i] - min2[i]) <= 2):

return i

for i in range(10):

flag = False

if (min1[i] <= 3 or min2[i] <= 3):

for j in range(10):

if (j != i and (min1[j] <5 or min2[j] <5)):

flag = True

else:

pass

if (not flag):

return i

for i in range(10):

if (min1[i] <= 5 or min2[i] <= 5):

if (abs(min1[i] - min2[i]) <= 10):

return i

for i in range(10):

if (min1[i] <= 10 or min2[i] <= 10):

if (abs(min1[i] - min2[i]) <= 3):

return i

#end of function Get_Num

def Pic_Reg(image_name=None):

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 = 12 #start postion of first number

w = 10 #width of each number

h = 15 #end postion from top

t = 2 #start postion of top

im_new = []

#split four numbers in the picture

for i in range(4):

im1 = im.crop((s+w*i+i*2,t,s+w*(i+1)+i*2,h))

im_new.append(im1)

s = ""

for k in range(4):

l = []

#im_new[k].show()

for i in range(13):

for j in range(10):

if (im_new[k].getpixel((j,i)) == 255):

l.append(0)

else:

l.append(1)

s+=str(Get_Num(l))

return s

print Pic_Reg("./images/22.jpeg")

这里再提一下验证码识别的基本方法:截图,二值化、中值滤波去噪、分割、紧缩重排(让高矮统一)、字库特征匹配识别。

http://www.jb51.net/article/78598.htm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Zimo221字模软件是一款非常实用的字库制作工具。该软件主要用于将文字、符号或图案转换成字模格式,以便在各种显示设备上使用。字模指的是将文字或图形转化为点阵阵列形式的编码图形,机器可以根据这些编码将图形显示出来。 Zimo221字模软件具有非常简单易用的界面和丰富的功能。用户只需输入要转换的文字或图案,选择合适的字模格式和大小,软件就能够自动生成相应的字模编码。同时,该软件还能够支持多种字库格式,包括GB2312、ASCII、Unicode等,方便用户进行各种类型的字库制作。 除了基本的字模生成功能,Zimo221字模软件还提供了丰富的编辑和处理功能。用户可以对生成的字模进行自定义的编辑,比如调整字形的大小、颜色、加粗、旋转等。同时,软件还支持对字模进行批量处理和导出,方便用户进行大规模字模的制作和管理。 值得一提的是,Zimo221字模软件还具备强大的查看和预览功能。用户可以通过软件内置的字模查看器,实时查看和预览字库效果,以便更好地进行调整和编辑。这样能够大大提高字库制作的效率和准确性。 总的来说,Zimo221字模软件是一款功能强大、易于使用的字库制作工具。它不仅提供了基本的字模生成和编辑功能,还具备丰富的处理和预览功能,方便用户对字库进行自定义和管理。无论是对于个人用户还是字库制作专业人士来说,该软件都是一种很好的选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值