着手做验证码后又查了查相关的文章,发现做这个东西不用ocr的话思路都是一样的,估计是大家相互参考的问题吧,都是先降噪,然后二值化,然后建立自己的样本库,再进行比对。
在降噪进行二值化前,需要处理下颜色的问题,中间查到有人用php在做验证码,对于进行验证码识别的具体步骤和注意点,下面两篇文章讲的是最清楚的,比前面的文章讲的都要仔细。
http://blog.csdn.net/ugg/archive/2009/03/03/3953137.aspx
http://blog.csdn.net/ugg/archive/2009/03/09/3972368.aspx
大概的处理验证码,几个步骤:
首先的一步是单值化,去噪点,然后生成单个数字的库。
1.先进行去噪点,二值化。
参考这里讲的,很清楚,直接可以拿来用于图像二值化。
http://dream-people.iteye.com/blog/378907
上面是我们需要进行处理的验证码图片
#! /usr/bin/env python
#coding=utf-8
#coding:utf-8
import sys,os
from PIL import Image,ImageDraw
#二值数组
t2val = {}
def twoValue(image,G):
for y in xrange(0,image.size[1]):
for x in xrange(0,image.size[0]):
g = image.getpixel((x,y))
if g > G:
t2val[(x,y)] = 1
else:
t2val[(x,y)] = 0
# 降噪
# 根据一个点A的RGB值,与周围的8个点的RBG值比较,设定一个值N(0 <N <8),当A的RGB值与周围8个点的RGB相等数小于N时,此点为噪点
# G: Integer 图像二值化阀值
# N: Integer 降噪率 0 <N <8
# Z: Integer 降噪次数
# 输出
# 0:降噪成功
# 1:降噪失败
def clearNoise(image,N,Z):
for i in xrange(0,Z):
t2val[(0,0)] = 1
t2val[(image.size[0] - 1,image.size[1] - 1)] = 1
for x in xrange(1,image.size[0] - 1):
for y in xrange(1,image.size[1] - 1):
nearDots = 0
L = t2val[(x,y)]
if L == t2val[(x - 1,y - 1)]:
nearDots += 1
if L == t2val[(x - 1,y)]:
nearDots += 1
if L == t2val[(x- 1,y + 1)]:
nearDots += 1
if L == t2val[(x,y - 1)]:
nearDots += 1
if L == t2val[(x,y + 1)]:
nearDots += 1
if L == t2val[(x + 1,y - 1)]:
nearDots += 1
if L == t2val[(x + 1,y)]:
nearDots += 1
if L == t2val[(x + 1,y + 1)]:
nearDots += 1
if nearDots < N:
t2val[(x,y)] = 1
def saveImage(filename,size):
image = Image.new("1",size)
draw = ImageDraw.Draw(image)
for x in xrange(0,size[0]):
for y in xrange(0,size[1]):
draw.point((x,y),t2val[(x,y)])
image.save(filename)
image = Image.open("0.gif").convert('L')
twoValue(image,200)
clearNoise(image,4,1)
saveImage("t5.jpg",image.size)
def prtrbg(image):
for y in xrange(0,image.size[1]):
for x in xrange(0,image.size[0]):
g = image.getpixel((x,y))
if g>0:
g=1
else:
g=0
print g ,
print " "
ims = Image.open("t5.jpg")
ims = ims.convert('1')
prtrbg(ims)
#print ims.tostring()
代码直接copy上面博客的内容,还都是javaeye的邻居。
降噪处理得到的图片如下
基本上噪点都去掉了,再进行数值化。
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 1 1 0 0 0 0 1 0 0 1 1 0 0 0 1 0 0 0 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 1 1 0 0 0 1 1 0 0 1 0 0 0 1 1 1 0 0 1 1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 0 0 0 0 1 1 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 0 0 1 0 0 1 1 0 0 0 1 1 1 0 0 1 0 0 0 1 1 0 0 0 1 1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1 1 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 0 0 0 1 1 0 0 1 1 0 0 1 1 1 0 0 0 1 0 0 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 1 0 0 1 1 0 0 0 1 1 0 0 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 1 0 0 1 1 0 0 0 1 1 0 0 0 1 0 0 0 1 1 1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 0 0 0 1 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
- 大小: 2 KB
- 大小: 1019 Bytes
分享到:
相关推荐
本项目“迅雷自动签到,自动登录,使用大漠插件”是针对迅雷游戏加速器的一个自动化脚本,旨在帮助用户自动完成登录和签到流程,从而节省时间,避免手动操作的繁琐。以下将详细介绍该项目涉及的主要知识点: 1. **...
标题“天翼网盘自动签到.zip”表明这是一个与天翼网盘自动化签到相关的压缩文件,其中可能包含了实现这一功能的代码或脚本。描述中的“天翼网盘自动签到.zip”再次强调了文件内容的核心,即针对天翼网盘的每日签到...
它可能是一个Python脚本或者其他编程语言编写的程序,用户只需要运行这个"main"文件,就能启动自动签到功能。程序可能会模拟用户的登录行为,然后自动完成签到步骤,包括输入必要的信息、点击按钮等。由于是“傻瓜式...
【52签到小助手V2.1.93.zip】是一个包含自动化签到功能的软件包,主要用于提高用户在日常签到活动中的效率。这个软件的版本号为V2.1.93,是V2.2版本之前的最后一个可用更新,意味着它可能包含了开发者认为稳定且功能...
标题中的“百度贴吧一键签到源码”指的是一个程序代码,用于实现自动化签到功能,主要针对百度贴吧这个在线社区平台。源码是程序员编写的原始指令集合,它揭示了软件内部的工作机制,通常用于学习、修改或扩展功能。...
"IAPP职教云自动签到助手源码.zip" 是一个包含源代码的压缩文件,其中的源代码是为实现自动签到功能而设计的,针对的是"IAPP职教云"这个平台。IAPP职教云可能是某职业教育平台的移动应用,提供了在线学习、签到等...
这个压缩包文件的标题揭示了一个使用AutoJS编写的脚本,目的是自动执行支付宝会员的积分签到任务。AutoJS是一款强大的自动化工具,适用于Android系统,允许用户编写JavaScript代码来实现对手机应用的自动化控制。在...
总的来说,《基于Android的签到点名系统》是一个集成了现代移动技术和地理位置服务的高效管理工具,其设计与实现涵盖了Android开发的多个方面,对于学习和理解Android应用开发具有很高的实践价值。通过不断的优化和...
1. "联通免码每日领取1GB流量日包v1.2.exe" 这个文件名暗示了一个针对中国联通用户的程序,版本号为v1.2,可能是一个应用程序,用于每天免费领取1GB的一日流量包。这个工具可能需要用户拥有联通手机号,并且可能需要...
【标题】"百度贴吧顶帖/签到源码-易语言"揭示了这是一个使用易语言编写的程序,其主要功能是实现对百度贴吧的自动顶帖和签到操作。易语言是中国的一种编程语言,设计目标是使编程变得更加简单、直观,适合初学者和...
"cs.exe"可能是“Client Server”(客户端服务器)的缩写,表明这可能是一个客户端应用程序,通过连接到服务器端来实现挂机功能。"自动验证码版"表明这个版本的软件集成了自动识别和处理验证码的技术,提高了软件的...
本项目"**C#版本模拟登陆百度,2018年4月27日可用**"提供了一个C#语言编写的程序,专门用于模拟用户登录百度网站,而且在发布时是有效的。这个程序的独特之处在于,它不仅能够完成基本的登录操作,还为开发者提供了...
快速登录是QQ任务助手的一个重要特性,它允许用户迅速进入QQ账号,无需经历繁琐的输入验证码和记忆密码的过程。通过安全验证和优化的登录流程,用户可以更便捷地管理自己的多个QQ账号,这对于经常需要切换账号的用户...
优化:业务行程表支持筛选自动签到和手动签到的数据类型 优化:业务交账表增加销售金额、销售退货金额、底部加入金额合计,支持导出Excel 新增:BS端增加动态验证码,提升系统安全性。 七、其他新增调整 ...
自动签到功能保证了用户活跃度,而自动同问和同等则进一步增强了问题的覆盖面和影响力。 软件中包含的一些文件如`ip.Dat`、`mqpd2.dat`、`mqpd.dat`等可能是用于存储配置信息、账号数据或网络通信的数据文件。`DB...