谈谈C#验证码识别的方法集合

前段一直没有时间维护博客,还是因为太懒了只当它是一个wordpress的文具,其实工作生活记录一下没有什么不好。

个人项目中需要验证码识别,所以研究了一阵子,图像识别是c#的弱项。到互联网飞速发展的今天,验证码识别已经没当初那么简单了。

使用c#有以下几种识别方式:

tesseract-ocr

这是一个开源项目,项目地址:https://code.google.com/p/tesseract-ocr/。现在已经被google接手。当前最新的是3.02版,支持多个平台。需要注意的是安装了之后还需要下载与版本对应的语言包放到安装目录,默认设置下的识别能力一般,但是可以通过学习训练来得到最优的配置,具体设置方法请参阅wiki

windows平台下面可以通过cmd调用

执行识别图像的命令格式为:
tesseract .exe [-l lang]
Imagename: 需要识别的图片文件名
outputname: 输出结果txt文件名,用来存放识别出来的文字结果
lang: 使用的文字字库,根据要识别的文字类型来选择。
例如:输入命令:tesseract.exe 6.jpg 6 –l chi_sim

遗憾的是web用户调用cmd需要特殊权限,对于安全性是不好的

2 Asprise OCR

最新的是Asprise OCR v4.0 for C# [C Sharp] .NET,官网在http://asprise.com/product/ocr/index.php?lang=csharp。这不是一个开源项目,好在伟大的天朝到处都是破解版可以下载。没有繁琐的学习和训练,dll是由c++编译的,c#调用方便。如果是web项目甚至可以不用把dll放在项目里面。数字和字母的识别率挺高的。

调用方式:

需要注意的是代码里虽然只调用了一个AspriseOCR.dll,但是同一目录下还需要放另外2dll个哦。我在win7+vs2012+iisexpress环境测试成功,server上失败,也许是dll版本和系统不匹配

3 Tessnet2

Tessnet2 a .NET 2.0 Open Source OCR assembly using Tesseract engine 项目地址:http://www.pixel-technology.com/freeware/tessnet2/ 。其实就是前面说的tesseract-ocr 旧版本2.0的。net版。可以直接集成到framework2.0的web项目,同样需要下载语言包,语言包也在tesseract-ocr地址里下载,但是版本号一定要对应,也就是说只能使用tesseract-ocr 2的语言包。

4 自己写代码处理验证码图像,这个不详细讲了,通用性不高。也可以把图片简单处理后采用前面的方式来识别,提高成功率。


 

总结:不管使用什么识别工具,都存在一个识别率的问题,一句话没有百分之百的识别。还是要具体情况具体分析:

如果你想做一个qq空间游戏外挂,个人建议还是把验证码request下来给用户输吧,我相信没有人会为了少输一个验证码而容忍连续失败10次的登录(这个可是经常会有);

如果你想做的是自动化暴力的http post,比如自动注册机,不在乎失败反正挂在那循环。。。你应该采用验证码识别技术。

分享经验只为节省大家的时间:)

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Time limit is exhausted. Please reload CAPTCHA.