网上介绍的用按键精灵识别验证码的想法如下:
我们知道,每一个数字都唯一对应一个只包涵0和1的二维数组
例如:
这样,我们可以从左至右,从上到下的扫描每一个数字,将其组装成一个个数组,如下所示:
var1 = Array(0,0,1,1,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0)
var2 = Array(0,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0)
var3 = Array(0,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,1,1,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,0,0,0)
var4 = Array(0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,0,1,1,0,0,0,1,1,0,0,1,1,0,0,0,1,1,0,0,1,1,0,0,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,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0)
var5 = Array(1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,1,1,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,0,0,0)
var6 = Array(0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1,0,0,1,1,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1,1,0,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1,0,0,0)
var7 = Array(1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0)
var8 = Array(0,0,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,0,0,1,1,0,0,0,1,1,0,0,1,1,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,1,1,1,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,0,0)
var9 = Array(0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,1,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,1,1,1,0,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,1,1,0,0,1,1,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0)
var0 = Array(0,0,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,1,1,0,0,0,1,1,0,0,1,1,1,1,1,1,1,0,0,0,0,1,1,1,0,0,0)
如果我们将验证码中的数字也转换成一个数组,然后将其与标准数字进行比较,得出其值为哪个数字即可。但可惜的是,验证码中有噪点,即使通过将验证码进行灰度处理(R+B+C)/3 后,转换成的数组与标准数字的数组也不能完全匹配。如果进行模糊匹配的话,那么可能会得出多个结果。需要进一步的研究。
//定义数字1-9的二维码阵列
Dim var1, var2, var3, var4, var5, var6, var7, var8, var9, var0
var1 = Array(0,0,1,1,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0)
var2 = Array(0,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0)
var3 = Array(0,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,1,1,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,0,0,0)
var4 = Array(0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,0,1,1,0,0,0,1,1,0,0,1,1,0,0,0,1,1,0,0,1,1,0,0,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,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0)
var5 = Array(1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,1,1,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,0,0,0)
var6 = Array(0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1,0,0,1,1,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1,1,0,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1,0,0,0)
var7 = Array(1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0)
var8 = Array(0,0,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,0,0,1,1,0,0,0,1,1,0,0,1,1,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,1,1,1,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,0,0)
var9 = Array(0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,1,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,1,1,1,0,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,1,1,0,0,1,1,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0)
var0 = Array(0,0,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,1,1,0,0,0,1,1,0,0,1,1,1,1,1,1,1,0,0,0,0,1,1,1,0,0,0)
varAll = Array(var0, var1, var2, var3, var4, var5, var6, var7, var8, var9)
//验证码图片第一个数字的左上角坐标
init_x = 685 //x轴
init_y = 609 //y轴
//把坐标值复制给变量
var_x = init_x
var_y = init_y
//定义一个临时数组,用于存放扫描到的数字二维码
Dim tempArray(117)
//存放4位验证码结果
Dim resultArray(4)
For i = 0 To 3
index = 0
//从第一行开始扫描,总共扫描13行
var_y = init_y
TracePrint "----------------------------------------"
row = 0
While row < 13
//从第一列开始扫描,总共扫描9列
column = 0
var_temp_x = var_x
Dim row_print
row_print = ""
While column < 9
//变量m,若该像素不为白色,则i等于1,否则等于0
m = 0
//获取指定点颜色
GetColor = GetPixelColor(var_temp_x, var_y)
//获取颜色的RGB分量
Call Plugin.Color.ColorToRGB(GetColor, GetColor_R, GetColor_G, GetColor_B)
//进行灰度化处理
grayColor = (GetColor_R+GetColor_G+GetColor_B)/3
//调试移动鼠标
//MoveTo var_temp_x, var_y
If grayColor < 115 Then
m = 1
End If
row_print = row_print&m
//为临时数组赋值
tempArray(index) = m
//临时数组向后移动一位
index = index + 1
//扫描下一列
column = column + 1
var_temp_x = var_temp_x + 1
Wend
TracePrint row_print
//扫描下一行
row = row + 1
var_y = var_y + 1
Wend
//x坐标向右移动13位,指向下一个数字
var_x = var_x + 13
//与标准的0-9的阿拉伯数字的二维码进行比较,找出匹配到的数字
matchIndex = - 1
maxSameCount = 0
For j = 0 To UBound(varAll)-1
var_array = varAll(j)
//数字的二维码是否与标准相同
sameCount = 0
For k = 0 To UBound(var_array)-1
If (var_array(k) = tempArray(k)) Then
sameCount = sameCount + 1
End If
Next
TracePrint "###########################" & sameCount
If sameCount > maxSameCount Then
maxSameCount = sameCount
matchIndex = j
End If
Next
resultArray(i) = matchIndex
Next
Dim result
result = ""
For j = 0 To UBound(resultArray) - 1
result = result&"#"&resultArray(j)&"#"
Next
MessageBox result
- 大小: 9.1 KB
- 大小: 49.2 KB
分享到:
相关推荐
通过按键精灵识别屏幕上的数字,原理简单,讲解详细,值得初学者一看!
按键精灵 验证码识别 后台运行脚本官方高级教程视频!
按键精灵验证码教程
经过不段改进程序源代码,最终实现了原生COM组件放到按键精灵目录下面就可以使用了,函数调用方法参考COM版函数说明,示例语句在下面 注:不需要regsvr32注册 旧插件: [2013.7.2]---按键精灵插件完全版--基于...
1.本插件需一台电脑或者服务器做验证码...4.几乎所有语言都能调用,将需要识别的验证码图片进行BASE64编码后POST给插件开放的服务即可,压缩包内涵详细使用说明,程序新手也能轻松看懂。 5.不会用找我 我帮忙调通。
按键精灵手机助手旋转验证码上传插件不需要base64编码,直接截图上传,获取旋转角度。借用山海插件大部分,函数。
这里是按键精灵的高级教程 ,由于本人只能上传20M的文件,只发一部分。主要是后台部分及验证码的识别部分
python实现按键精灵工具合集python实现按键精灵工具合集python实现按键精灵工具合集python实现按键精灵工具合集python实现按键精灵工具合集python实现按键精灵工具合集python实现按键精灵工具合集python实现按键精灵...
无忧验证码支持按键精灵 内置多种滤镜,去杂点、去色块、去色什...去干扰功能强大,方式灵活多变! 批量建模+智能过滤功能,制作一个新的验证码识别项目仅几分钟时间! 独创识别处理加速算法引擎,速度提高几十倍!...
//识别所设定区域的文字,返回识别到的文字 SetDict("我的字库.mdb");//设置字库路径,支持数据库和文本2种格式,默认路径为插件同一目录,默认名称为default_Dict.txt SetFontColor("FF00ff");//设置要识别的文字...
按键精灵 百度ocr文字识别。 见文章 https://blog.csdn.net/weixin_43798572/article/details/124075686
项目中用到的短信验证码的识别,方便用户的二次输入!
【官方】高级教程——如何识别屏幕上的数字.Q.txt【官方】高级教程——如何识别屏幕上的数字.Q.txt【官方】高级教程——如何识别屏幕上的数字.Q.txt【官方】高级教程——如何识别屏幕上的数字.Q.txt【官方】高级教程...
基于百度飞桨OCR,通过调用命令回显方式调用,具体文 件夹内有说明。
解压到按键精灵lib文件夹下即可调用 APIKey = "填写自己的" ’加在引号里头,别丢了引号 SecretKey= "填写自己的" //在脚本开始就指定好APIKey和SecretKey的值,后面只需要填写需要识别区域的坐标值即可。 test = ...
用命令行取回显方式调用
百度文字识别