这两天由于工做须要,要到某个网站采集信息,一是要模拟登录,二是要破解验证码,本想用第三方付费打码,可是想一想网上免费的代码也挺多的,因而乎准备从网上撸点代码下来,谁知道,撸了好多个都不行,本人之前也没接触过这方面的,代码无从下手,最后不知道在哪一个兄台博客找到一个国外的第三方开源OCR,说是强大的谷歌公司作维护,C++开发的,有.NET封装的连接库,甚好!git
项目地址:https://github.com/tesseract-ocr/tesseract
语言库:https://github.com/tesseract-ocr/langdata
OCR语言训练:https://github.com/tesseract-ocr/tessdatagithub
下面开始撸示例:app
新建C#控制台,版本选择.NET 4.5 测试
Tesseract ocr = new Tesseract(); ocr.SetVariable("tessedit_char_whitelist", "0123456789"); ocr.Init(@"D:\测试\Ocr\tessdata", "eng", true);
第一句就不用说了,第二句是设置识别的字符,例如,若是你要识别的验证码是A-Z0-9你就都写进来就OK了
第三句就是初始化OCR的语言训练配置,里面不少文件,只要写文件名小数点前面的就OK了网站
List<Word> result = ocr.DoOCR(bmp, Rectangle.Empty); if(result.Count<=0)return; string code = result[0].Text;
最后的Code就是识别出来的验证码了,这里验证码图片必定要转换为Bitmap对象才行,记得用完了释放Bitmap对象!spa
下面是我测试截图:code
上面是验证码,下面文件名是识别出来的结果命名保存的文件!固然验证码是通过处理的,原始的验证码图片是酱紫的:xml
验证码图片过小,OCR识别不了,并且默认状况下,要是白底,黑子才能识别,因此网上的验证码必定要先本身二值化处理而且清除掉背景色,再进行识别!
我这里的处理方式是二值化以后,把图片放大三倍,不要担忧看着有锯齿,OCR能够识别的
当初我把图片放大两倍,发现有的时候8会被识别成3,因此我干脆又放大了一倍,发现不存在这个问题了,虽然看起来锯齿感很明显,可是OCR无论美丑对象
你是否是参照案例撸码了,运行了?而后你发现程序运行报错了?blog
这里要在程序的app.config的startup节点加上 useLegacyV2RuntimeActivationPolicy="true"节点,详细以下:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <startup useLegacyV2RuntimeActivationPolicy="true"> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> </configuration>
而后再运行,是否是能够识别出来了,就是这么简单!