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+款云产品!
更多网易技术、产品、运营经验分享请点击。
相关文章:
【推荐】 kubernetes大概的工作原理
windows下简单验证码识别——完美验证码识别系统的更多相关文章
- windows下简单的缓冲区溢出
缓冲区溢出是什么? 当缓冲区边界限制不严格时,由于变量传入畸形数据或程序运行错误,导致缓冲区被“撑爆”,从而覆盖了相邻内存区域的数据 成功修改内存数据,可造成进程劫持,执行恶意代码,获取服务器控制权等 ...
- 【微服务No.1】Consul服务发现在windows下简单使用
基本介绍: 安装: 下载地址:https://www.consul.io/downloads.html 运行: consul agent -dev 显示这个界面说明已经开启成功. 页面显示: 然后访问 ...
- windows下简单安装postgres
目前版本是PostgreSQL 9.6,它经过以下平台认证: 32位Windows Windows 7,8和10 Windows 2008 Server 64位Windows Windows 7,8和 ...
- Consul服务发现在windows下简单使用
目录 基本介绍: 服务连接: 客户端: 系列章节: 回到顶部 基本介绍: 安装: 下载地址:https://www.consul.io/downloads.html 运行: consul agent ...
- Windows下Phalcon的安装以及phpstorm识别phalcon语法及提示
1.由于Phalcon是C语言写的一个扩展,所以需要安装这个扩展php_phalcon.dll,下载地址https://github.com/phalcon/cphalcon/releases, 然后 ...
- windows下简单配置apache
不得不做个笔记,不然每次配置都记不清楚... 详细的配置朋友这边写的很好.地址 # 对 PHP 4 LoadModule php4_module "c:/php/php4apache2.dl ...
- QT开发(二) windows下简单部署
如果使用vs编译器 需要c runtime 例如(msvc110 )这种 还需要若干qt的dll 基本在qt的bin目录 如果使用了QWindow这种对象还需要引用qt目录 plugins下 的内容 ...
- windows下简单配置squid反向代理服务器
下载windwosNT版本的squid下载地址: http://squid.acmeconsulting.it/download/squid-2.6.STABLE13-bin.zip 1.把squid ...
- WINDOWS下简单操作SQLITE3
有测试操作的时候,还是很好的说~~~ 找个sqlite3.txt下载 sqlite3.exe db.sqlite3 SQLite version 3.7.13 2012-06-11 02:05:22 ...
随机推荐
- zookeeper简绍
先一句话概括下zookeeper:zookeeper可谓是目前使用最广泛的分布式组件了.其功能和职责单一,但却非常重要. zookeeper到底是什么?(技术文) 1)zookeeper实际上是yah ...
- jekins测试环境自动化
最近搭建测试环境自动化,之前都是用机器猫.机器猫的流程大概是这样,开发打包上传到svn,给测试一个svn地址,测试到机器猫上传文件,然后再运行启动. 为了减去开发打包这个环节,所以专用jenkins. ...
- 修改 Windows 10 UWP 应用任务栏图标
修改 Windows 10 UWP 应用任务栏图标 Windows 7 时代,修改任务栏图标很简单,右键打开属性,更改图标即可.但步入 Windows 8 之后,随着应用商店 UWP 应用的问世,可以 ...
- ios7 导航栏适配
ios ui开发过程中,经常会使用到导航栏,默认的样式比较单一,所以经常需要修改导航栏的样式 ios4: - (void)drawRect:(CGRect)rect { UIImage *image ...
- c++ template 判断是否为类类型
/* The following code example is taken from the book * "C++ Templates - The Complete Guide" ...
- 怎样application不被第三方应用杀掉--Android
方法: 对于放在/system/app下的应用,需要在其Manifest.xml文件中设置persistent属性,如应用程序'Phone'的AndroidManifest.xml文件: <ap ...
- .net core利用MySqlBulkLoader大数据批量导入MySQL
最近用core写了一个数据迁移小工具,从SQLServer读取数据,加工后导入MySQL,由于数据量太过庞大,数据表都过百万,常用的dapper已经无法满足.三大数据库都有自己的大数据批量导入数据的方 ...
- 莫队算法详解和c实现
解析和实现 摘要: 莫队算法是一个对于区间.树或其他结构离线(在线)维护的算法,此算法基于一些基本算法,例如暴力维护,树状数组,分块,最小曼哈顿距离生成树,对其进行揉合从而产生的一个简单 ...
- mongo find
MongoVUE 对应成语句,结构如下: db.logs.find({ "message" : /消息/ }, { "message" : 1 }).limit ...
- linux每天一小步---touch命令详解
1 命令功能: 创建文件和修改文件或者目录的时间戳 2 命令语法: touch [选项] [文件名或者目录名] 3 命令参数: -a 只修改文件的access(访问)时间. -c 或-- ...