windows下简单验证码识别——完美验证码识别系统

此文已由作者徐迪授权网易云社区发布。

欢迎访问网易云社区,了解更多网易技术产品运营经验。

讲到验证码识别,大家第一个可能想到tesseract。诚然,对于OCR而言,tesseract确实很强大,自带的字模能识别绝大多数规整的中英文。但是验证码毕竟不是OCR。对于现在简单的验证码,其干扰都很难规整的去完,或者说去干扰也是苦差事。你很难讲干扰去完后去做OCR,对于低成本的OCR识别更是这样。对于固定的验证码,针对性的训练库反而更有效,因为对于单一的验证码,其生成规则相对简单,用特定规格做字模识别率95%以上应该不难。

说到底还是需要一个简单的识别器,训练器。某次世纪识别系统是国内灰产码农用的最多的吧。可惜收费的,今天要介绍的完美验证码识别系统是类似的免费产品。验证码识别系统其实就是两部分组成,字模制作系统包括预处理的配置,和单字符字模制作以及生成字模打包文件,识别系统就是用字模打包结果去识别验证码,就是一个设置参数的函数,然后调用设别函数拿到结果。

软件内容如下:

WmCode.dll是主要的识别库,主程序负责字模生成,其中包括了众多图像学的算法,如下图,简要的介绍下常见的方法。

1.色彩通道噪点处理

在清除背景和保留前景的tab中有保留和去除指定颜色的操作(包括HSV RGB 色彩域),以及指定色彩的大小过滤。这些操作主要针对色彩较为有限的彩色小噪点,一般这种验证码噪声还是比较多的。通过这2种方式的结合,基本可以去掉大部分的此类噪点。

2.滤波类

主要针对灰度图处理,主要处理局部有灰度差异的噪声。很多验证码在局部制造一些高对比度的噪声,滤波操作对此类就有较好效果。另外的用途就是边缘提取,方便后期对干扰线的处理。

3.二值化

后边几类如形态学处理类,黑白图处理,干扰线处理,都是基于二值化后的图像,所以后边要先对图像二值化。软件把常见的阈值取值算法都放进去,具体算法这里就不讲了。

4.形态学处理

图像滤镜tab下包括了主流的形态学算法,开闭操作,轮廓骨架等。主要处理小噪点,以及取轮廓后方便后期去干扰线。

5.干扰线处理

最后的tab中包含对干扰线的检测去除检查去除算法

通过多个处理算法完成预处理,点击开始编辑图像,进入下一步,选择分割方式,识别方式和制作字模。

虽然有提供一些常见的分割方式,但对于大多遇到的非规则的验证码,分割效果确实不是很好,选择手动分割就不要管左边的配置了。识别模式首选整体识别,其他各种在实际识别中也不是很好。

下边主讲字模的制作。在工具区最左边的按钮,手动裁剪单个要处理的字,选择后双击,界面就变成单个字符处理。

在信息区输入要 训练结果,就会添加字模。操作应该算很简单。不断的训练,直到识别率到达满意为止。返回上个界面,点击识别库,识别库生成,填写密码(调用函数用),就会把库生成在项目目录下。识别的过程,其实在软件下给了函数的简单说明,以及各语言的样例,以python为例,看下大概的过程:

coding=gbk#第一行注释不能省,指定编码声明以支持中文#本代码文件在32位的python 3.4.3版测试通过import urllibimport timeimport stringimport ctypesfrom ctypes import *

dll = ctypes.windll.LoadLibrary('WmCode.dll')#如果dll不在当前目录,那么需要指定全路径if(dll.UseUnicodeString(1,1)): #这个函数用来向DLL说明传入的文本使用unicode格式

    print('SetInUnicode Success:')#UseUnicodeString调用一次即可,无需重复调用else:
    print('etInUnicode Fail!')#注意缩进格式if(dll.LoadWmFromFile('D:\网易论坛.dat','163')):#使用绝对路径
    print('Loaddat Success:')#LoadWmFromFile调用一次即可,无需重复调用
    Str = create_string_buffer(20)#创建文本缓冲区
    if(dll.GetImageFromFile('D:\wylt.JPG',Str)):#使用绝对路径
            #如果验证码图像不在当前目录,那么需要指定全路径
            print('GetVcode Success:',Str.raw.decode("gbk"))                #返回的文本自行处理口口口问题
    else:
            print('GetVcode Fail!')                

else:

    print('Loaddat Fail!')#注意缩进格式

所有的函数封装在WmCode.dll中,导出的了几个基本函数。第一个指定使用unicode,和语言互调用有关。LoadWmFromFile 函数加载库文件,就是我们用主程序训练的结果,第二个参数是导出时填写的密码,GetImageFromFile 方法直接对本地文件进行识别,第一个参数是图片地址,第二个是输出的结果。调用函数相当简单的,对比tesseract复杂的参数,这个识别是相当的快捷。在力求快速生成识别代码的情况下,用这个库确实非常方便。

