按键精灵最原始的简单验证码识别法

金猪脚本(原飞猪脚本)以按键精灵教学为主,涉及UiBot,Python,Lua等脚本编程语言,教学包括全自动办公脚本,游戏辅助脚本,引流脚本,网页脚本,安卓脚本,IOS脚本,注册脚本,点赞脚本,阅读脚本以及网赚脚本等各个领域。想制作脚本和学习按键精灵的朋友可以添加按键精灵学习交流群:554127455 学习路上不再孤单,金猪脚本伴你一同成长.

按键精灵最原始的简单验证码识别法

上一篇院刊我们已经介绍了几种常见的验证码形式,相信大家对验证码都有了一定的了解,这期我们就去了解下一些简单验证码的识别的思路和流程,在破解验证码中需要用到的知识一般是 像素、线、面等基本2维图形元素的处理和色差分析,这方面小编也是刚刚接触,所以今天就重点介绍下在不使用第三方插件的情况下最原始的依靠像素识别数字、字母的方法——点阵识别法

[tr=rgb(154, 205, 50)]什么是点阵?

简单的说,点阵就是一幅位图。一般默认都指单色位图,即它是用一个bit(位)表示一个点(像素),在二进制数系统中,每个0或1就是一个位(bit),位是内存的最小单位,点阵就是指在显示屏上一个字或图像的宽或高是由多少个像素点组成,比如拿围棋盘来比做点阵,你在围棋盘上的横竖8个格子中用棋子摆出的字或图形就是就是8*8点阵的了

知道点阵分布后我们怎能去识别它呢,我们以数字为例

[tr=rgb(154, 205, 50)]如何用点阵识别法识别数字?

按键精灵最原始的简单验证码识别法

首先,要识别一个数字,我们先截取这个数字的图像,截取的范围最好按照数字的边缘截取,截取过大的话做点阵麻烦,这里要注意下我们在验证码识别中最常用的是24位的BMP格式的图片,因为BMP是一种不压缩的图片格式,所以截图的话BMP格式最为清楚。如果用JPG,图片被压的可能和原版都不一样了,就更别提识别了,截取相应的数字图后我们把它弄到按键抓抓图像处理处,放大并显示网格显示如图

按键精灵最原始的简单验证码识别法

从图上不难看出这里的每个数字(除1外)都是由横5、竖8,及5行8列共40个像素组成的,我们把白色部分都当做是0,黑色部分,也就是构成数字的主体部分,当做是1,按照从左到右顺序从左边第一个格子开始排列:

0就可以看成0111010001100011000110001100011000101110

1就可以看成0010001100001000010000100001000010001110

依此类推,然后我们套用相应的代码

  1. '赋值下十个特征码,开头代码执行一次就可以了
  2. NO0="0111010001100011000110001100011000101110"
  3. NO1="0010001100001000010000100001000010001110"
  4. NO2="0111010001100010001000100010001000011111"
  5. NO3="0111010001000010011000001000011000101110"
  6. NO4="0001000110010100101010010011110001000011"
  7. NO5="1111110000100001111000001000011000101110"
  8. NO6="0111010010100001111010001100011000101110"
  9. NO7="1111110010000100010000100001000010000100"
  10. NO8="0111010001100010111010001100011000101110"
  11. NO9="0111010001100011000101111000010100101110"
  12. MsgBox GetShu(283, 258, 6, 4, "000000")
  13. '以下是写好的函数模块,写好基本就不用修改了,需要的时候调用执行即可
  14. Function GetShu(x, y, z, n, col)'传入要识别的数字前台左上角坐标xy,俩数间间距z,数量n,字体颜色col
  15. GetShu = ""
  16. Dim code, temp_x, i_x, i_y, num
  17. For temp_x = 0 To n - 1
  18. code = ""
  19. For i_y = 0 To 7
  20. For i_x = 0 To 4
  21. If GetPixelColor(x + i_x + temp_x * z, y + i_y) = col Then
  22. code = code & "1"
  23. Else
  24. code = code & "0"
  25. End If
  26. Next
  27. Next
  28. If code = NO0 Then
  29. num="0"
  30. ElseIf code = NO1 Then
  31. num="1"
  32. ElseIf code = NO2 Then
  33. num="2"
  34. ElseIf code = NO3 Then
  35. num="3"
  36. ElseIf code = NO4 Then
  37. num="4"
  38. ElseIf code = NO5 Then
  39. num="5"
  40. ElseIf code = NO6 Then
  41. num="6"
  42. ElseIf code = NO7 Then
  43. num="7"
  44. ElseIf code = NO8 Then
  45. num="8"
  46. ElseIf code = NO9 Then
  47. num = "9"
  48. Else
  49. num = "?"
  50. End If
  51. GetShu = GetShu & num
  52. Next
  53. End Function

复制代码

可能有点童鞋看不懂,可以看下视频演示地址,就容易理解了(虽然不完整):http://www.aipai.com/c8/ODY9JSklI2gnaiMv.html

[tr=rgb(154, 205, 50)]点阵法的局限性

其实点阵法并不是很好用,但是它又比较基础,很多解决验证码的图像处理和方法都跟它沾边,所以今天主要是想让不懂点阵法的童鞋知道下思路,有相应的拓展空间

它的局限性:

1.缺点很明显,必须是字体清晰,字与字间距一致的才可正常识别

2.字体不同,粗细不同,点阵特征都不一样,没有哪个点阵特征码是可以通用的。

3.识别数字或字母的方法和思路有很多,并不是单一的点阵(一点一点的)识别,,每种识别方法都各有利弊。


分享到:


相關文章: