找回密码
 立即注册
搜索
查看: 904|回复: 4

纪念海浩宠物中心原来的图片验证码..

[复制链接]

623

主题

8454

回帖

7741

积分

版主

弱弱的海豚

积分
7741
发表于 2008-10-11 10:18:20 | 显示全部楼层 |阅读模式
@:onioncn_13)

在我的建议下,海浩的宠物中心终于更改了一个相对难一点的验证码程序了..

吼吼..

在纪念原有的验证码消失的时候,你是否也有心想了解一下识别方法呢?

那就来看看,我最后代码中使用的方法吧:



60宽*20高的像素..源图为BMP..


1.第一步,程序中得到验证图片:
  使用wb控件在页面中判断是验证界面时,可以利用tagName方便的枚举出网页中唯一的图片,
为了节省时间,直接将图片对象设置为区域,然后利用剪贴板,转到图片框控件中
  1.     Set tImg = wb.Document.getElementsByTagName("img")
  2.     Set tRange = wb.Document.body.createControlRange()
  3.         tRange.Add (tImg)
  4.         tRange.execCommand ("Copy")
  5.         PicYzm.Picture = Clipboard.GetData
  6.     Set tImg = Nothing
  7.     Set tRange = Nothing
复制代码
2.呵呵,原来我的做法是直接去背和去孤点..在和ft(缩写)的讨论中,得知原来4分之1图时,并不会分割开文字,就可以得到
完整且独立的4个文字图片..
分别的起止坐标为:
  0,0
  15,0
  30,0
  45,0
大小均为: 15宽*20高(像素)



3.杂色清除: 在独立的文字图块中,文字的色点(像素总数)在不计背景的白色和边框的黑色时,数量是最多的..由此可以利用
此特点得到完整的干净的文字图片:
使用方便的GetPixel这个API,可以迅速的得到每点的颜色RGB值,ScaleMode为pix呵,
Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
不计背景的白色和边框的黑色: 也就是&HFFFFFF,&H0是不记取的.
此时,建立一个和图片长宽相同的2维数组,long型,可以方便快速的利于后面的判断..  
此数组中存储对应点的rgb值,并在存储过程中丢弃值为:&HFFFFFF,&H0的颜色..
计算所有出现的颜色中,数量最大值,并再次遍历数组,将非此值的点,全部置为0,反之为1,此时就可以得到一个干净的文字记录
,当然不再是图片形式了,如果你也认为没有必要显示的话..



4.去除边白: 好的做法是写4个函数,用于起始x,y和终止x,y的坐标..然后写入到一个一维字符串中..
例子为起点Y坐标,其它同..
  1. '取起点Y坐标
  2. Private Function GetStartY(ByRef pix() As Boolean) As Long
  3. Dim x&, y&
  4.     For y = 0 To pY - 1
  5.         For x = 0 To pX - 1
  6.             If pix(x, y) Then
  7.                 GetStartY = y
  8.                 Exit Function
  9.             End If
  10.         Next
  11.     Next
  12. End Function
复制代码
5.到至此,拿到手上的已是一个俗称为字模的字符串了..
写出学习程序,将所有得到的字模与文字一一对应..至此识别程序就完整且准确的实现了..

相对于干扰色在文字之上,或是文字有一点扭曲变形的时候,可以做一套标准字模后,在进行字模比对时,
设置一个相对合适的阀值..就可以在希望的范围内得到相似文字的判断了..

@:onioncn_12)

好了,妮妮的纪念文章首发在海浩呵.. 希望对软件开发人员有一定的帮助呵...有什么疑问可以随时发贴讨论呵.



其它: 部分数字字模..
2=011110110011110011000011001110011000110000111111
3=011110110011000011011110000011000011110011011110
4=000011000111001111011011110011111111000011000011
5=111111110000111110110011000011000011110011011110
6=011110110011110000111110110011110011110011011110
7=111111000011000110000110001100001100011000011000
8=011110110011110011011110110011110011110011011110
9=011110110011110011110011011111000011110011011110



2=011110110011110011000011001110011000110000111111
像什么呢??

011110
110011
110011
000011
001110
011000
110000
111111

@:onioncn_13)  你觉得像什么呢...???



后记: 新的验证码看似变幻莫测..其实仍然是很方便呵.. 在得到gif尾帧图片后.. 和背景色不近似的最高数量
颜色就是文字..如法泡制..写出新的识别程序也方便的..

[ 本帖最后由 妮可宝贝 于 2008-10-11 10:46 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

评分

参与人数 1金钱 +10 收起 理由
leibin + 10 原创内容

查看全部评分

其实我本来什么都没有....


俺是多尔的豌豆.. 俺是墙根...  俺还有那乌黑亮丽的长发...



上得了厅堂,下得了厨房,写得了代码,查得出异常,杀得了木马,翻得了围墙,开得起好车,买得起新房,斗得过二奶,打得过流氓

30

主题

1275

回帖

1732

积分

金牌会员

积分
1732
发表于 2008-10-11 10:34:47 | 显示全部楼层
学习学习。
回复

使用道具 举报

8

主题

1054

回帖

1439

积分

金牌会员

积分
1439
发表于 2008-10-13 09:15:04 | 显示全部楼层
2

虽然看不懂:ht27
回复

使用道具 举报

36

主题

3824

回帖

2761

积分

论坛元老

问佛

积分
2761
发表于 2008-10-13 10:19:58 | 显示全部楼层
字模和文字对应关系要学习好久,有没有现成的字典?
直接用ocr插件行不行
无趣,自己玩
回复

使用道具 举报

0

主题

8

回帖

10

积分

新手上路

积分
10
发表于 2008-10-13 21:10:09 | 显示全部楼层
:funk: 莫非是搞宠物外挂?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|海浩社区

GMT+8, 2025-9-15 07:23 , Processed in 0.072863 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表