网易云易盾提供新一代网站验证码,包括智能验证码、滑动验证码等形式,验证码接口稳定性 99.9%,感知威胁可智能切换验证难度,告别繁琐验证,保护业务安全,点击可免费试用。

网易云免费体验馆,0成本体验20+款云产品!

更多网易技术、产品、运营经验分享请点击。

文章来源: 网易云社区

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用过程注意事项: 1.调用DLL识别库识别,多线程下不需要加许可证,支持并发识别. 2.调用DLL识别,识别参数设置命令SetWmOption必须与你弄字库时候的设置参数一样,不然会导致识别率下降具体参数说明,请看调用例子里的[我的函数.txt]文档有对应参数说明. 3.如果遇见本工具无法识别的验证码,可以找群主(用神经网络识别)定制,价格便宜公道. [2017-07-27] 完美验证码识别系统V3.2 1.增加DLL识别返回方式2和3具体看我的函数.txt里说明,主要是增加一个可以返回识别后的总体信任度.这个值你可以给它个阀值,比如说如果总体信任度小于60,那么你就不提交服务器,直接重新获取图片识别,直到总体信任度大于60你才提交给服务器,这个阀值具体多少,自己可以先测试. 2.修复导出字库没有导出完,直接关闭窗口崩溃问题 3.添加批量下载后定位到批量下载文件夹 4.增加可以使用验证码长度进行过滤,增加可以使用总体信任度进行过滤.(这两个功能可以快速的制作字库,比如说你验证码是4位的,你可以设置验证码小于4,大于4那这张图片肯定是识别错误的,那么软件就会把这张图片保存下来,同理可以使用总体信任度进行此保存) [2017-07-20] 完美验证码识别系统V3.1 1.修复数组下标越界问题 2.字库列表添加可以多选然后右键批量删除选中项 [2017-07-13] 完美验证码识别系统V3.0 1.修复导出字库,重复导出不会覆盖原来的BUG,导出的图片会累加上去(注意,以前导出的字模导入新版中会出错,新版字模导出格式为a_md5.bmp 请自行写个软件修改文件名,然后再导入) 2.修复添加字库空格都可以添加进去 3.修复崩溃问题.(崩溃应该绝大多数都是此原因造成的.) 4.其它一些调整. [2017-06-25] 完美验证码识别系统V2.6 1.解决输入焦点问题. 2.批量下载增加可以过滤掉宽度范围,面积范围,高度范围,黑色数范围,可以去掉没有用的干扰图片. 3.其它的一些细节调整 [2017-06-07] 完美验证码识别系统V2.5 1.修复去除干扰滤镜在没有先二值化图片都可以使用. 2.尝试解决添加字库崩溃问题(代码较多,找到1处问题.不知道还有没有其他问题) 3.编辑字库页面增加个选中框[添加字库后自动下载图片],使用批量下载图片,可以快速添加字库 4.使用截图工具,截取图片后,会自动切换到划线工具. [2017-05-17] 完美验证码识别系统V2.3 1.修复设置滤镜默认都有选择项. 2.修复当使用本地图像时,没有新建项目都可以编辑的问题. 3.修复黑白处理滤镜在没有先二值化图片都可以使用. 4.修复处理很多逻辑错误会导致程序崩溃. 5.增加字库列表添加右键删除当前选中的字库 6.增加禁止重复运行,由于重复运行会导致字库添加失败,和读取不到已经做过的字库. 7.增加快捷键"自动分割(Alt+R)" ,"手动分割(Alt+T)" 8.编辑页面增加个批量下载按钮,可以实现批量下载并自动分割图片功能(批量下载的图片保存在当前项目文件夹下的"批量下载"文件夹中) 9.主窗口增加一个选择框_图像已处理不使用滤镜,由于批量下载后图片都是已经使用过滤镜了,处理批量下载的图片这里必须得勾选上,不然会重复运用滤镜 [2017-05-07] 完美验证码识别系统V2.2 1.新增分辨率1024*768布局 2.修改注册热键方式为本进程方式(原为全局热键,感谢群友XGSoft提供源代码) [2017-05-06] 完美验证码识别系统V2.1(要求屏幕分辨率最低1440*900) 1.去掉窗口最大化,去掉自动调整窗口大小代码,修复部分控件显示不全 2.增加检测图像是否二值化,没二值化的图片不允许编辑 3.尝试解决添加字库崩溃的问题(不确定问题出在哪!!) 4.解决滤波数组越界问题.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值