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

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

讲到验证码识别,大家第一个可能想到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下简单验证码识别——完美验证码识别系统的更多相关文章

  1. windows下简单的缓冲区溢出

    缓冲区溢出是什么? 当缓冲区边界限制不严格时,由于变量传入畸形数据或程序运行错误,导致缓冲区被“撑爆”,从而覆盖了相邻内存区域的数据 成功修改内存数据,可造成进程劫持,执行恶意代码,获取服务器控制权等 ...

  2. 【微服务No.1】Consul服务发现在windows下简单使用

    基本介绍: 安装: 下载地址:https://www.consul.io/downloads.html 运行: consul agent -dev 显示这个界面说明已经开启成功. 页面显示: 然后访问 ...

  3. windows下简单安装postgres

    目前版本是PostgreSQL 9.6,它经过以下平台认证: 32位Windows Windows 7,8和10 Windows 2008 Server 64位Windows Windows 7,8和 ...

  4. Consul服务发现在windows下简单使用

    目录 基本介绍: 服务连接: 客户端: 系列章节: 回到顶部 基本介绍: 安装: 下载地址:https://www.consul.io/downloads.html 运行: consul agent ...

  5. Windows下Phalcon的安装以及phpstorm识别phalcon语法及提示

    1.由于Phalcon是C语言写的一个扩展,所以需要安装这个扩展php_phalcon.dll,下载地址https://github.com/phalcon/cphalcon/releases, 然后 ...

  6. windows下简单配置apache

    不得不做个笔记,不然每次配置都记不清楚... 详细的配置朋友这边写的很好.地址 # 对 PHP 4 LoadModule php4_module "c:/php/php4apache2.dl ...

  7. QT开发(二) windows下简单部署

    如果使用vs编译器 需要c runtime 例如(msvc110 )这种 还需要若干qt的dll 基本在qt的bin目录 如果使用了QWindow这种对象还需要引用qt目录 plugins下 的内容 ...

  8. windows下简单配置squid反向代理服务器

    下载windwosNT版本的squid下载地址: http://squid.acmeconsulting.it/download/squid-2.6.STABLE13-bin.zip 1.把squid ...

  9. WINDOWS下简单操作SQLITE3

    有测试操作的时候,还是很好的说~~~ 找个sqlite3.txt下载 sqlite3.exe db.sqlite3 SQLite version 3.7.13 2012-06-11 02:05:22 ...

随机推荐

  1. Django学习---jsonp跨域请求

    jsonp跨域请求 我们通过ajax进行跨域请求的时候,请求发送过去,但是在接受返回数据的时候浏览器会进行拦截. 这是由于浏览器存在同源策略机制,同源策略阻止从一个源加载的文档或脚本获取或设置另一个源 ...

  2. verilog 计算机网络 仿真 激励 pcap

    做verilog网络逻辑时,需要产生正确的数据包格式激励,手写激励真烦人,现在让testbench读取pcap文件,则可以精确还原数据包的bit与时序,省去了一大批麻烦 1.设计读取逻辑 `times ...

  3. 【C#】串口操作实用类

    做工业通 信有很长时间了,特别是串口(232/485),有VB/VC/C各种版本的串口操作代码,这些代码也经过了多年的现场考验,应该说是比较健壮的代码,但 是目前却没有C#相对成熟的串口操作代码,最近 ...

  4. 归纳整理Linux下C语言常用的库函数----字符串转换、字符测试、及内存控制

    在没有IDE的时候,记住一些常用的库函数的函数名.参数.基本用法及注意事项是很有必要的. 参照Linux_C_HS.chm的目录,我大致将常用的函数分为一下几类: 1. 内存及字符串控制及操作 2. ...

  5. 信息传递(tarjan)

    信息传递 http://uoj.ac/problem/146 有 n 个同学(编号为 1 到n )正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为 i的同学的信息传递对象 ...

  6. php通过反射执行某方法

    简单记录下通过反射来获取某方法的参数,然后利用php内置函数类执行此方法 一个简单的test类 class test { //2个参数默认值 public function b($name='lemo ...

  7. SQL获取当前日期的年、月、日、时、分、秒数据

    SQL Server中获取当前日期的年.月.日.时.分.秒数据: SELECT GETDATE() as '当前日期',DateName(year,GetDate()) as '年',DateName ...

  8. 中介者模式c#(媒婆版)

    using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace 中介者模式{  ...

  9. 安装系统重启的时候出现了error:file '/boot/grub/i386-pc/normal.mod' not found

    1.直接进入系统的时候只出现grub rescue的命令行 可以使用的命令有set和 ls 在用ls命令查看 磁盘的分区情况其中hd0 代表第一块硬盘 hd1代表第二块 使用ls 来查看存在那些系统, ...

  10. Python中的排序方法sort(),sorted(),argsort()等

    python 列表排序方法sort.sorted技巧篇 转自https://www.cnblogs.com/whaben/p/6495702.html,学习参考. Python list内置sort( ...